@@ -225,3 +225,91 @@ test ( 'catch ZeroDivisionError' , t => {
225
225
}
226
226
227
227
} ) ;
228
+
229
+ test ( 'simple in-place operations with 12 and 20 <double>' , t => {
230
+
231
+ const a = ZZ . from ( 12 ) ;
232
+ const b = ZZ . from ( 20 ) ;
233
+
234
+ t . is ( a . iaddn ( b . valueOf ( ) ) . toString ( ) , '32' ) ;
235
+ t . is ( b . iaddn ( a . valueOf ( ) ) . toString ( ) , '52' ) ;
236
+
237
+ t . is ( a . isubn ( b . valueOf ( ) ) . toString ( ) , '-20' ) ;
238
+ t . is ( b . isubn ( a . valueOf ( ) ) . toString ( ) , '72' ) ;
239
+
240
+ t . is ( a . imuln ( b . valueOf ( ) ) . toString ( ) , '-1440' ) ;
241
+ t . is ( b . imuln ( a . valueOf ( ) ) . toString ( ) , '-103680' ) ;
242
+
243
+ t . is ( a . idivn ( b . valueOf ( ) ) . toString ( ) , '0' ) ;
244
+ t . throws ( ( ) => b . idivn ( a . valueOf ( ) ) . toString ( ) , { instanceOf : ZeroDivisionError } ) ;
245
+
246
+ t . is ( a . imodn ( b ) . toString ( ) , '0' ) ;
247
+ t . throws ( ( ) => b . imodn ( a . valueOf ( ) ) . toString ( ) , { instanceOf : ZeroDivisionError } ) ;
248
+
249
+ } ) ;
250
+
251
+ test ( 'simple in-place operations with -12 and -20 <double>' , t => {
252
+
253
+ const a = ZZ . from ( - 12 ) ;
254
+ const b = ZZ . from ( - 20 ) ;
255
+
256
+ t . is ( a . iaddn ( b . valueOf ( ) ) . toString ( ) , '-32' ) ;
257
+ t . is ( b . iaddn ( a . valueOf ( ) ) . toString ( ) , '-52' ) ;
258
+
259
+ t . is ( a . isubn ( b . valueOf ( ) ) . toString ( ) , '20' ) ;
260
+ t . is ( b . isubn ( a . valueOf ( ) ) . toString ( ) , '-72' ) ;
261
+
262
+ t . is ( a . imuln ( b . valueOf ( ) ) . toString ( ) , '-1440' ) ;
263
+ t . is ( b . imuln ( a . valueOf ( ) ) . toString ( ) , '103680' ) ;
264
+
265
+ t . is ( a . idivn ( b . valueOf ( ) ) . toString ( ) , '-1' ) ;
266
+ t . is ( b . idivn ( a . valueOf ( ) ) . toString ( ) , '-103680' ) ;
267
+
268
+ t . is ( a . imodn ( b . valueOf ( ) ) . toString ( ) , '-1' ) ;
269
+ t . is ( b . imodn ( a . valueOf ( ) ) . toString ( ) , '0' ) ;
270
+
271
+ } ) ;
272
+
273
+ test ( 'simple in-place operations with 12 and -20 <double>' , t => {
274
+
275
+ const a = ZZ . from ( 12 ) ;
276
+ const b = ZZ . from ( - 20 ) ;
277
+
278
+ t . is ( a . iaddn ( b . valueOf ( ) ) . toString ( ) , '-8' ) ;
279
+ t . is ( b . iaddn ( a . valueOf ( ) ) . toString ( ) , '-28' ) ;
280
+
281
+ t . is ( a . isubn ( b . valueOf ( ) ) . toString ( ) , '20' ) ;
282
+ t . is ( b . isubn ( a . valueOf ( ) ) . toString ( ) , '-48' ) ;
283
+
284
+ t . is ( a . imuln ( b . valueOf ( ) ) . toString ( ) , '-960' ) ;
285
+ t . is ( b . imuln ( a . valueOf ( ) ) . toString ( ) , '46080' ) ;
286
+
287
+ t . is ( a . idivn ( b . valueOf ( ) ) . toString ( ) , '-1' ) ;
288
+ t . is ( b . idivn ( a . valueOf ( ) ) . toString ( ) , '-46080' ) ;
289
+
290
+ t . is ( a . imodn ( b . valueOf ( ) ) . toString ( ) , '-1' ) ;
291
+ t . is ( b . imodn ( a . valueOf ( ) ) . toString ( ) , '0' ) ;
292
+
293
+ } ) ;
294
+
295
+ test ( 'simple in-place operations with -12 and 20 <double>' , t => {
296
+
297
+ const a = ZZ . from ( - 12 ) ;
298
+ const b = ZZ . from ( 20 ) ;
299
+
300
+ t . is ( a . iaddn ( b . valueOf ( ) ) . toString ( ) , '8' ) ;
301
+ t . is ( b . iaddn ( a . valueOf ( ) ) . toString ( ) , '28' ) ;
302
+
303
+ t . is ( a . isubn ( b . valueOf ( ) ) . toString ( ) , '-20' ) ;
304
+ t . is ( b . isubn ( a . valueOf ( ) ) . toString ( ) , '48' ) ;
305
+
306
+ t . is ( a . imuln ( b . valueOf ( ) ) . toString ( ) , '-960' ) ;
307
+ t . is ( b . imuln ( a . valueOf ( ) ) . toString ( ) , '-46080' ) ;
308
+
309
+ t . is ( a . idivn ( b . valueOf ( ) ) . toString ( ) , '0' ) ;
310
+ t . throws ( ( ) => b . idivn ( a . valueOf ( ) ) . toString ( ) , { instanceOf : ZeroDivisionError } ) ;
311
+
312
+ t . is ( a . imodn ( b . valueOf ( ) ) . toString ( ) , '0' ) ;
313
+ t . throws ( ( ) => b . imodn ( a . valueOf ( ) ) . toString ( ) , { instanceOf : ZeroDivisionError } ) ;
314
+
315
+ } ) ;
0 commit comments