% Bigint arithmetic regressions and ISO-style unbounded integer behavior.
ok :-
    current_prolog_flag(bounded, false),
    E = 62,
    X is 2^E - 1 + 2^E,
    X =:= 9223372036854775807,
    Y is 2^E - 1 + 2^E + 1,
    Y =:= 9223372036854775808,
    Z is 2^63,
    Z =:= 9223372036854775808,
    Z = 9223372036854775808,

    Big is 10^40,
    Big1 is Big + 1,
    Big1 > Big,
    Big2 is Big1 - 1,
    Big2 =:= Big,
    integer(Big),
    number(Big),
    atomic(Big),
    \+ float(Big),

    Big3 is Big * 3,
    Big3 =:= 3 * Big,
    BigDiv is Big3 div Big,
    BigDiv =:= 3,
    BigMod is (Big3 + 7) mod Big,
    BigMod =:= 7,
    BigRem is (Big3 + 7) rem Big,
    BigRem =:= 7,
    Neg is -Big3,
    NegDiv is Neg div Big,
    NegDiv =:= -3,
    NegMod is (-(Big + 7)) mod Big,
    NegMod =:= Big - 7,
    NegRem is (-(Big + 7)) rem Big,
    NegRem =:= -7,

    Shift is 1 << 65,
    Shift =:= 2^65,
    Shift2 is Shift >> 3,
    Shift2 =:= 2^62,
    Band is Shift /\ (Shift - 1),
    Band =:= 0,
    Bor is Shift \/ 3,
    Bor =:= Shift + 3,
    Bxor is Shift xor 3,
    Bxor =:= Shift + 3,
    Bnot0 is \(0),
    Bnot0 =:= -1,
    BnotBig is \(Shift),
    BnotBig < 0,
    BnotNeg1 is \(-1),
    BnotNeg1 =:= 0,

    Abs is abs(-Big),
    Abs =:= Big,
    Sign1 is sign(Big),
    Sign1 =:= 1,
    Sign2 is sign(-Big),
    Sign2 =:= -1,

    number_chars(Num1, ['1','8','4','4','6','7','4','4','0','7','3','7','0','9','5','5','1','6','1','6']),
    Num1 =:= 18446744073709551616,
    number_chars(Num1, Chars1),
    Chars1 == ['1','8','4','4','6','7','4','4','0','7','3','7','0','9','5','5','1','6','1','6'],
    number_chars(Num2, ['-','1','8','4','4','6','7','4','4','0','7','3','7','0','9','5','5','1','6','1','6']),
    Num2 =:= -18446744073709551616,

    number_codes(Num3, [49,56,52,52,54,55,52,52,48,55,51,55,48,57,53,53,49,54,49,54]),
    Num3 =:= 18446744073709551616,
    number_codes(Num3, Codes1),
    Codes1 == [49,56,52,52,54,55,52,52,48,55,51,55,48,57,53,53,49,54,49,54].
