﻿// Make sure values for CodeGen and Reduce paths are equivalent.

CastI1("false") = CastI1(Wrap("false"))
CastI1("true") = CastI1(Wrap("true"))

// Values at boundaries.
CastI1("128") = CastI1(Wrap("128"))
CastI2("128") = CastI2(Wrap("128"))
CastI4("128") = CastI4(Wrap("128"))
CastI8("128") = CastI8(Wrap("128"))

CastI1("255") = CastI1(Wrap("255"))
CastI2("255") = CastI2(Wrap("255"))
CastI4("255") = CastI4(Wrap("255"))
CastI8("255") = CastI8(Wrap("255"))

CastI1("32768") = CastI1(Wrap("32768"))
CastI2("32768") = CastI2(Wrap("32768"))
CastI4("32768") = CastI4(Wrap("32768"))
CastI8("32768") = CastI8(Wrap("32768"))

CastI1("65535") = CastI1(Wrap("65535"))
CastI2("65535") = CastI2(Wrap("65535"))
CastI4("65535") = CastI4(Wrap("65535"))
CastI8("65535") = CastI8(Wrap("65535"))

CastI1("2147483648") = CastI1(Wrap("2147483648"))
CastI2("2147483648") = CastI2(Wrap("2147483648"))
CastI4("2147483648") = CastI4(Wrap("2147483648"))
CastI8("2147483648") = CastI8(Wrap("2147483648"))

CastI1("4294967295") = CastI1(Wrap("4294967295"))
CastI2("4294967295") = CastI2(Wrap("4294967295"))
CastI4("4294967295") = CastI4(Wrap("4294967295"))
CastI8("4294967295") = CastI8(Wrap("4294967295"))

CastI1("9223372036854775808") = CastI1(Wrap("9223372036854775808"))
CastI2("9223372036854775808") = CastI2(Wrap("9223372036854775808"))
CastI4("9223372036854775808") = CastI4(Wrap("9223372036854775808"))
CastI8("9223372036854775808") = CastI8(Wrap("9223372036854775808"))
CastIA("9223372036854775808") = CastIA(Wrap("9223372036854775808"))

CastI1("18446744073709551615") = CastI1(Wrap("18446744073709551615"))
CastI2("18446744073709551615") = CastI2(Wrap("18446744073709551615"))
CastI4("18446744073709551615") = CastI4(Wrap("18446744073709551615"))
CastI8("18446744073709551615") = CastI8(Wrap("18446744073709551615"))
CastIA("18446744073709551615") = CastIA(Wrap("18446744073709551615"))

CastI1("127") = CastI1(Wrap("127"))
CastI2("127") = CastI2(Wrap("127"))
CastI4("127") = CastI4(Wrap("127"))
CastI8("127") = CastI8(Wrap("127"))

CastI1("32767") = CastI1(Wrap("32767"))
CastI2("32767") = CastI2(Wrap("32767"))
CastI4("32767") = CastI4(Wrap("32767"))
CastI8("32767") = CastI8(Wrap("32767"))

CastI1("2147483647") = CastI1(Wrap("2147483647"))
CastI2("2147483647") = CastI2(Wrap("2147483647"))
CastI4("2147483647") = CastI4(Wrap("2147483647"))
CastI8("2147483647") = CastI8(Wrap("2147483647"))

CastI1("9223372036854775807") = CastI1(Wrap("9223372036854775807"))
CastI2("9223372036854775807") = CastI2(Wrap("9223372036854775807"))
CastI4("9223372036854775807") = CastI4(Wrap("9223372036854775807"))
CastI8("9223372036854775807") = CastI8(Wrap("9223372036854775807"))
CastIA("9223372036854775807") = CastIA(Wrap("9223372036854775807"))

CastI2("32767.9") = CastI2(Wrap("32767.9"))
CastI2("32768.8") = CastI2(Wrap("32768.8"))
CastI2("-123.456") = CastI2(Wrap("-123.456"))
CastI2("-0.0") = CastI2(Wrap("-0.0"))

CastIA("-0.0") = CastIA(Wrap("-0.0"))

CastR4("32767.9") = CastR4(Wrap("32767.9"))
CastR4("32768.8") = CastR4(Wrap("32768.8"))
CastR4("-123.456") = CastR4(Wrap("-123.456"))
1/CastR4("-0.0") = 1/CastR4(Wrap("-0.0"))

// Very small/large values
CastI8("2e300") = CastI8(Wrap("2e300"))
CastU8("2e300") = CastU8(Wrap("2e300"))
CastR8("2e300") = CastR8(Wrap("2e300"))

CastI1("-50") = CastI1(Wrap("-50"))
CastI1("50") = CastI1(Wrap("50"))
CastU1("50") = CastU1(Wrap("50"))
CastU1("-50") = CastU1(Wrap("-50"))
CastR4("50") = CastR4(Wrap("50"))
CastR8("-50") = CastR8(Wrap("-50"))

CastI1("81985529216486895") = CastI1(Wrap("81985529216486895"))
CastI2("81985529216486895") = CastI2(Wrap("81985529216486895"))
CastI4("81985529216486895") = CastI4(Wrap("81985529216486895"))
CastI8("81985529216486895") = CastI8(Wrap("81985529216486895"))

CastI1("81985529216486896") = CastI1(Wrap("81985529216486896"))
CastI2("81985529216486896") = CastI2(Wrap("81985529216486896"))
CastI4("81985529216486896") = CastI4(Wrap("81985529216486896"))
CastI8("81985529216486896") = CastI8(Wrap("81985529216486896"))

CastI1("128") = CastI1(Wrap("128"))
CastI1("-128") = CastI1(Wrap("-128"))

