1//go:build go1.7
2// +build go1.7
3
4package ini
5
6import (
7	"testing"
8)
9
10func TestNumberHelper(t *testing.T) {
11	cases := []struct {
12		b              []rune
13		determineIndex int
14
15		expectedExists   []bool
16		expectedErrors   []bool
17		expectedCorrects []bool
18		expectedNegative bool
19		expectedBase     int
20	}{
21		{
22			b:              []rune("-10"),
23			determineIndex: 0,
24			expectedExists: []bool{
25				false,
26				false,
27				false,
28			},
29			expectedErrors: []bool{
30				false,
31				false,
32				false,
33			},
34			expectedCorrects: []bool{
35				true,
36				true,
37				true,
38			},
39			expectedNegative: true,
40			expectedBase:     10,
41		},
42		{
43			b:              []rune("0x10"),
44			determineIndex: 1,
45			expectedExists: []bool{
46				false,
47				false,
48				true,
49				true,
50			},
51			expectedErrors: []bool{
52				false,
53				false,
54				false,
55				false,
56			},
57			expectedCorrects: []bool{
58				true,
59				true,
60				true,
61				true,
62			},
63			expectedNegative: false,
64			expectedBase:     16,
65		},
66		{
67			b:              []rune("0b101"),
68			determineIndex: 1,
69			expectedExists: []bool{
70				false,
71				false,
72				true,
73				true,
74				true,
75			},
76			expectedErrors: []bool{
77				false,
78				false,
79				false,
80				false,
81				false,
82			},
83			expectedCorrects: []bool{
84				true,
85				true,
86				true,
87				true,
88				true,
89			},
90			expectedNegative: false,
91			expectedBase:     2,
92		},
93		{
94			b:              []rune("0o271"),
95			determineIndex: 1,
96			expectedExists: []bool{
97				false,
98				false,
99				true,
100				true,
101				true,
102			},
103			expectedErrors: []bool{
104				false,
105				false,
106				false,
107				false,
108				false,
109			},
110			expectedCorrects: []bool{
111				true,
112				true,
113				true,
114				true,
115				true,
116			},
117			expectedNegative: false,
118			expectedBase:     8,
119		},
120		{
121			b:              []rune("99"),
122			determineIndex: -1,
123			expectedExists: []bool{
124				false,
125				false,
126			},
127			expectedErrors: []bool{
128				false,
129				false,
130			},
131			expectedCorrects: []bool{
132				true,
133				true,
134			},
135			expectedNegative: false,
136			expectedBase:     10,
137		},
138		{
139			b:              []rune("0o2o71"),
140			determineIndex: 1,
141			expectedExists: []bool{
142				false,
143				false,
144				true,
145				true,
146				true,
147				true,
148			},
149			expectedErrors: []bool{
150				false,
151				false,
152				false,
153				false,
154				false,
155				true,
156			},
157			expectedCorrects: []bool{
158				true,
159				true,
160				true,
161				false,
162				true,
163				true,
164			},
165			expectedNegative: false,
166			expectedBase:     8,
167		},
168	}
169
170	for _, c := range cases {
171		helper := numberHelper{}
172
173		for i := 0; i < len(c.b); i++ {
174			if e, a := c.expectedExists[i], helper.Exists(); e != a {
175				t.Errorf("expected %t, but received %t", e, a)
176			}
177
178			if i == c.determineIndex {
179				if e, a := c.expectedErrors[i], helper.Determine(c.b[i]) != nil; e != a {
180					t.Errorf("expected %t, but received %t", e, a)
181				}
182			} else {
183				if e, a := c.expectedCorrects[i], helper.CorrectByte(c.b[i]); e != a {
184					t.Errorf("expected %t, but received %t", e, a)
185				}
186			}
187		}
188
189		if e, a := c.expectedNegative, helper.IsNegative(); e != a {
190			t.Errorf("expected %t, but received %t", e, a)
191		}
192
193		if e, a := c.expectedBase, helper.Base(); e != a {
194			t.Errorf("expected %d, but received %d", e, a)
195		}
196	}
197}
198