| 871 | } |
| 872 | |
| 873 | func TestAbs_UnsignedIntegers(t *testing.T) { |
| 874 | // Test that abs() correctly handles unsigned integers |
| 875 | // Unsigned integers are always non-negative, so abs() should return them unchanged |
| 876 | tests := []struct { |
| 877 | name string |
| 878 | env map[string]any |
| 879 | expr string |
| 880 | want any |
| 881 | }{ |
| 882 | {"uint", map[string]any{"x": uint(42)}, "abs(x)", uint(42)}, |
| 883 | {"uint8", map[string]any{"x": uint8(42)}, "abs(x)", uint8(42)}, |
| 884 | {"uint16", map[string]any{"x": uint16(42)}, "abs(x)", uint16(42)}, |
| 885 | {"uint32", map[string]any{"x": uint32(42)}, "abs(x)", uint32(42)}, |
| 886 | {"uint64", map[string]any{"x": uint64(42)}, "abs(x)", uint64(42)}, |
| 887 | {"uint zero", map[string]any{"x": uint(0)}, "abs(x)", uint(0)}, |
| 888 | {"uint8 zero", map[string]any{"x": uint8(0)}, "abs(x)", uint8(0)}, |
| 889 | {"uint16 zero", map[string]any{"x": uint16(0)}, "abs(x)", uint16(0)}, |
| 890 | {"uint32 zero", map[string]any{"x": uint32(0)}, "abs(x)", uint32(0)}, |
| 891 | {"uint64 zero", map[string]any{"x": uint64(0)}, "abs(x)", uint64(0)}, |
| 892 | } |
| 893 | |
| 894 | for _, tt := range tests { |
| 895 | t.Run(tt.name, func(t *testing.T) { |
| 896 | program, err := expr.Compile(tt.expr, expr.Env(tt.env)) |
| 897 | require.NoError(t, err) |
| 898 | |
| 899 | result, err := expr.Run(program, tt.env) |
| 900 | require.NoError(t, err) |
| 901 | assert.Equal(t, tt.want, result) |
| 902 | }) |
| 903 | } |
| 904 | } |