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