[
{
"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"
}
]