CastU1("128") = CastU1(Wrap("128"))
CastU2("128") = CastU2(Wrap("128"))
CastU4("128") = CastU4(Wrap("128"))
CastU8("128") = CastU8(Wrap("128"))

// Rx

CastR4("128") = CastR4(Wrap("128"))
CastR8("128") = CastR8(Wrap("128"))

CastR4("-4e37") = CastR4(Wrap("-4e37"))
CastR4("-4 e37") = CastR4(Wrap("-4 e37"))

CastR8("-2e200") = CastR8(Wrap("-2e200"))
CastR8("-2e-200") = CastR8(Wrap("-2e-200"))

CastR4("-2e300") = CastR4(Wrap("-2e300"))
CastR8("-2e300") = CastR8(Wrap("-2e300"))

// String specific cases.
CastI1("") = CastI1(Wrap(""))
CastU1("") = CastU1(Wrap(""))
CastR4("") = CastR4(Wrap(""))

CastI1(" ") = CastI1(Wrap(" "))
CastU1(" ") = CastU1(Wrap(" "))
CastR4(" ") = CastR4(Wrap(" "))

CastI1("123") = CastI1(Wrap("123"))
CastU1("123") = CastU1(Wrap("123"))
CastR4("123") = CastR4(Wrap("123"))

CastI1(" 123 ") = CastI1(Wrap(" 123 "))
CastU1(" 123 ") = CastU1(Wrap(" 123 "))
CastR4(" 123 ") = CastR4(Wrap(" 123 "))

CastI1(" 12 3 ") = CastI1(Wrap(" 12 3 "))
CastU1(" 12 3 ") = CastU1(Wrap(" 12 3 "))
CastR4(" 12 3 ") = CastR4(Wrap(" 12 3 "))

CastI1(Null("hi")) = CastI1(Wrap(Null("hi")))
CastU1(Null("hi")) = CastU1(Wrap(Null("hi")))
CastR4(Null("hi")) = CastR4(Wrap(Null("hi")))

// Infinity
CastI8("∞") = CastI8(Wrap("∞"))
CastR8("∞") = CastR8(Wrap("∞"))
CastR4("∞") = CastR4(Wrap("∞"))
CastIA("∞") = CastIA(Wrap("∞"))

CastI8("-∞") = CastI8(Wrap("-∞"))
CastR8("-∞") = CastR8(Wrap("-∞"))
CastR4("-∞") = CastR4(Wrap("-∞"))
CastIA("-∞") = CastIA(Wrap("-∞"))

CastI8("Infinity") = CastI8(Wrap("Infinity"))
CastR8("Infinity") = CastR8(Wrap("Infinity"))
CastR4("Infinity") = CastR4(Wrap("Infinity"))
CastIA("Infinity") = CastIA(Wrap("Infinity"))

CastI8("-Infinity") = CastI8(Wrap("-Infinity"))
CastR8("-Infinity") = CastR8(Wrap("-Infinity"))
CastR4("-Infinity") = CastR4(Wrap("-Infinity"))
CastIA("-Infinity") = CastIA(Wrap("-Infinity"))

Wrap(CastI8("NaN"))   = CastI8(Wrap("NaN"))
Wrap(CastR8("NaN"))   = CastR8(Wrap("NaN"))
Wrap(CastR8("NaN")) !$= CastR8(Wrap("NaN"))
Wrap(CastR4("NaN"))   = CastR4(Wrap("NaN"))
Wrap(CastR4("NaN")) !$= CastR4(Wrap("NaN"))
Wrap(CastIA("NaN"))   = CastIA(Wrap("NaN"))

// These should be the same (both NaN).
CastR8("NaN")
CastR8(Wrap("NaN"))

// Thousand separators
CastI2("12,345") = CastI2(Wrap("12,345"))
CastU2("12,345") = CastU2(Wrap("12,345"))
CastR4("12,345") = CastR4(Wrap("12,345"))
CastIA("12,345") = CastIA(Wrap("12,345"))

// Parenthesis
CastI1("(123)") = CastI1(Wrap("(123)"))
CastU1("(123)") = CastU1(Wrap("(123)"))
CastR4("(123)") = CastR4(Wrap("(123)"))
CastIA("(123)") = CastIA(Wrap("(123)"))

// Parenthesis and thousands separators
CastI2("(12,345)") = CastI2(Wrap("(12,345)"))
CastU2("(12,345)") = CastU2(Wrap("(12,345)"))
CastR4("(12,345)") = CastR4(Wrap("(12,345)"))
CastIA("(12,345)") = CastIA(Wrap("(12,345)"))

// Decimal point
CastI1("9.223372") = CastI1(Wrap("9.223372"))
CastU1("9.223372") = CastU1(Wrap("9.223372"))
CastR4("9.223372") = CastR4(Wrap("9.223372"))
CastIA("9.223372") = CastIA(Wrap("9.223372"))

// Thousand separator with decimal point
CastI2("9,223.372") = CastI2(Wrap("9,223.372"))
CastU2("9,223.372") = CastU2(Wrap("9,223.372"))
CastR4("9,223.372") = CastR4(Wrap("9,223.372"))
CastIA("9,223.372") = CastIA(Wrap("9,223.372"))

// Parenthesis with decimal point
CastI1("(9.223372)") = CastI1(Wrap("(9.223372)"))
CastU1("(9.223372)") = CastU1(Wrap("(9.223372)"))
CastR4("(9.223372)") = CastR4(Wrap("(9.223372)"))
CastIA("(9.223372)") = CastIA(Wrap("(9.223372)"))
