[ { "name": "adds past 64 bits", "args": [ "123456789012345678901234567890", "add", "987654321098765432109876543210" ], "expect": "1111111110111111111011111111100" }, { "name": "i64 max plus one does not wrap", "args": [ "9223372036854775807", "add", "1" ], "expect": "9223372036854775808" }, { "name": "subtracting a larger number goes negative", "args": [ "123456789012345678901234567890", "subtract", "987654321098765432109876543210" ], "expect": "-864197532086419753208641975320" }, { "name": "2^64 squared is 2^128", "args": [ "18446744073709551616", "multiply", "18446744073709551616" ], "expect": "340282366920938463463374607431768211456" }, { "name": "negative times negative is positive", "args": [ "-99999999999999999999", "multiply", "-3" ], "expect": "299999999999999999997" }, { "name": "anything times zero is zero", "args": [ "-123456789012345678901234567890", "multiply", "0" ], "expect": "0" }, { "name": "divide truncates towards zero", "args": [ "-7", "divide", "2" ], "expect": "-3" }, { "name": "remainder takes the sign of the dividend", "args": [ "-7", "remainder", "2" ], "expect": "-1" }, { "name": "positive by negative divisor", "args": [ "7", "remainder", "-2" ], "expect": "1" }, { "name": "long division of large numbers", "args": [ "1606938044258990275541962092341162602522202993782792835313721", "divide", "717897987691852588770249" ], "expect": "2238393297946874000179418290327143433" }, { "name": "remainder of large numbers", "args": [ "1606938044258990275541962092341162602522202993782792835313721", "remainder", "717897987691852588770249" ], "expect": "249667313308346329188904" }, { "name": "power of two", "args": [ "2", "power", "100" ], "expect": "1267650600228229401496703205376" }, { "name": "a negative base to an odd power", "args": [ "-3", "power", "41" ], "expect": "-36472996377170786403" }, { "name": "zero to the zero is one", "args": [ "0", "power", "0" ], "expect": "1" }, { "name": "minus one to a huge power", "args": [ "-1", "power", "1000000001" ], "expect": "-1" }, { "name": "compound growth factor 1.0045^12, scaled", "args": [ "10045", "power", "12" ], "expect": "1055356751950102607459752843054131873164306640625" }, { "name": "a malformed number is refused", "args": [ "01", "add", "1" ], "expectError": "not a whole number in decimal" }, { "name": "minus zero is refused", "args": [ "-0", "add", "1" ], "expectError": "not a whole number in decimal" }, { "name": "a decimal point is refused", "args": [ "1.5", "add", "1" ], "expectError": "not a whole number in decimal" }, { "name": "division by zero", "args": [ "1", "divide", "0" ], "expectError": "division by zero" }, { "name": "remainder by zero", "args": [ "1", "remainder", "0" ], "expectError": "division by zero" }, { "name": "a negative exponent is refused", "args": [ "2", "power", "-1" ], "expectError": "exponent must not be negative" }, { "name": "a power beyond the size limit is refused before it is built", "args": [ "3", "power", "50000" ], "expectError": "result too large" }, { "name": "an unknown operation", "args": [ "1", "modulo", "2" ], "expectError": "unknown operation" } ]