const tests = [
[-0 x100000001n, -2 n, 0 x200000002n],
[-0 x100000000n, -2 n, 0 x200000000n],
[-0 xffffffffn, -2 n, 0 x1fffffffen],
[-0 xfffffffen, -2 n, 0 x1fffffffcn],
[-0 x80000001n, -2 n, 0 x100000002n],
[-0 x80000000n, -2 n, 0 x100000000n],
[-0 x7fffffffn, -2 n, 0 xfffffffen],
[-0 x7ffffffen, -2 n, 0 xfffffffcn],
[-0 x10001n, -2 n, 0 x20002n],
[-0 x10000n, -2 n, 0 x20000n],
[-0 xffffn, -2 n, 0 x1fffen],
[-0 xfffen, -2 n, 0 x1fffcn],
[-0 x8001n, -2 n, 0 x10002n],
[-0 x8000n, -2 n, 0 x10000n],
[-0 x7fffn, -2 n, 0 xfffen],
[-0 x7ffen, -2 n, 0 xfffcn],
[-2 n, -2 n, 4 n],
[-1 n, -2 n, 2 n],
[0 n, -2 n, 0 n],
[1 n, -2 n, -2 n],
[2 n, -2 n, -4 n],
[0 x7ffen, -2 n, -0 xfffcn],
[0 x7fffn, -2 n, -0 xfffen],
[0 x8000n, -2 n, -0 x10000n],
[0 x8001n, -2 n, -0 x10002n],
[0 xfffen, -2 n, -0 x1fffcn],
[0 xffffn, -2 n, -0 x1fffen],
[0 x10000n, -2 n, -0 x20000n],
[0 x10001n, -2 n, -0 x20002n],
[0 x7ffffffen, -2 n, -0 xfffffffcn],
[0 x7fffffffn, -2 n, -0 xfffffffen],
[0 x80000000n, -2 n, -0 x100000000n],
[0 x80000001n, -2 n, -0 x100000002n],
[0 xfffffffen, -2 n, -0 x1fffffffcn],
[0 xffffffffn, -2 n, -0 x1fffffffen],
[0 x100000000n, -2 n, -0 x200000000n],
[0 x100000001n, -2 n, -0 x200000002n],
[-0 x7fffffffffffffffn, -1 n, 0 x7fffffffffffffffn],
[-0 x7ffffffffffffffen, -1 n, 0 x7ffffffffffffffen],
[-0 x100000001n, -1 n, 0 x100000001n],
[-0 x100000000n, -1 n, 0 x100000000n],
[-0 xffffffffn, -1 n, 0 xffffffffn],
[-0 xfffffffen, -1 n, 0 xfffffffen],
[-0 x80000001n, -1 n, 0 x80000001n],
[-0 x80000000n, -1 n, 0 x80000000n],
[-0 x7fffffffn, -1 n, 0 x7fffffffn],
[-0 x7ffffffen, -1 n, 0 x7ffffffen],
[-0 x10001n, -1 n, 0 x10001n],
[-0 x10000n, -1 n, 0 x10000n],
[-0 xffffn, -1 n, 0 xffffn],
[-0 xfffen, -1 n, 0 xfffen],
[-0 x8001n, -1 n, 0 x8001n],
[-0 x8000n, -1 n, 0 x8000n],
[-0 x7fffn, -1 n, 0 x7fffn],
[-0 x7ffen, -1 n, 0 x7ffen],
[-1 n, -1 n, 1 n],
[0 n, -1 n, 0 n],
[1 n, -1 n, -1 n],
[2 n, -1 n, -2 n],
[0 x7ffen, -1 n, -0 x7ffen],
[0 x7fffn, -1 n, -0 x7fffn],
[0 x8000n, -1 n, -0 x8000n],
[0 x8001n, -1 n, -0 x8001n],
[0 xfffen, -1 n, -0 xfffen],
[0 xffffn, -1 n, -0 xffffn],
[0 x10000n, -1 n, -0 x10000n],
[0 x10001n, -1 n, -0 x10001n],
[0 x7ffffffen, -1 n, -0 x7ffffffen],
[0 x7fffffffn, -1 n, -0 x7fffffffn],
[0 x80000000n, -1 n, -0 x80000000n],
[0 x80000001n, -1 n, -0 x80000001n],
[0 xfffffffen, -1 n, -0 xfffffffen],
[0 xffffffffn, -1 n, -0 xffffffffn],
[0 x100000000n, -1 n, -0 x100000000n],
[0 x100000001n, -1 n, -0 x100000001n],
[0 x7ffffffffffffffen, -1 n, -0 x7ffffffffffffffen],
[0 x7fffffffffffffffn, -1 n, -0 x7fffffffffffffffn],
[-0 x8000000000000000n, 0 n, 0 n],
[-0 x7fffffffffffffffn, 0 n, 0 n],
[-0 x7ffffffffffffffen, 0 n, 0 n],
[-0 x100000001n, 0 n, 0 n],
[-0 x100000000n, 0 n, 0 n],
[-0 xffffffffn, 0 n, 0 n],
[-0 xfffffffen, 0 n, 0 n],
[-0 x80000001n, 0 n, 0 n],
[-0 x80000000n, 0 n, 0 n],
[-0 x7fffffffn, 0 n, 0 n],
[-0 x7ffffffen, 0 n, 0 n],
[-0 x10001n, 0 n, 0 n],
[-0 x10000n, 0 n, 0 n],
[-0 xffffn, 0 n, 0 n],
[-0 xfffen, 0 n, 0 n],
[-0 x8001n, 0 n, 0 n],
[-0 x8000n, 0 n, 0 n],
[-0 x7fffn, 0 n, 0 n],
[-0 x7ffen, 0 n, 0 n],
[0 n, 0 n, 0 n],
[1 n, 0 n, 0 n],
[2 n, 0 n, 0 n],
[0 x7ffen, 0 n, 0 n],
[0 x7fffn, 0 n, 0 n],
[0 x8000n, 0 n, 0 n],
[0 x8001n, 0 n, 0 n],
[0 xfffen, 0 n, 0 n],
[0 xffffn, 0 n, 0 n],
[0 x10000n, 0 n, 0 n],
[0 x10001n, 0 n, 0 n],
[0 x7ffffffen, 0 n, 0 n],
[0 x7fffffffn, 0 n, 0 n],
[0 x80000000n, 0 n, 0 n],
[0 x80000001n, 0 n, 0 n],
[0 xfffffffen, 0 n, 0 n],
[0 xffffffffn, 0 n, 0 n],
[0 x100000000n, 0 n, 0 n],
[0 x100000001n, 0 n, 0 n],
[0 x7ffffffffffffffen, 0 n, 0 n],
[0 x7fffffffffffffffn, 0 n, 0 n],
[-0 x8000000000000000n, 1 n, -0 x8000000000000000n],
[-0 x7fffffffffffffffn, 1 n, -0 x7fffffffffffffffn],
[-0 x7ffffffffffffffen, 1 n, -0 x7ffffffffffffffen],
[-0 x100000001n, 1 n, -0 x100000001n],
[-0 x100000000n, 1 n, -0 x100000000n],
[-0 xffffffffn, 1 n, -0 xffffffffn],
[-0 xfffffffen, 1 n, -0 xfffffffen],
[-0 x80000001n, 1 n, -0 x80000001n],
[-0 x80000000n, 1 n, -0 x80000000n],
[-0 x7fffffffn, 1 n, -0 x7fffffffn],
[-0 x7ffffffen, 1 n, -0 x7ffffffen],
[-0 x10001n, 1 n, -0 x10001n],
[-0 x10000n, 1 n, -0 x10000n],
[-0 xffffn, 1 n, -0 xffffn],
[-0 xfffen, 1 n, -0 xfffen],
[-0 x8001n, 1 n, -0 x8001n],
[-0 x8000n, 1 n, -0 x8000n],
[-0 x7fffn, 1 n, -0 x7fffn],
[-0 x7ffen, 1 n, -0 x7ffen],
[1 n, 1 n, 1 n],
[2 n, 1 n, 2 n],
[0 x7ffen, 1 n, 0 x7ffen],
[0 x7fffn, 1 n, 0 x7fffn],
[0 x8000n, 1 n, 0 x8000n],
[0 x8001n, 1 n, 0 x8001n],
[0 xfffen, 1 n, 0 xfffen],
[0 xffffn, 1 n, 0 xffffn],
[0 x10000n, 1 n, 0 x10000n],
[0 x10001n, 1 n, 0 x10001n],
[0 x7ffffffen, 1 n, 0 x7ffffffen],
[0 x7fffffffn, 1 n, 0 x7fffffffn],
[0 x80000000n, 1 n, 0 x80000000n],
[0 x80000001n, 1 n, 0 x80000001n],
[0 xfffffffen, 1 n, 0 xfffffffen],
[0 xffffffffn, 1 n, 0 xffffffffn],
[0 x100000000n, 1 n, 0 x100000000n],
[0 x100000001n, 1 n, 0 x100000001n],
[0 x7ffffffffffffffen, 1 n, 0 x7ffffffffffffffen],
[0 x7fffffffffffffffn, 1 n, 0 x7fffffffffffffffn],
[-0 x100000001n, 2 n, -0 x200000002n],
[-0 x100000000n, 2 n, -0 x200000000n],
[-0 xffffffffn, 2 n, -0 x1fffffffen],
[-0 xfffffffen, 2 n, -0 x1fffffffcn],
[-0 x80000001n, 2 n, -0 x100000002n],
[-0 x80000000n, 2 n, -0 x100000000n],
[-0 x7fffffffn, 2 n, -0 xfffffffen],
[-0 x7ffffffen, 2 n, -0 xfffffffcn],
[-0 x10001n, 2 n, -0 x20002n],
[-0 x10000n, 2 n, -0 x20000n],
[-0 xffffn, 2 n, -0 x1fffen],
[-0 xfffen, 2 n, -0 x1fffcn],
[-0 x8001n, 2 n, -0 x10002n],
[-0 x8000n, 2 n, -0 x10000n],
[-0 x7fffn, 2 n, -0 xfffen],
[-0 x7ffen, 2 n, -0 xfffcn],
[2 n, 2 n, 4 n],
[0 x7ffen, 2 n, 0 xfffcn],
[0 x7fffn, 2 n, 0 xfffen],
[0 x8000n, 2 n, 0 x10000n],
[0 x8001n, 2 n, 0 x10002n],
[0 xfffen, 2 n, 0 x1fffcn],
[0 xffffn, 2 n, 0 x1fffen],
[0 x10000n, 2 n, 0 x20000n],
[0 x10001n, 2 n, 0 x20002n],
[0 x7ffffffen, 2 n, 0 xfffffffcn],
[0 x7fffffffn, 2 n, 0 xfffffffen],
[0 x80000000n, 2 n, 0 x100000000n],
[0 x80000001n, 2 n, 0 x100000002n],
[0 xfffffffen, 2 n, 0 x1fffffffcn],
[0 xffffffffn, 2 n, 0 x1fffffffen],
[0 x100000000n, 2 n, 0 x200000000n],
[0 x100000001n, 2 n, 0 x200000002n],
[-0 x100000001n, 0 x7ffen, -0 x7ffe00007ffen],
[-0 x100000000n, 0 x7ffen, -0 x7ffe00000000n],
[-0 xffffffffn, 0 x7ffen, -0 x7ffdffff8002n],
[-0 xfffffffen, 0 x7ffen, -0 x7ffdffff0004n],
[-0 x80000001n, 0 x7ffen, -0 x3fff00007ffen],
[-0 x80000000n, 0 x7ffen, -0 x3fff00000000n],
[-0 x7fffffffn, 0 x7ffen, -0 x3ffeffff8002n],
[-0 x7ffffffen, 0 x7ffen, -0 x3ffeffff0004n],
[-0 x10001n, 0 x7ffen, -0 x7ffe7ffen],
[-0 x10000n, 0 x7ffen, -0 x7ffe0000n],
[-0 xffffn, 0 x7ffen, -0 x7ffd8002n],
[-0 xfffen, 0 x7ffen, -0 x7ffd0004n],
[-0 x8001n, 0 x7ffen, -0 x3fff7ffen],
[-0 x8000n, 0 x7ffen, -0 x3fff0000n],
[-0 x7fffn, 0 x7ffen, -0 x3ffe8002n],
[-0 x7ffen, 0 x7ffen, -0 x3ffe0004n],
[0 x7ffen, 0 x7ffen, 0 x3ffe0004n],
[0 x7fffn, 0 x7ffen, 0 x3ffe8002n],
[0 x8000n, 0 x7ffen, 0 x3fff0000n],
[0 x8001n, 0 x7ffen, 0 x3fff7ffen],
[0 xfffen, 0 x7ffen, 0 x7ffd0004n],
[0 xffffn, 0 x7ffen, 0 x7ffd8002n],
[0 x10000n, 0 x7ffen, 0 x7ffe0000n],
[0 x10001n, 0 x7ffen, 0 x7ffe7ffen],
[0 x7ffffffen, 0 x7ffen, 0 x3ffeffff0004n],
[0 x7fffffffn, 0 x7ffen, 0 x3ffeffff8002n],
[0 x80000000n, 0 x7ffen, 0 x3fff00000000n],
[0 x80000001n, 0 x7ffen, 0 x3fff00007ffen],
[0 xfffffffen, 0 x7ffen, 0 x7ffdffff0004n],
[0 xffffffffn, 0 x7ffen, 0 x7ffdffff8002n],
[0 x100000000n, 0 x7ffen, 0 x7ffe00000000n],
[0 x100000001n, 0 x7ffen, 0 x7ffe00007ffen],
[-0 x100000001n, 0 x7fffn, -0 x7fff00007fffn],
[-0 x100000000n, 0 x7fffn, -0 x7fff00000000n],
[-0 xffffffffn, 0 x7fffn, -0 x7ffeffff8001n],
[-0 xfffffffen, 0 x7fffn, -0 x7ffeffff0002n],
[-0 x80000001n, 0 x7fffn, -0 x3fff80007fffn],
[-0 x80000000n, 0 x7fffn, -0 x3fff80000000n],
[-0 x7fffffffn, 0 x7fffn, -0 x3fff7fff8001n],
[-0 x7ffffffen, 0 x7fffn, -0 x3fff7fff0002n],
[-0 x10001n, 0 x7fffn, -0 x7fff7fffn],
[-0 x10000n, 0 x7fffn, -0 x7fff0000n],
[-0 xffffn, 0 x7fffn, -0 x7ffe8001n],
[-0 xfffen, 0 x7fffn, -0 x7ffe0002n],
[-0 x8001n, 0 x7fffn, -0 x3fffffffn],
[-0 x8000n, 0 x7fffn, -0 x3fff8000n],
[-0 x7fffn, 0 x7fffn, -0 x3fff0001n],
[-0 x7ffen, 0 x7fffn, -0 x3ffe8002n],
[0 x7fffn, 0 x7fffn, 0 x3fff0001n],
[0 x8000n, 0 x7fffn, 0 x3fff8000n],
[0 x8001n, 0 x7fffn, 0 x3fffffffn],
[0 xfffen, 0 x7fffn, 0 x7ffe0002n],
[0 xffffn, 0 x7fffn, 0 x7ffe8001n],
[0 x10000n, 0 x7fffn, 0 x7fff0000n],
[0 x10001n, 0 x7fffn, 0 x7fff7fffn],
[0 x7ffffffen, 0 x7fffn, 0 x3fff7fff0002n],
[0 x7fffffffn, 0 x7fffn, 0 x3fff7fff8001n],
[0 x80000000n, 0 x7fffn, 0 x3fff80000000n],
[0 x80000001n, 0 x7fffn, 0 x3fff80007fffn],
[0 xfffffffen, 0 x7fffn, 0 x7ffeffff0002n],
[0 xffffffffn, 0 x7fffn, 0 x7ffeffff8001n],
[0 x100000000n, 0 x7fffn, 0 x7fff00000000n],
[0 x100000001n, 0 x7fffn, 0 x7fff00007fffn],
[-0 x100000001n, 0 x8000n, -0 x800000008000n],
[-0 x100000000n, 0 x8000n, -0 x800000000000n],
[-0 xffffffffn, 0 x8000n, -0 x7fffffff8000n],
[-0 xfffffffen, 0 x8000n, -0 x7fffffff0000n],
[-0 x80000001n, 0 x8000n, -0 x400000008000n],
[-0 x80000000n, 0 x8000n, -0 x400000000000n],
[-0 x7fffffffn, 0 x8000n, -0 x3fffffff8000n],
[-0 x7ffffffen, 0 x8000n, -0 x3fffffff0000n],
[-0 x10001n, 0 x8000n, -0 x80008000n],
[-0 x10000n, 0 x8000n, -0 x80000000n],
[-0 xffffn, 0 x8000n, -0 x7fff8000n],
[-0 xfffen, 0 x8000n, -0 x7fff0000n],
[-0 x8001n, 0 x8000n, -0 x40008000n],
[-0 x8000n, 0 x8000n, -0 x40000000n],
[-0 x7fffn, 0 x8000n, -0 x3fff8000n],
[-0 x7ffen, 0 x8000n, -0 x3fff0000n],
[0 x8000n, 0 x8000n, 0 x40000000n],
[0 x8001n, 0 x8000n, 0 x40008000n],
[0 xfffen, 0 x8000n, 0 x7fff0000n],
[0 xffffn, 0 x8000n, 0 x7fff8000n],
[0 x10000n, 0 x8000n, 0 x80000000n],
[0 x10001n, 0 x8000n, 0 x80008000n],
[0 x7ffffffen, 0 x8000n, 0 x3fffffff0000n],
[0 x7fffffffn, 0 x8000n, 0 x3fffffff8000n],
[0 x80000000n, 0 x8000n, 0 x400000000000n],
[0 x80000001n, 0 x8000n, 0 x400000008000n],
[0 xfffffffen, 0 x8000n, 0 x7fffffff0000n],
[0 xffffffffn, 0 x8000n, 0 x7fffffff8000n],
[0 x100000000n, 0 x8000n, 0 x800000000000n],
[0 x100000001n, 0 x8000n, 0 x800000008000n],
[-0 x100000001n, 0 x8001n, -0 x800100008001n],
[-0 x100000000n, 0 x8001n, -0 x800100000000n],
[-0 xffffffffn, 0 x8001n, -0 x8000ffff7fffn],
[-0 xfffffffen, 0 x8001n, -0 x8000fffefffen],
[-0 x80000001n, 0 x8001n, -0 x400080008001n],
[-0 x80000000n, 0 x8001n, -0 x400080000000n],
[-0 x7fffffffn, 0 x8001n, -0 x40007fff7fffn],
[-0 x7ffffffen, 0 x8001n, -0 x40007ffefffen],
[-0 x10001n, 0 x8001n, -0 x80018001n],
[-0 x10000n, 0 x8001n, -0 x80010000n],
[-0 xffffn, 0 x8001n, -0 x80007fffn],
[-0 xfffen, 0 x8001n, -0 x7ffffffen],
[-0 x8001n, 0 x8001n, -0 x40010001n],
[-0 x8000n, 0 x8001n, -0 x40008000n],
[-0 x7fffn, 0 x8001n, -0 x3fffffffn],
[-0 x7ffen, 0 x8001n, -0 x3fff7ffen],
[0 x8001n, 0 x8001n, 0 x40010001n],
[0 xfffen, 0 x8001n, 0 x7ffffffen],
[0 xffffn, 0 x8001n, 0 x80007fffn],
[0 x10000n, 0 x8001n, 0 x80010000n],
[0 x10001n, 0 x8001n, 0 x80018001n],
[0 x7ffffffen, 0 x8001n, 0 x40007ffefffen],
[0 x7fffffffn, 0 x8001n, 0 x40007fff7fffn],
[0 x80000000n, 0 x8001n, 0 x400080000000n],
[0 x80000001n, 0 x8001n, 0 x400080008001n],
[0 xfffffffen, 0 x8001n, 0 x8000fffefffen],
[0 xffffffffn, 0 x8001n, 0 x8000ffff7fffn],
[0 x100000000n, 0 x8001n, 0 x800100000000n],
[0 x100000001n, 0 x8001n, 0 x800100008001n],
[-0 x100000001n, -0 x8001n, 0 x800100008001n],
[-0 x100000000n, -0 x8001n, 0 x800100000000n],
[-0 xffffffffn, -0 x8001n, 0 x8000ffff7fffn],
[-0 xfffffffen, -0 x8001n, 0 x8000fffefffen],
[-0 x80000001n, -0 x8001n, 0 x400080008001n],
[-0 x80000000n, -0 x8001n, 0 x400080000000n],
[-0 x7fffffffn, -0 x8001n, 0 x40007fff7fffn],
[-0 x7ffffffen, -0 x8001n, 0 x40007ffefffen],
[-0 x10001n, -0 x8001n, 0 x80018001n],
[-0 x10000n, -0 x8001n, 0 x80010000n],
[-0 xffffn, -0 x8001n, 0 x80007fffn],
[-0 xfffen, -0 x8001n, 0 x7ffffffen],
[-0 x8001n, -0 x8001n, 0 x40010001n],
[-0 x8000n, -0 x8001n, 0 x40008000n],
[-0 x7fffn, -0 x8001n, 0 x3fffffffn],
[-0 x7ffen, -0 x8001n, 0 x3fff7ffen],
[0 xfffen, -0 x8001n, -0 x7ffffffen],
[0 xffffn, -0 x8001n, -0 x80007fffn],
[0 x10000n, -0 x8001n, -0 x80010000n],
[0 x10001n, -0 x8001n, -0 x80018001n],
[0 x7ffffffen, -0 x8001n, -0 x40007ffefffen],
[0 x7fffffffn, -0 x8001n, -0 x40007fff7fffn],
[0 x80000000n, -0 x8001n, -0 x400080000000n],
[0 x80000001n, -0 x8001n, -0 x400080008001n],
[0 xfffffffen, -0 x8001n, -0 x8000fffefffen],
[0 xffffffffn, -0 x8001n, -0 x8000ffff7fffn],
[0 x100000000n, -0 x8001n, -0 x800100000000n],
[0 x100000001n, -0 x8001n, -0 x800100008001n],
[-0 x100000001n, -0 x8000n, 0 x800000008000n],
[-0 x100000000n, -0 x8000n, 0 x800000000000n],
[-0 xffffffffn, -0 x8000n, 0 x7fffffff8000n],
[-0 xfffffffen, -0 x8000n, 0 x7fffffff0000n],
[-0 x80000001n, -0 x8000n, 0 x400000008000n],
[-0 x80000000n, -0 x8000n, 0 x400000000000n],
[-0 x7fffffffn, -0 x8000n, 0 x3fffffff8000n],
[-0 x7ffffffen, -0 x8000n, 0 x3fffffff0000n],
[-0 x10001n, -0 x8000n, 0 x80008000n],
[-0 x10000n, -0 x8000n, 0 x80000000n],
[-0 xffffn, -0 x8000n, 0 x7fff8000n],
[-0 xfffen, -0 x8000n, 0 x7fff0000n],
[-0 x8000n, -0 x8000n, 0 x40000000n],
[-0 x7fffn, -0 x8000n, 0 x3fff8000n],
[-0 x7ffen, -0 x8000n, 0 x3fff0000n],
[0 xfffen, -0 x8000n, -0 x7fff0000n],
[0 xffffn, -0 x8000n, -0 x7fff8000n],
[0 x10000n, -0 x8000n, -0 x80000000n],
[0 x10001n, -0 x8000n, -0 x80008000n],
[0 x7ffffffen, -0 x8000n, -0 x3fffffff0000n],
[0 x7fffffffn, -0 x8000n, -0 x3fffffff8000n],
[0 x80000000n, -0 x8000n, -0 x400000000000n],
[0 x80000001n, -0 x8000n, -0 x400000008000n],
[0 xfffffffen, -0 x8000n, -0 x7fffffff0000n],
[0 xffffffffn, -0 x8000n, -0 x7fffffff8000n],
[0 x100000000n, -0 x8000n, -0 x800000000000n],
[0 x100000001n, -0 x8000n, -0 x800000008000n],
[-0 x100000001n, -0 x7fffn, 0 x7fff00007fffn],
[-0 x100000000n, -0 x7fffn, 0 x7fff00000000n],
[-0 xffffffffn, -0 x7fffn, 0 x7ffeffff8001n],
[-0 xfffffffen, -0 x7fffn, 0 x7ffeffff0002n],
[-0 x80000001n, -0 x7fffn, 0 x3fff80007fffn],
[-0 x80000000n, -0 x7fffn, 0 x3fff80000000n],
[-0 x7fffffffn, -0 x7fffn, 0 x3fff7fff8001n],
[-0 x7ffffffen, -0 x7fffn, 0 x3fff7fff0002n],
[-0 x10001n, -0 x7fffn, 0 x7fff7fffn],
[-0 x10000n, -0 x7fffn, 0 x7fff0000n],
[-0 xffffn, -0 x7fffn, 0 x7ffe8001n],
[-0 xfffen, -0 x7fffn, 0 x7ffe0002n],
[-0 x7fffn, -0 x7fffn, 0 x3fff0001n],
[-0 x7ffen, -0 x7fffn, 0 x3ffe8002n],
[0 xfffen, -0 x7fffn, -0 x7ffe0002n],
[0 xffffn, -0 x7fffn, -0 x7ffe8001n],
[0 x10000n, -0 x7fffn, -0 x7fff0000n],
[0 x10001n, -0 x7fffn, -0 x7fff7fffn],
[0 x7ffffffen, -0 x7fffn, -0 x3fff7fff0002n],
[0 x7fffffffn, -0 x7fffn, -0 x3fff7fff8001n],
[0 x80000000n, -0 x7fffn, -0 x3fff80000000n],
[0 x80000001n, -0 x7fffn, -0 x3fff80007fffn],
[0 xfffffffen, -0 x7fffn, -0 x7ffeffff0002n],
[0 xffffffffn, -0 x7fffn, -0 x7ffeffff8001n],
[0 x100000000n, -0 x7fffn, -0 x7fff00000000n],
[0 x100000001n, -0 x7fffn, -0 x7fff00007fffn],
[-0 x100000001n, -0 x7ffen, 0 x7ffe00007ffen],
[-0 x100000000n, -0 x7ffen, 0 x7ffe00000000n],
[-0 xffffffffn, -0 x7ffen, 0 x7ffdffff8002n],
[-0 xfffffffen, -0 x7ffen, 0 x7ffdffff0004n],
[-0 x80000001n, -0 x7ffen, 0 x3fff00007ffen],
[-0 x80000000n, -0 x7ffen, 0 x3fff00000000n],
[-0 x7fffffffn, -0 x7ffen, 0 x3ffeffff8002n],
[-0 x7ffffffen, -0 x7ffen, 0 x3ffeffff0004n],
[-0 x10001n, -0 x7ffen, 0 x7ffe7ffen],
[-0 x10000n, -0 x7ffen, 0 x7ffe0000n],
[-0 xffffn, -0 x7ffen, 0 x7ffd8002n],
[-0 xfffen, -0 x7ffen, 0 x7ffd0004n],
[-0 x7ffen, -0 x7ffen, 0 x3ffe0004n],
[0 xfffen, -0 x7ffen, -0 x7ffd0004n],
[0 xffffn, -0 x7ffen, -0 x7ffd8002n],
[0 x10000n, -0 x7ffen, -0 x7ffe0000n],
[0 x10001n, -0 x7ffen, -0 x7ffe7ffen],
[0 x7ffffffen, -0 x7ffen, -0 x3ffeffff0004n],
[0 x7fffffffn, -0 x7ffen, -0 x3ffeffff8002n],
[0 x80000000n, -0 x7ffen, -0 x3fff00000000n],
[0 x80000001n, -0 x7ffen, -0 x3fff00007ffen],
[0 xfffffffen, -0 x7ffen, -0 x7ffdffff0004n],
[0 xffffffffn, -0 x7ffen, -0 x7ffdffff8002n],
[0 x100000000n, -0 x7ffen, -0 x7ffe00000000n],
[0 x100000001n, -0 x7ffen, -0 x7ffe00007ffen],
[-0 x100000001n, 0 xfffen, -0 xfffe0000fffen],
[-0 x100000000n, 0 xfffen, -0 xfffe00000000n],
[-0 xffffffffn, 0 xfffen, -0 xfffdffff0002n],
[-0 xfffffffen, 0 xfffen, -0 xfffdfffe0004n],
[-0 x80000001n, 0 xfffen, -0 x7fff0000fffen],
[-0 x80000000n, 0 xfffen, -0 x7fff00000000n],
[-0 x7fffffffn, 0 xfffen, -0 x7ffeffff0002n],
[-0 x7ffffffen, 0 xfffen, -0 x7ffefffe0004n],
[-0 x10001n, 0 xfffen, -0 xfffefffen],
[-0 x10000n, 0 xfffen, -0 xfffe0000n],
[-0 xffffn, 0 xfffen, -0 xfffd0002n],
[-0 xfffen, 0 xfffen, -0 xfffc0004n],
[0 xfffen, 0 xfffen, 0 xfffc0004n],
[0 xffffn, 0 xfffen, 0 xfffd0002n],
[0 x10000n, 0 xfffen, 0 xfffe0000n],
[0 x10001n, 0 xfffen, 0 xfffefffen],
[0 x7ffffffen, 0 xfffen, 0 x7ffefffe0004n],
[0 x7fffffffn, 0 xfffen, 0 x7ffeffff0002n],
[0 x80000000n, 0 xfffen, 0 x7fff00000000n],
[0 x80000001n, 0 xfffen, 0 x7fff0000fffen],
[0 xfffffffen, 0 xfffen, 0 xfffdfffe0004n],
[0 xffffffffn, 0 xfffen, 0 xfffdffff0002n],
[0 x100000000n, 0 xfffen, 0 xfffe00000000n],
[0 x100000001n, 0 xfffen, 0 xfffe0000fffen],
[-0 x100000001n, 0 xffffn, -0 xffff0000ffffn],
[-0 x100000000n, 0 xffffn, -0 xffff00000000n],
[-0 xffffffffn, 0 xffffn, -0 xfffeffff0001n],
[-0 xfffffffen, 0 xffffn, -0 xfffefffe0002n],
[-0 x80000001n, 0 xffffn, -0 x7fff8000ffffn],
[-0 x80000000n, 0 xffffn, -0 x7fff80000000n],
[-0 x7fffffffn, 0 xffffn, -0 x7fff7fff0001n],
[-0 x7ffffffen, 0 xffffn, -0 x7fff7ffe0002n],
[-0 x10001n, 0 xffffn, -0 xffffffffn],
[-0 x10000n, 0 xffffn, -0 xffff0000n],
[-0 xffffn, 0 xffffn, -0 xfffe0001n],
[-0 xfffen, 0 xffffn, -0 xfffd0002n],
[0 xffffn, 0 xffffn, 0 xfffe0001n],
[0 x10000n, 0 xffffn, 0 xffff0000n],
[0 x10001n, 0 xffffn, 0 xffffffffn],
[0 x7ffffffen, 0 xffffn, 0 x7fff7ffe0002n],
[0 x7fffffffn, 0 xffffn, 0 x7fff7fff0001n],
[0 x80000000n, 0 xffffn, 0 x7fff80000000n],
[0 x80000001n, 0 xffffn, 0 x7fff8000ffffn],
[0 xfffffffen, 0 xffffn, 0 xfffefffe0002n],
[0 xffffffffn, 0 xffffn, 0 xfffeffff0001n],
[0 x100000000n, 0 xffffn, 0 xffff00000000n],
[0 x100000001n, 0 xffffn, 0 xffff0000ffffn],
[-0 x100000001n, 0 x10000n, -0 x1000000010000n],
[-0 x100000000n, 0 x10000n, -0 x1000000000000n],
[-0 xffffffffn, 0 x10000n, -0 xffffffff0000n],
[-0 xfffffffen, 0 x10000n, -0 xfffffffe0000n],
[-0 x80000001n, 0 x10000n, -0 x800000010000n],
[-0 x80000000n, 0 x10000n, -0 x800000000000n],
[-0 x7fffffffn, 0 x10000n, -0 x7fffffff0000n],
[-0 x7ffffffen, 0 x10000n, -0 x7ffffffe0000n],
[-0 x10001n, 0 x10000n, -0 x100010000n],
[-0 x10000n, 0 x10000n, -0 x100000000n],
[-0 xffffn, 0 x10000n, -0 xffff0000n],
[-0 xfffen, 0 x10000n, -0 xfffe0000n],
[0 x10000n, 0 x10000n, 0 x100000000n],
[0 x10001n, 0 x10000n, 0 x100010000n],
[0 x7ffffffen, 0 x10000n, 0 x7ffffffe0000n],
[0 x7fffffffn, 0 x10000n, 0 x7fffffff0000n],
[0 x80000000n, 0 x10000n, 0 x800000000000n],
[0 x80000001n, 0 x10000n, 0 x800000010000n],
[0 xfffffffen, 0 x10000n, 0 xfffffffe0000n],
[0 xffffffffn, 0 x10000n, 0 xffffffff0000n],
[0 x100000000n, 0 x10000n, 0 x1000000000000n],
[0 x100000001n, 0 x10000n, 0 x1000000010000n],
[-0 x100000001n, 0 x10001n, -0 x1000100010001n],
[-0 x100000000n, 0 x10001n, -0 x1000100000000n],
[-0 xffffffffn, 0 x10001n, -0 x10000fffeffffn],
[-0 xfffffffen, 0 x10001n, -0 x10000fffdfffen],
[-0 x80000001n, 0 x10001n, -0 x800080010001n],
[-0 x80000000n, 0 x10001n, -0 x800080000000n],
[-0 x7fffffffn, 0 x10001n, -0 x80007ffeffffn],
[-0 x7ffffffen, 0 x10001n, -0 x80007ffdfffen],
[-0 x10001n, 0 x10001n, -0 x100020001n],
[-0 x10000n, 0 x10001n, -0 x100010000n],
[-0 xffffn, 0 x10001n, -0 xffffffffn],
[-0 xfffen, 0 x10001n, -0 xfffefffen],
[0 x10001n, 0 x10001n, 0 x100020001n],
[0 x7ffffffen, 0 x10001n, 0 x80007ffdfffen],
[0 x7fffffffn, 0 x10001n, 0 x80007ffeffffn],
[0 x80000000n, 0 x10001n, 0 x800080000000n],
[0 x80000001n, 0 x10001n, 0 x800080010001n],
[0 xfffffffen, 0 x10001n, 0 x10000fffdfffen],
[0 xffffffffn, 0 x10001n, 0 x10000fffeffffn],
[0 x100000000n, 0 x10001n, 0 x1000100000000n],
[0 x100000001n, 0 x10001n, 0 x1000100010001n],
[-0 x100000001n, -0 x10001n, 0 x1000100010001n],
[-0 x100000000n, -0 x10001n, 0 x1000100000000n],
[-0 xffffffffn, -0 x10001n, 0 x10000fffeffffn],
[-0 xfffffffen, -0 x10001n, 0 x10000fffdfffen],
[-0 x80000001n, -0 x10001n, 0 x800080010001n],
[-0 x80000000n, -0 x10001n, 0 x800080000000n],
[-0 x7fffffffn, -0 x10001n, 0 x80007ffeffffn],
[-0 x7ffffffen, -0 x10001n, 0 x80007ffdfffen],
[-0 x10001n, -0 x10001n, 0 x100020001n],
[-0 x10000n, -0 x10001n, 0 x100010000n],
[-0 xffffn, -0 x10001n, 0 xffffffffn],
[-0 xfffen, -0 x10001n, 0 xfffefffen],
[0 x7ffffffen, -0 x10001n, -0 x80007ffdfffen],
[0 x7fffffffn, -0 x10001n, -0 x80007ffeffffn],
[0 x80000000n, -0 x10001n, -0 x800080000000n],
[0 x80000001n, -0 x10001n, -0 x800080010001n],
[0 xfffffffen, -0 x10001n, -0 x10000fffdfffen],
[0 xffffffffn, -0 x10001n, -0 x10000fffeffffn],
[0 x100000000n, -0 x10001n, -0 x1000100000000n],
[0 x100000001n, -0 x10001n, -0 x1000100010001n],
[-0 x100000001n, -0 x10000n, 0 x1000000010000n],
[-0 x100000000n, -0 x10000n, 0 x1000000000000n],
[-0 xffffffffn, -0 x10000n, 0 xffffffff0000n],
[-0 xfffffffen, -0 x10000n, 0 xfffffffe0000n],
[-0 x80000001n, -0 x10000n, 0 x800000010000n],
[-0 x80000000n, -0 x10000n, 0 x800000000000n],
[-0 x7fffffffn, -0 x10000n, 0 x7fffffff0000n],
[-0 x7ffffffen, -0 x10000n, 0 x7ffffffe0000n],
[-0 x10000n, -0 x10000n, 0 x100000000n],
[-0 xffffn, -0 x10000n, 0 xffff0000n],
[-0 xfffen, -0 x10000n, 0 xfffe0000n],
[0 x7ffffffen, -0 x10000n, -0 x7ffffffe0000n],
[0 x7fffffffn, -0 x10000n, -0 x7fffffff0000n],
[0 x80000000n, -0 x10000n, -0 x800000000000n],
[0 x80000001n, -0 x10000n, -0 x800000010000n],
[0 xfffffffen, -0 x10000n, -0 xfffffffe0000n],
[0 xffffffffn, -0 x10000n, -0 xffffffff0000n],
[0 x100000000n, -0 x10000n, -0 x1000000000000n],
[0 x100000001n, -0 x10000n, -0 x1000000010000n],
[-0 x100000001n, -0 xffffn, 0 xffff0000ffffn],
[-0 x100000000n, -0 xffffn, 0 xffff00000000n],
[-0 xffffffffn, -0 xffffn, 0 xfffeffff0001n],
[-0 xfffffffen, -0 xffffn, 0 xfffefffe0002n],
[-0 x80000001n, -0 xffffn, 0 x7fff8000ffffn],
[-0 x80000000n, -0 xffffn, 0 x7fff80000000n],
[-0 x7fffffffn, -0 xffffn, 0 x7fff7fff0001n],
[-0 x7ffffffen, -0 xffffn, 0 x7fff7ffe0002n],
[-0 xffffn, -0 xffffn, 0 xfffe0001n],
[-0 xfffen, -0 xffffn, 0 xfffd0002n],
[0 x7ffffffen, -0 xffffn, -0 x7fff7ffe0002n],
[0 x7fffffffn, -0 xffffn, -0 x7fff7fff0001n],
[0 x80000000n, -0 xffffn, -0 x7fff80000000n],
[0 x80000001n, -0 xffffn, -0 x7fff8000ffffn],
[0 xfffffffen, -0 xffffn, -0 xfffefffe0002n],
[0 xffffffffn, -0 xffffn, -0 xfffeffff0001n],
[0 x100000000n, -0 xffffn, -0 xffff00000000n],
[0 x100000001n, -0 xffffn, -0 xffff0000ffffn],
[-0 x100000001n, -0 xfffen, 0 xfffe0000fffen],
[-0 x100000000n, -0 xfffen, 0 xfffe00000000n],
[-0 xffffffffn, -0 xfffen, 0 xfffdffff0002n],
[-0 xfffffffen, -0 xfffen, 0 xfffdfffe0004n],
[-0 x80000001n, -0 xfffen, 0 x7fff0000fffen],
[-0 x80000000n, -0 xfffen, 0 x7fff00000000n],
[-0 x7fffffffn, -0 xfffen, 0 x7ffeffff0002n],
[-0 x7ffffffen, -0 xfffen, 0 x7ffefffe0004n],
[-0 xfffen, -0 xfffen, 0 xfffc0004n],
[0 x7ffffffen, -0 xfffen, -0 x7ffefffe0004n],
[0 x7fffffffn, -0 xfffen, -0 x7ffeffff0002n],
[0 x80000000n, -0 xfffen, -0 x7fff00000000n],
[0 x80000001n, -0 xfffen, -0 x7fff0000fffen],
[0 xfffffffen, -0 xfffen, -0 xfffdfffe0004n],
[0 xffffffffn, -0 xfffen, -0 xfffdffff0002n],
[0 x100000000n, -0 xfffen, -0 xfffe00000000n],
[0 x100000001n, -0 xfffen, -0 xfffe0000fffen],
[-0 x100000001n, 0 x7ffffffen, -0 x7ffffffe7ffffffen],
[-0 x100000000n, 0 x7ffffffen, -0 x7ffffffe00000000n],
[-0 xffffffffn, 0 x7ffffffen, -0 x7ffffffd80000002n],
[-0 xfffffffen, 0 x7ffffffen, -0 x7ffffffd00000004n],
[-0 x80000001n, 0 x7ffffffen, -0 x3fffffff7ffffffen],
[-0 x80000000n, 0 x7ffffffen, -0 x3fffffff00000000n],
[-0 x7fffffffn, 0 x7ffffffen, -0 x3ffffffe80000002n],
[-0 x7ffffffen, 0 x7ffffffen, -0 x3ffffffe00000004n],
[0 x7ffffffen, 0 x7ffffffen, 0 x3ffffffe00000004n],
[0 x7fffffffn, 0 x7ffffffen, 0 x3ffffffe80000002n],
[0 x80000000n, 0 x7ffffffen, 0 x3fffffff00000000n],
[0 x80000001n, 0 x7ffffffen, 0 x3fffffff7ffffffen],
[0 xfffffffen, 0 x7ffffffen, 0 x7ffffffd00000004n],
[0 xffffffffn, 0 x7ffffffen, 0 x7ffffffd80000002n],
[0 x100000000n, 0 x7ffffffen, 0 x7ffffffe00000000n],
[0 x100000001n, 0 x7ffffffen, 0 x7ffffffe7ffffffen],
[-0 x100000001n, 0 x7fffffffn, -0 x7fffffff7fffffffn],
[-0 x100000000n, 0 x7fffffffn, -0 x7fffffff00000000n],
[-0 xffffffffn, 0 x7fffffffn, -0 x7ffffffe80000001n],
[-0 xfffffffen, 0 x7fffffffn, -0 x7ffffffe00000002n],
[-0 x80000001n, 0 x7fffffffn, -0 x3fffffffffffffffn],
[-0 x80000000n, 0 x7fffffffn, -0 x3fffffff80000000n],
[-0 x7fffffffn, 0 x7fffffffn, -0 x3fffffff00000001n],
[-0 x7ffffffen, 0 x7fffffffn, -0 x3ffffffe80000002n],
[0 x7fffffffn, 0 x7fffffffn, 0 x3fffffff00000001n],
[0 x80000000n, 0 x7fffffffn, 0 x3fffffff80000000n],
[0 x80000001n, 0 x7fffffffn, 0 x3fffffffffffffffn],
[0 xfffffffen, 0 x7fffffffn, 0 x7ffffffe00000002n],
[0 xffffffffn, 0 x7fffffffn, 0 x7ffffffe80000001n],
[0 x100000000n, 0 x7fffffffn, 0 x7fffffff00000000n],
[0 x100000001n, 0 x7fffffffn, 0 x7fffffff7fffffffn],
[-0 x100000000n, 0 x80000000n, -0 x8000000000000000n],
[-0 xffffffffn, 0 x80000000n, -0 x7fffffff80000000n],
[-0 xfffffffen, 0 x80000000n, -0 x7fffffff00000000n],
[-0 x80000001n, 0 x80000000n, -0 x4000000080000000n],
[-0 x80000000n, 0 x80000000n, -0 x4000000000000000n],
[-0 x7fffffffn, 0 x80000000n, -0 x3fffffff80000000n],
[-0 x7ffffffen, 0 x80000000n, -0 x3fffffff00000000n],
[0 x80000000n, 0 x80000000n, 0 x4000000000000000n],
[0 x80000001n, 0 x80000000n, 0 x4000000080000000n],
[0 xfffffffen, 0 x80000000n, 0 x7fffffff00000000n],
[0 xffffffffn, 0 x80000000n, 0 x7fffffff80000000n],
[-0 xfffffffen, 0 x80000001n, -0 x7ffffffffffffffen],
[-0 x80000001n, 0 x80000001n, -0 x4000000100000001n],
[-0 x80000000n, 0 x80000001n, -0 x4000000080000000n],
[-0 x7fffffffn, 0 x80000001n, -0 x3fffffffffffffffn],
[-0 x7ffffffen, 0 x80000001n, -0 x3fffffff7ffffffen],
[0 x80000001n, 0 x80000001n, 0 x4000000100000001n],
[0 xfffffffen, 0 x80000001n, 0 x7ffffffffffffffen],
[-0 xfffffffen, -0 x80000001n, 0 x7ffffffffffffffen],
[-0 x80000001n, -0 x80000001n, 0 x4000000100000001n],
[-0 x80000000n, -0 x80000001n, 0 x4000000080000000n],
[-0 x7fffffffn, -0 x80000001n, 0 x3fffffffffffffffn],
[-0 x7ffffffen, -0 x80000001n, 0 x3fffffff7ffffffen],
[0 xfffffffen, -0 x80000001n, -0 x7ffffffffffffffen],
[-0 xffffffffn, -0 x80000000n, 0 x7fffffff80000000n],
[-0 xfffffffen, -0 x80000000n, 0 x7fffffff00000000n],
[-0 x80000000n, -0 x80000000n, 0 x4000000000000000n],
[-0 x7fffffffn, -0 x80000000n, 0 x3fffffff80000000n],
[-0 x7ffffffen, -0 x80000000n, 0 x3fffffff00000000n],
[0 xfffffffen, -0 x80000000n, -0 x7fffffff00000000n],
[0 xffffffffn, -0 x80000000n, -0 x7fffffff80000000n],
[0 x100000000n, -0 x80000000n, -0 x8000000000000000n],
[-0 x100000001n, -0 x7fffffffn, 0 x7fffffff7fffffffn],
[-0 x100000000n, -0 x7fffffffn, 0 x7fffffff00000000n],
[-0 xffffffffn, -0 x7fffffffn, 0 x7ffffffe80000001n],
[-0 xfffffffen, -0 x7fffffffn, 0 x7ffffffe00000002n],
[-0 x7fffffffn, -0 x7fffffffn, 0 x3fffffff00000001n],
[-0 x7ffffffen, -0 x7fffffffn, 0 x3ffffffe80000002n],
[0 xfffffffen, -0 x7fffffffn, -0 x7ffffffe00000002n],
[0 xffffffffn, -0 x7fffffffn, -0 x7ffffffe80000001n],
[0 x100000000n, -0 x7fffffffn, -0 x7fffffff00000000n],
[0 x100000001n, -0 x7fffffffn, -0 x7fffffff7fffffffn],
[-0 x100000001n, -0 x7ffffffen, 0 x7ffffffe7ffffffen],
[-0 x100000000n, -0 x7ffffffen, 0 x7ffffffe00000000n],
[-0 xffffffffn, -0 x7ffffffen, 0 x7ffffffd80000002n],
[-0 xfffffffen, -0 x7ffffffen, 0 x7ffffffd00000004n],
[-0 x7ffffffen, -0 x7ffffffen, 0 x3ffffffe00000004n],
[0 xfffffffen, -0 x7ffffffen, -0 x7ffffffd00000004n],
[0 xffffffffn, -0 x7ffffffen, -0 x7ffffffd80000002n],
[0 x100000000n, -0 x7ffffffen, -0 x7ffffffe00000000n],
[0 x100000001n, -0 x7ffffffen, -0 x7ffffffe7ffffffen],
];
// Cases not covered above.
tests.push(
// Int32 overflow:
//
// Math.floor(2 ** (Math.log2(2147483648) / 2))
// = Math.floor(2 ** 15.5)
// = 46340
//
// Math.ceil(2 ** (Math.log2(2147483648) / 2))
// = Math.ceil(2 ** 15.5)
// = 46341
[46340 n, 46340 n, 2147395600 n],
[46341 n, 46341 n, 2147488281 n],
[46340 n, -46340 n, -2147395600 n],
[46341 n, -46341 n, -2147488281 n],
[-46340 n, -46340 n, 2147395600 n],
[-46341 n, -46341 n, 2147488281 n],
// Int64 overflow
[3037000499 n, 3037000499 n, 9223372030926249001 n],
[3037000499 n, -3037000499 n, -9223372030926249001 n],
[-3037000499 n, -3037000499 n, 9223372030926249001 n],
);
function f(tests) {
for (let test of tests) {
let lhs = test[0 ], rhs = test[1 ], expected = test[2 ];
assertEq(BigInt.asIntN(64 , lhs), lhs);
assertEq(BigInt.asIntN(64 , rhs), rhs);
assertEq(BigInt.asIntN(64 , expected), expected);
assertEq(lhs * rhs, expected);
assertEq(rhs * lhs, expected);
}
}
for (let i = 0 ; i < 10 ; ++i) {
f(tests);
}
Messung V0.5 in Prozent C=96 H=92 G=93