@@ -1374,35 +1374,40 @@ describe('parse', function () {
13741374 it ( 'should parse % with multiplication' , function ( ) {
13751375 approxEqual ( parseAndEval ( '100*50%' ) , 50 )
13761376 approxEqual ( parseAndEval ( '50%*100' ) , 50 )
1377- assert . throws ( function ( ) { parseAndEval ( '50%(*100)' ) } , / V a l u e e x p e c t e d / )
1377+ assert . throws ( function ( ) { parseAndEval ( '50%(*100)' ) } , SyntaxError )
13781378 } )
13791379
13801380 it ( 'should parse % with division' , function ( ) {
13811381 approxEqual ( parseAndEval ( '100/50%' ) , 200 ) // should be treated as 100/(50%)
13821382 approxEqual ( parseAndEval ( '100/50%*2' ) , 400 ) // should be treated as (100/(50%))×2
13831383 approxEqual ( parseAndEval ( '50%/100' ) , 0.005 )
13841384 approxEqual ( parseAndEval ( '50%(13)' ) , 11 ) // should be treated as 50 % (13)
1385- assert . throws ( function ( ) { parseAndEval ( '50%(/100)' ) } , / V a l u e e x p e c t e d / )
1385+ assert . throws ( function ( ) { parseAndEval ( '50%(/100)' ) } , SyntaxError )
13861386 } )
13871387
13881388 it ( 'should parse unary % before division, binary % with division' , function ( ) {
13891389 approxEqual ( parseAndEval ( '10/200%%3' ) , 2 ) // should be treated as (10/(200%))%3
13901390 } )
13911391
13921392 it ( 'should reject repeated unary percentage operators' , function ( ) {
1393- assert . throws ( function ( ) { math . parse ( '17%%' ) } , / U n e x p e c t e d o p e r a t o r % / )
1394- assert . throws ( function ( ) { math . parse ( '17%%*5' ) } , / U n e x p e c t e d o p e r a t o r % / )
1395- assert . throws ( function ( ) { math . parse ( '10/200%%%3' ) } , / U n e x p e c t e d o p e r a t o r % / )
1393+ assert . throws ( function ( ) { math . parse ( '17%%' ) } , SyntaxError )
1394+ assert . throws ( function ( ) { math . parse ( '17%%*5' ) } , SyntaxError )
1395+ assert . throws ( function ( ) { math . parse ( '10/200%%%3' ) } , SyntaxError )
13961396 } )
13971397
13981398 it ( 'should parse unary % with addition' , function ( ) {
13991399 approxEqual ( parseAndEval ( '100+3%' ) , 103 )
1400- approxEqual ( parseAndEval ( '3%+100' ) , 100.03 )
1400+ assert . strictEqual ( parseAndEval ( '3%+100' ) , 3 ) // treat as 3 mod 100
14011401 } )
14021402
14031403 it ( 'should parse unary % with subtraction' , function ( ) {
14041404 approxEqual ( parseAndEval ( '100-3%' ) , 97 )
1405- approxEqual ( parseAndEval ( '3%-100' ) , - 99.97 )
1405+ assert . strictEqual ( parseAndEval ( '3%-100' ) , - 97 ) // treat as 3 mod -100
1406+ } )
1407+
1408+ it ( 'should parse binary % with bitwise negation' , function ( ) {
1409+ assert . strictEqual ( parseAndEval ( '11%~1' ) , - 1 ) // equivalent to 11 mod -2
1410+ assert . strictEqual ( parseAndEval ( '11%~-3' ) , 1 ) // equivalent to 11 mod 2
14061411 } )
14071412
14081413 it ( 'should parse operator mod' , function ( ) {
0 commit comments