1 package qr
2
3 import "testing"
4
5 var testvi = &versionInfo{7, M, 0, 1, 10, 2, 5}
6
7 func Test_ErrorCorrectionStringer(t *testing.T) {
8 tests := map[ErrorCorrectionLevel]string{
9 L: "L", M: "M", Q: "Q", H: "H", ErrorCorrectionLevel(99): "unknown",
10 }
11 for ecl, str := range tests {
12 if ecl.String() != str {
13 t.Fail()
14 }
15 }
16 }
17
18 func Test_CharCountBits(t *testing.T) {
19 v1 := &versionInfo{5, M, 0, 0, 0, 0, 0}
20 v2 := &versionInfo{15, M, 0, 0, 0, 0, 0}
21 v3 := &versionInfo{30, M, 0, 0, 0, 0, 0}
22
23 if v1.charCountBits(numericMode) != 10 {
24 t.Fail()
25 }
26 if v1.charCountBits(alphaNumericMode) != 9 {
27 t.Fail()
28 }
29 if v1.charCountBits(byteMode) != 8 {
30 t.Fail()
31 }
32 if v1.charCountBits(kanjiMode) != 8 {
33 t.Fail()
34 }
35 if v2.charCountBits(numericMode) != 12 {
36 t.Fail()
37 }
38 if v2.charCountBits(alphaNumericMode) != 11 {
39 t.Fail()
40 }
41 if v2.charCountBits(byteMode) != 16 {
42 t.Fail()
43 }
44 if v2.charCountBits(kanjiMode) != 10 {
45 t.Fail()
46 }
47 if v3.charCountBits(numericMode) != 14 {
48 t.Fail()
49 }
50 if v3.charCountBits(alphaNumericMode) != 13 {
51 t.Fail()
52 }
53 if v3.charCountBits(byteMode) != 16 {
54 t.Fail()
55 }
56 if v3.charCountBits(kanjiMode) != 12 {
57 t.Fail()
58 }
59 if v1.charCountBits(encodingMode(3)) != 0 {
60 t.Fail()
61 }
62 }
63
64 func Test_TotalDataBytes(t *testing.T) {
65 if testvi.totalDataBytes() != 20 {
66 t.Fail()
67 }
68 }
69
70 func Test_ModulWidth(t *testing.T) {
71 if testvi.modulWidth() != 45 {
72 t.Fail()
73 }
74 }
75
76 func Test_FindSmallestVersionInfo(t *testing.T) {
77 if findSmallestVersionInfo(H, alphaNumericMode, 10208) != nil {
78 t.Error("there should be no version with this capacity")
79 }
80 test := func(cap int, tVersion byte) {
81 v := findSmallestVersionInfo(H, alphaNumericMode, cap)
82 if v == nil || v.Version != tVersion {
83 t.Errorf("version %d should be returned.", tVersion)
84 }
85 }
86 test(10191, 40)
87 test(5591, 29)
88 test(5592, 30)
89 test(190, 3)
90 test(200, 4)
91 }
92
93 type aligmnentTest struct {
94 version byte
95 patterns []int
96 }
97
98 var allAligmnentTests = []*aligmnentTest{
99 &aligmnentTest{1, []int{}},
100 &aligmnentTest{2, []int{6, 18}},
101 &aligmnentTest{3, []int{6, 22}},
102 &aligmnentTest{4, []int{6, 26}},
103 &aligmnentTest{5, []int{6, 30}},
104 &aligmnentTest{6, []int{6, 34}},
105 &aligmnentTest{7, []int{6, 22, 38}},
106 &aligmnentTest{8, []int{6, 24, 42}},
107 &aligmnentTest{9, []int{6, 26, 46}},
108 &aligmnentTest{10, []int{6, 28, 50}},
109 &aligmnentTest{11, []int{6, 30, 54}},
110 &aligmnentTest{12, []int{6, 32, 58}},
111 &aligmnentTest{13, []int{6, 34, 62}},
112 &aligmnentTest{14, []int{6, 26, 46, 66}},
113 &aligmnentTest{15, []int{6, 26, 48, 70}},
114 &aligmnentTest{16, []int{6, 26, 50, 74}},
115 &aligmnentTest{17, []int{6, 30, 54, 78}},
116 &aligmnentTest{18, []int{6, 30, 56, 82}},
117 &aligmnentTest{19, []int{6, 30, 58, 86}},
118 &aligmnentTest{20, []int{6, 34, 62, 90}},
119 &aligmnentTest{21, []int{6, 28, 50, 72, 94}},
120 &aligmnentTest{22, []int{6, 26, 50, 74, 98}},
121 &aligmnentTest{23, []int{6, 30, 54, 78, 102}},
122 &aligmnentTest{24, []int{6, 28, 54, 80, 106}},
123 &aligmnentTest{25, []int{6, 32, 58, 84, 110}},
124 &aligmnentTest{26, []int{6, 30, 58, 86, 114}},
125 &aligmnentTest{27, []int{6, 34, 62, 90, 118}},
126 &aligmnentTest{28, []int{6, 26, 50, 74, 98, 122}},
127 &aligmnentTest{29, []int{6, 30, 54, 78, 102, 126}},
128 &aligmnentTest{30, []int{6, 26, 52, 78, 104, 130}},
129 &aligmnentTest{31, []int{6, 30, 56, 82, 108, 134}},
130 &aligmnentTest{32, []int{6, 34, 60, 86, 112, 138}},
131 &aligmnentTest{33, []int{6, 30, 58, 86, 114, 142}},
132 &aligmnentTest{34, []int{6, 34, 62, 90, 118, 146}},
133 &aligmnentTest{35, []int{6, 30, 54, 78, 102, 126, 150}},
134 &aligmnentTest{36, []int{6, 24, 50, 76, 102, 128, 154}},
135 &aligmnentTest{37, []int{6, 28, 54, 80, 106, 132, 158}},
136 &aligmnentTest{38, []int{6, 32, 58, 84, 110, 136, 162}},
137 &aligmnentTest{39, []int{6, 26, 54, 82, 110, 138, 166}},
138 &aligmnentTest{40, []int{6, 30, 58, 86, 114, 142, 170}},
139 }
140
141 func Test_AlignmentPatternPlacements(t *testing.T) {
142 for _, at := range allAligmnentTests {
143 vi := &versionInfo{at.version, M, 0, 0, 0, 0, 0}
144
145 res := vi.alignmentPatternPlacements()
146 if len(res) != len(at.patterns) {
147 t.Errorf("number of alignmentpatterns missmatch for version %d", at.version)
148 }
149 for i := 0; i < len(res); i++ {
150 if res[i] != at.patterns[i] {
151 t.Errorf("alignmentpatterns for version %d missmatch on index %d", at.version, i)
152 }
153 }
154
155 }
156
157 }
158
View as plain text