Source file
src/runtime/conv_wasm_test.go
1
2
3
4
5 package runtime_test
6
7 import (
8 "testing"
9 )
10
11 var res int64
12 var ures uint64
13
14 func TestFloatTruncation(t *testing.T) {
15 testdata := []struct {
16 input float64
17 convInt64 int64
18 convUInt64 uint64
19 overflow bool
20 }{
21
22 {
23 input: 0x7fffffffffffffff,
24 convInt64: -0x8000000000000000,
25 convUInt64: 0x8000000000000000,
26 },
27
28
29 {
30 input: 0x8000000000000000,
31 convInt64: -0x8000000000000000,
32 convUInt64: 0x8000000000000000,
33 },
34 {
35 input: 0x7ffffffffffffffe,
36 convInt64: -0x8000000000000000,
37 convUInt64: 0x8000000000000000,
38 },
39
40 {
41 input: -0x8000000000000000,
42 convInt64: -0x8000000000000000,
43 convUInt64: 0x8000000000000000,
44 },
45 {
46 input: -0x8000000000000001,
47 convInt64: -0x8000000000000000,
48 convUInt64: 0x8000000000000000,
49 },
50 {
51 input: -0x7fffffffffffffff,
52 convInt64: -0x8000000000000000,
53 convUInt64: 0x8000000000000000,
54 },
55
56 {
57 input: 0x7ffffffffffffdff,
58 convInt64: 0x7ffffffffffffc00,
59 convUInt64: 0x7ffffffffffffc00,
60 },
61 {
62 input: 0x7ffffffffffffe00,
63 convInt64: -0x8000000000000000,
64 convUInt64: 0x8000000000000000,
65 },
66 {
67 input: 0x7ffffffffffffdfe,
68 convInt64: 0x7ffffffffffffc00,
69 convUInt64: 0x7ffffffffffffc00,
70 },
71
72 {
73 input: -0x7ffffffffffffdff,
74 convInt64: -0x7ffffffffffffc00,
75 convUInt64: 0x8000000000000000,
76 },
77 {
78 input: -0x7ffffffffffffe00,
79 convInt64: -0x8000000000000000,
80 convUInt64: 0x8000000000000000,
81 },
82 {
83 input: -0x7ffffffffffffdfe,
84 convInt64: -0x7ffffffffffffc00,
85 convUInt64: 0x8000000000000000,
86 },
87
88 {
89 input: 0xffffffffffffffff,
90 convInt64: -0x8000000000000000,
91 convUInt64: 0x8000000000000000,
92 },
93 {
94 input: 0x10000000000000000,
95 convInt64: -0x8000000000000000,
96 convUInt64: 0x8000000000000000,
97 },
98 {
99 input: 0xfffffffffffffffe,
100 convInt64: -0x8000000000000000,
101 convUInt64: 0x8000000000000000,
102 },
103
104 {
105 input: 0xfffffffffffffbff,
106 convInt64: -0x8000000000000000,
107 convUInt64: 0xfffffffffffff800,
108 },
109 {
110 input: 0xfffffffffffffc00,
111 convInt64: -0x8000000000000000,
112 convUInt64: 0x8000000000000000,
113 },
114 {
115 input: 0xfffffffffffffbfe,
116 convInt64: -0x8000000000000000,
117 convUInt64: 0xfffffffffffff800,
118 },
119 }
120 for _, item := range testdata {
121 if got, want := int64(item.input), item.convInt64; got != want {
122 t.Errorf("int64(%f): got %x, want %x", item.input, got, want)
123 }
124 if got, want := uint64(item.input), item.convUInt64; got != want {
125 t.Errorf("uint64(%f): got %x, want %x", item.input, got, want)
126 }
127 }
128 }
129
View as plain text