diff options
Diffstat (limited to 'starlark/eval_test.go')
-rw-r--r-- | starlark/eval_test.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/starlark/eval_test.go b/starlark/eval_test.go index 3725d17..81f8c58 100644 --- a/starlark/eval_test.go +++ b/starlark/eval_test.go @@ -10,6 +10,7 @@ import ( "math" "os/exec" "path/filepath" + "reflect" "sort" "strings" "testing" @@ -712,6 +713,34 @@ func TestUnpackCustomUnpacker(t *testing.T) { } } +func TestAsInt(t *testing.T) { + for _, test := range []struct { + val starlark.Value + ptr interface{} + want string + }{ + {starlark.MakeInt(42), new(int32), "42"}, + {starlark.MakeInt(-1), new(int32), "-1"}, + {starlark.MakeInt(1 << 40), new(int32), "1099511627776 out of range (want value in signed 32-bit range)"}, + {starlark.MakeInt(-1 << 40), new(int32), "-1099511627776 out of range (want value in signed 32-bit range)"}, + + {starlark.MakeInt(42), new(uint16), "42"}, + {starlark.MakeInt(0xffff), new(uint16), "65535"}, + {starlark.MakeInt(0x10000), new(uint16), "65536 out of range (want value in unsigned 16-bit range)"}, + {starlark.MakeInt(-1), new(uint16), "-1 out of range (want value in unsigned 16-bit range)"}, + } { + var got string + if err := starlark.AsInt(test.val, test.ptr); err != nil { + got = err.Error() + } else { + got = fmt.Sprint(reflect.ValueOf(test.ptr).Elem().Interface()) + } + if got != test.want { + t.Errorf("AsInt(%s, %T): got %q, want %q", test.val, test.ptr, got, test.want) + } + } +} + func TestDocstring(t *testing.T) { globals, _ := starlark.ExecFile(&starlark.Thread{}, "doc.star", ` def somefunc(): |