1
2
3
4
5 package plot
6
7 import (
8 "math"
9 "reflect"
10 "testing"
11 )
12
13 var talbotLinHanrahanTests = []struct {
14 dMin, dMax float64
15 want int
16 containment int
17
18 wantValues []float64
19 wantStep float64
20 wantMagnitude int
21 }{
22
23 {
24 dMin: -1.9846500878911073,
25 dMax: 0.4370974820125605,
26 want: 3,
27 containment: free,
28
29 wantValues: []float64{-2, -1, 0},
30 wantStep: 1,
31 wantMagnitude: 0,
32 },
33 {
34 dMin: -1.9846500878911073,
35 dMax: 0.4370974820125605,
36 want: 3,
37 containment: containData,
38
39 wantValues: []float64{-2, -1, 0, 1},
40 wantStep: 1,
41 wantMagnitude: 0,
42 },
43 {
44 dMin: -1.985e-15,
45 dMax: 0.4371e-15,
46 want: 3,
47 containment: free,
48
49 wantValues: []float64{-1.985e-15, -7.739500000000001e-16, 4.3709999999999994e-16},
50 wantStep: 1.21105e-15,
51 wantMagnitude: -16,
52 },
53 {
54 dMin: -1.985e-15,
55 dMax: 0.4371e-15,
56 want: 3,
57 containment: containData,
58
59 wantValues: []float64{-1.985e-15, -7.739500000000001e-16, 4.3709999999999994e-16},
60 wantStep: 1.21105e-15,
61 wantMagnitude: -16,
62 },
63 {
64 dMin: -1.985e15,
65 dMax: 0.4371e15,
66 want: 3,
67 containment: free,
68
69 wantValues: []float64{-2e+15, -1e+15, 0},
70 wantStep: 1,
71 wantMagnitude: 15,
72 },
73 {
74 dMin: -1.985e15,
75 dMax: 0.4371e15,
76 want: 3,
77 containment: containData,
78
79 wantValues: []float64{-2e+15, -1e+15, 0, 1e+15},
80 wantStep: 1,
81 wantMagnitude: 15,
82 },
83 {
84 dMin: dlamchP * 20,
85 dMax: dlamchP * 50,
86 want: 3,
87 containment: free,
88
89 wantValues: []float64{4.440892098500626e-15, 7.771561172376096e-15, 1.1102230246251565e-14},
90 wantStep: 3.3306690738754696e-15,
91 wantMagnitude: -15,
92 },
93 {
94 dMin: dlamchP * 20,
95 dMax: dlamchP * 50,
96 want: 3,
97 containment: containData,
98
99 wantValues: []float64{4.440892098500626e-15, 7.771561172376096e-15, 1.1102230246251565e-14},
100 wantStep: 3.3306690738754696e-15,
101 wantMagnitude: -15,
102 },
103 {
104 dMin: math.MaxFloat64 / 4,
105 dMax: math.MaxFloat64 / 3,
106 want: 3,
107 containment: free,
108
109 wantValues: []float64{4.4942328371557893e+307, 5.243271643348421e+307, 5.992310449541053e+307},
110 wantStep: 7.490388061926317e+306,
111 wantMagnitude: 307,
112 },
113 {
114 dMin: math.MaxFloat64 / 4,
115 dMax: math.MaxFloat64 / 3,
116 want: 3,
117 containment: containData,
118
119 wantValues: []float64{4.4942328371557893e+307, 5.243271643348421e+307, 5.992310449541053e+307},
120 wantStep: 7.490388061926317e+306,
121 wantMagnitude: 307,
122 },
123 {
124 dMin: 0.00010,
125 dMax: 0.00015,
126 want: 3,
127 containment: free,
128
129 wantValues: []float64{0.0001, 0.000125, 0.00015000000000000001},
130 wantStep: 2.5,
131 wantMagnitude: -5,
132 },
133 {
134 dMin: 0.00010,
135 dMax: 0.00015,
136 want: 3,
137 containment: containData,
138
139 wantValues: []float64{0.0001, 0.000125, 0.00015000000000000001},
140 wantStep: 2.5,
141 wantMagnitude: -5,
142 },
143 {
144 dMin: 555.6545,
145 dMax: 21800.9875,
146 want: 3,
147 containment: free,
148
149 wantValues: []float64{0, 10000, 20000},
150 wantStep: 1,
151 wantMagnitude: 4,
152 },
153 {
154 dMin: 555.6545,
155 dMax: 21800.9875,
156 want: 3,
157 containment: containData,
158
159 wantValues: []float64{0, 12000, 24000},
160 wantStep: 12,
161 wantMagnitude: 3,
162 },
163 {
164 dMin: 555.6545,
165 dMax: 27800.9875,
166 want: 3,
167 containment: free,
168
169 wantValues: []float64{0, 10000, 20000, 30000},
170 wantStep: 1,
171 wantMagnitude: 4,
172 },
173 {
174 dMin: 555.6545,
175 dMax: 27800.9875,
176 want: 3,
177 containment: containData,
178
179 wantValues: []float64{0, 10000, 20000, 30000},
180 wantStep: 1,
181 wantMagnitude: 4,
182 },
183 {
184 dMin: 55.6545,
185 dMax: 1555.9875,
186 want: 3,
187 containment: free,
188
189 wantValues: []float64{0, 500, 1000, 1500},
190 wantStep: 5,
191 wantMagnitude: 2,
192 },
193 {
194 dMin: 55.6545,
195 dMax: 1555.9875,
196 want: 3,
197 containment: containData,
198
199 wantValues: []float64{0, 800, 1600},
200 wantStep: 8,
201 wantMagnitude: 2,
202 },
203 {
204 dMin: 3.096916 - 0.125,
205 dMax: 3.096916 + 0.125,
206 want: 3,
207 containment: free,
208
209 wantValues: []float64{3, 3.1, 3.2},
210 wantStep: 1,
211 wantMagnitude: -1,
212 },
213 {
214 dMin: 3.096916 - 0.125,
215 dMax: 3.096916 + 0.125,
216 want: 3,
217 containment: containData,
218
219 wantValues: []float64{2.9499999999999997, 3.0999999999999996, 3.2499999999999996},
220 wantStep: 15,
221 wantMagnitude: -2,
222 },
223
224
225 {
226 dMin: 99.99999999999996,
227 dMax: 100,
228 want: 3,
229 containment: free,
230
231 wantValues: []float64{99.99999999999996, 99.99999999999997, 100},
232 wantStep: 2,
233 wantMagnitude: -14,
234 },
235 }
236
237 func TestTalbotLinHanrahan(t *testing.T) {
238 for _, test := range talbotLinHanrahanTests {
239 values, step, _, magnitude := talbotLinHanrahan(test.dMin, test.dMax, test.want, test.containment, nil, nil, nil)
240 if !reflect.DeepEqual(values, test.wantValues) {
241 t.Errorf("unexpected values for dMin=%g, dMax=%g, want=%d, containment=%d:\ngot: %v\nwant:%v",
242 test.dMin, test.dMax, test.want, test.containment, values, test.wantValues)
243 }
244 if step != test.wantStep {
245 t.Errorf("unexpected step for dMin=%g, dMax=%g, want=%d, containment=%d: got:%v want:%v",
246 test.dMin, test.dMax, test.want, test.containment, step, test.wantStep)
247 }
248 if magnitude != test.wantMagnitude {
249 t.Errorf("unexpected magnitude for dMin=%g, dMax=%g, want=%d, containment=%d: got:%d want:%d",
250 test.dMin, test.dMax, test.want, test.containment, magnitude, test.wantMagnitude)
251 }
252 if test.containment == containData {
253 f := math.Pow10(-magnitude)
254 if test.containment == containData && (test.dMin*f < values[0]*f || values[len(values)-1]*f < test.dMax*f) {
255 t.Errorf("unexpected values for containment dMin=%g, dMax=%g, want=%d not containment:\ngot: %v\nwant:%v",
256 test.dMin, test.dMax, test.want, values, test.wantValues)
257 }
258 }
259 }
260 }
261
View as plain text