1 package common
2
3 import (
4 "testing"
5 )
6
7 func BenchmarkDeriveNoise2(b *testing.B) {
8 var p Poly
9 var seed [32]byte
10 for i := 0; i < b.N; i++ {
11 p.DeriveNoise2(seed[:], 37)
12 }
13 }
14
15 func BenchmarkDeriveNoise3(b *testing.B) {
16 var p Poly
17 var seed [32]byte
18 for i := 0; i < b.N; i++ {
19 p.DeriveNoise3(seed[:], 37)
20 }
21 }
22
23 func TestPolyDeriveNoise3Ref(t *testing.T) {
24 var p Poly
25
26 want := Poly{
27 0, 0, 1, -1, 0, 2, 0, -1, -1, 3, 0, 1, -2, -2, 0, 1, -2,
28 1, 0, -2, 3, 0, 0, 0, 1, 3, 1, 1, 2, 1, -1, -1, -1, 0, 1,
29 0, 1, 0, 2, 0, 1, -2, 0, -1, -1, -2, 1, -1, -1, 2, -1, 1,
30 1, 2, -3, -1, -1, 0, 0, 0, 0, 1, -1, -2, -2, 0, -2, 0, 0,
31 0, 1, 0, -1, -1, 1, -2, 2, 0, 0, 2, -2, 0, 1, 0, 1, 1, 1,
32 0, 1, -2, -1, -2, -1, 1, 0, 0, 0, 0, 0, 1, 0, -1, -1, 0,
33 -1, 1, 0, 1, 0, -1, -1, 0, -2, 2, 0, -2, 1, -1, 0, 1, -1,
34 -1, 2, 1, 0, 0, -2, -1, 2, 0, 0, 0, -1, -1, 3, 1, 0, 1, 0,
35 1, 0, 2, 1, 0, 0, 1, 0, 1, 0, 0, -1, -1, -1, 0, 1, 3, 1,
36 0, 1, 0, 1, -1, -1, -1, -1, 0, 0, -2, -1, -1, 2, 0, 1, 0,
37 1, 0, 2, -2, 0, 1, 1, -3, -1, -2, -1, 0, 1, 0, 1, -2, 2,
38 2, 1, 1, 0, -1, 0, -1, -1, 1, 0, -1, 2, 1, -1, 1, 2, -2,
39 1, 2, 0, 1, 2, 1, 0, 0, 2, 1, 2, 1, 0, 2, 1, 0, 0, -1, -1,
40 1, -1, 0, 1, -1, 2, 2, 0, 0, -1, 1, 1, 1, 1, 0, 0, -2, 0,
41 -1, 1, 2, 0, 0, 1, 1, -1, 1, 0, 1,
42 }
43
44 var seed [32]byte
45
46 for i := 0; i < 32; i++ {
47 seed[i] = byte(i)
48 }
49
50 p.DeriveNoise3(seed[:], 37)
51
52 if p != want {
53 t.Fatal()
54 }
55 }
56
57 func TestPolyDeriveNoise2Ref(t *testing.T) {
58 var p Poly
59
60 want := Poly{
61 1, 0, 1, -1, -1, -2, -1, -1, 2, 0, -1, 0, 0, -1,
62 1, 1, -1, 1, 0, 2, -2, 0, 1, 2, 0, 0, -1, 1, 0, -1,
63 1, -1, 1, 2, 1, 1, 0, -1, 1, -1, -2, -1, 1, -1, -1,
64 -1, 2, -1, -1, 0, 0, 1, 1, -1, 1, 1, 1, 1, -1, -2,
65 0, 1, 0, 0, 2, 1, -1, 2, 0, 0, 1, 1, 0, -1, 0, 0,
66 -1, -1, 2, 0, 1, -1, 2, -1, -1, -1, -1, 0, -2, 0,
67 2, 1, 0, 0, 0, -1, 0, 0, 0, -1, -1, 0, -1, -1, 0,
68 -1, 0, 0, -2, 1, 1, 0, 1, 0, 1, 0, 1, 1, -1, 2, 0,
69 1, -1, 1, 2, 0, 0, 0, 0, -1, -1, -1, 0, 1, 0, -1,
70 2, 0, 0, 1, 1, 1, 0, 1, -1, 1, 2, 1, 0, 2, -1, 1,
71 -1, -2, -1, -2, -1, 1, 0, -2, -2, -1, 1, 0, 0, 0,
72 0, 1, 0, 0, 0, 2, 2, 0, 1, 0, -1, -1, 0, 2, 0, 0,
73 -2, 1, 0, 2, 1, -1, -2, 0, 0, -1, 1, 1, 0, 0, 2,
74 0, 1, 1, -2, 1, -2, 1, 1, 0, 2, 0, -1, 0, -1, 0,
75 1, 2, 0, 1, 0, -2, 1, -2, -2, 1, -1, 0, -1, 1, 1,
76 0, 0, 0, 1, 0, -1, 1, 1, 0, 0, 0, 0, 1, 0, 1, -1,
77 0, 1, -1, -1, 2, 0, 0, 1, -1, 0, 1, -1, 0,
78 }
79
80 var seed [32]byte
81
82 for i := 0; i < 32; i++ {
83 seed[i] = byte(i)
84 }
85
86 p.DeriveNoise2(seed[:], 37)
87
88 if p != want {
89 t.Fatal()
90 }
91 }
92
93 func TestPolyDeriveUniformRef(t *testing.T) {
94 var p Poly
95
96
97 want := Poly{
98 797, 993, 161, 6, 2608, 2385, 2096, 2661, 1676, 247, 2440,
99 342, 634, 194, 1570, 2848, 986, 684, 3148, 3208, 2018, 351,
100 2288, 612, 1394, 170, 1521, 3119, 58, 596, 2093, 1549, 409,
101 2156, 1934, 1730, 1324, 388, 446, 418, 1719, 2202, 1812,
102 98, 1019, 2369, 214, 2699, 28, 1523, 2824, 273, 402, 2899,
103 246, 210, 1288, 863, 2708, 177, 3076, 349, 44, 949, 854,
104 1371, 957, 292, 2502, 1617, 1501, 254, 7, 1761, 2581, 2206,
105 2655, 1211, 629, 1274, 2358, 816, 2766, 2115, 2985, 1006,
106 2433, 856, 2596, 3192, 1, 1378, 2345, 707, 1891, 1669, 536,
107 1221, 710, 2511, 120, 1176, 322, 1897, 2309, 595, 2950,
108 1171, 801, 1848, 695, 2912, 1396, 1931, 1775, 2904, 893,
109 2507, 1810, 2873, 253, 1529, 1047, 2615, 1687, 831, 1414,
110 965, 3169, 1887, 753, 3246, 1937, 115, 2953, 586, 545, 1621,
111 1667, 3187, 1654, 1988, 1857, 512, 1239, 1219, 898, 3106,
112 391, 1331, 2228, 3169, 586, 2412, 845, 768, 156, 662, 478,
113 1693, 2632, 573, 2434, 1671, 173, 969, 364, 1663, 2701,
114 2169, 813, 1000, 1471, 720, 2431, 2530, 3161, 733, 1691,
115 527, 2634, 335, 26, 2377, 1707, 767, 3020, 950, 502, 426,
116 1138, 3208, 2607, 2389, 44, 1358, 1392, 2334, 875, 2097,
117 173, 1697, 2578, 942, 1817, 974, 1165, 2853, 1958, 2973,
118 3282, 271, 1236, 1677, 2230, 673, 1554, 96, 242, 1729, 2518,
119 1884, 2272, 71, 1382, 924, 1807, 1610, 456, 1148, 2479,
120 2152, 238, 2208, 2329, 713, 1175, 1196, 757, 1078, 3190,
121 3169, 708, 3117, 154, 1751, 3225, 1364, 154, 23, 2842, 1105,
122 1419, 79, 5, 2013,
123 }
124
125 var seed [32]byte
126
127 for i := 0; i < 32; i++ {
128 seed[i] = byte(i)
129 }
130
131 p.DeriveUniform(&seed, 1, 0)
132 p.Detangle()
133 p.Normalize()
134
135 if p != want {
136 t.Fatalf("%v\n%v", p, want)
137 }
138 }
139
140 func BenchmarkPolyDeriveUniform(b *testing.B) {
141 var p Poly
142 var seed [32]byte
143 for i := 0; i < b.N; i++ {
144 p.DeriveUniform(&seed, 0, 0)
145 }
146 }
147
148 func BenchmarkPolyDeriveUniformX4(b *testing.B) {
149 if !DeriveX4Available {
150 b.SkipNow()
151 }
152
153 var p [4]Poly
154 var seed [32]byte
155 for i := 0; i < b.N; i++ {
156 PolyDeriveUniformX4(
157 [4]*Poly{&p[0], &p[1], &p[2], &p[3]},
158 &seed,
159 [4]uint8{0, 1, 2, 3},
160 [4]uint8{4, 5, 6, 7},
161 )
162 }
163 }
164
165 func TestPolyDeriveUniformX4(t *testing.T) {
166 if !DeriveX4Available {
167 t.SkipNow()
168 }
169
170 var p2 Poly
171 var p [4]Poly
172 var seed [32]byte
173
174 for i := 0; i < 32; i++ {
175 seed[i] = byte(i)
176 }
177
178 PolyDeriveUniformX4(
179 [4]*Poly{&p[0], &p[1], &p[2], &p[3]},
180 &seed,
181 [4]uint8{0, 1, 2, 3},
182 [4]uint8{4, 5, 6, 7},
183 )
184
185 for i := 0; i < 4; i++ {
186 p2.DeriveUniform(&seed, uint8(i), uint8(i+4))
187 if p2 != p[i] {
188 t.Fatalf("%d\n%v\n%v", i, p2, p[i])
189 }
190 }
191 }
192
View as plain text