Skip to content

Commit 1075c5c

Browse files
🔍 test: Improve coverage of i and n instructions.
1 parent 3b01938 commit 1075c5c

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

test/src/Integer/arithmetic.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,91 @@ test ( 'catch ZeroDivisionError' , t => {
225225
}
226226

227227
}) ;
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

Comments
 (0)