diff options
Diffstat (limited to 'vendor/github.com/skip2/go-qrcode/symbol_test.go')
| -rw-r--r-- | vendor/github.com/skip2/go-qrcode/symbol_test.go | 334 |
1 files changed, 334 insertions, 0 deletions
diff --git a/vendor/github.com/skip2/go-qrcode/symbol_test.go b/vendor/github.com/skip2/go-qrcode/symbol_test.go new file mode 100644 index 0000000..59b2b6b --- /dev/null +++ b/vendor/github.com/skip2/go-qrcode/symbol_test.go @@ -0,0 +1,334 @@ +// go-qrcode +// Copyright 2014 Tom Harwood + +package qrcode + +import "testing" + +func TestSymbolBasic(t *testing.T) { + size := 10 + quietZoneSize := 4 + + m := newSymbol(size, quietZoneSize) + + if m.size != size+quietZoneSize*2 { + t.Errorf("Symbol size is %d, expected %d", m.size, size+quietZoneSize*2) + } + + for i := 0; i < size; i++ { + for j := 0; j < size; j++ { + + v := m.get(i, j) + + if v != false { + t.Errorf("New symbol not empty") + } + + if !m.empty(i, j) { + t.Errorf("New symbol is not empty") + } + + value := i*j%2 == 0 + m.set(i, j, value) + + v = m.get(i, j) + + if v != value { + t.Errorf("Symbol ignores set bits") + } + + if m.empty(i, j) { + t.Errorf("Symbol ignores set bits") + } + } + } +} + +func TestSymbolPenalties(t *testing.T) { + tests := []struct { + pattern [][]bool + expectedPenalty1 int + expectedPenalty2 int + expectedPenalty3 int + expectedPenalty4 int + }{ + { + [][]bool{ + {b0, b1, b0, b1, b0, b1}, + {b1, b0, b1, b0, b1, b0}, + {b0, b1, b0, b1, b0, b1}, + {b1, b0, b1, b0, b1, b0}, + {b0, b1, b0, b1, b0, b1}, + {b1, b0, b1, b0, b1, b0}, + }, + 0, // No adjacent modules of same color. + 0, // No 2x2+ sized blocks. + 0, // No 1:1:3:1:1 pattern. + -1, + }, + { + [][]bool{ + {b0, b0, b0, b1, b0, b1}, + {b1, b0, b1, b0, b1, b0}, + {b0, b1, b0, b1, b0, b1}, + {b1, b0, b1, b0, b1, b0}, + {b0, b1, b0, b1, b0, b1}, + {b1, b0, b1, b0, b1, b0}, + }, + 0, // 5 adjacent modules of same colour, score = 0. + 0, // No 2x2+ sized blocks. + 0, // No 1:1:3:1:1 pattern. + -1, + }, + { + [][]bool{ + {b0, b0, b0, b0, b0, b0}, + {b1, b0, b1, b0, b1, b0}, + {b0, b1, b0, b1, b0, b1}, + {b1, b0, b1, b0, b1, b0}, + {b0, b1, b0, b1, b0, b1}, + {b1, b0, b1, b0, b1, b0}, + }, + 4, // 6 adjacent modules of same colour, score = 3 + (6-5) + 0, // No 2x2+ sized blocks. + 0, // No 1:1:3:1:1 pattern. + -1, + }, + { + [][]bool{ + {b0, b0, b0, b0, b0, b0, b0}, + {b1, b0, b1, b0, b1, b0, b1}, + {b1, b0, b0, b0, b0, b0, b1}, + {b1, b0, b1, b0, b1, b0, b1}, + {b1, b0, b0, b0, b0, b0, b1}, + {b1, b0, b1, b0, b1, b0, b1}, + {b1, b0, b0, b0, b0, b0, b0}, + }, + 28, // 3+(7-5) + 3+(6-5) + 3+(6-5) + 3+(6-5) + 3+(7-5) + 3+(7-5) = 28 + 0, // No 2x2+ sized blocks. + 0, // No 1:1:3:1:1 pattern. + -1, + }, + { + [][]bool{ + {b0, b0, b0, b1, b0, b1}, + {b0, b0, b1, b0, b1, b0}, + {b0, b1, b0, b1, b0, b1}, + {b1, b0, b1, b1, b1, b0}, + {b0, b1, b1, b1, b0, b1}, + {b1, b0, b1, b0, b1, b0}, + }, + -1, + 6, // 3*(2-1)*(2-1) + 3(2-1)*(2-1) + 0, // No 1:1:3:1:1 pattern. + -1, + }, + { + [][]bool{ + {b0, b0, b0, b0, b0, b1}, + {b0, b0, b0, b0, b0, b1}, + {b0, b0, b0, b0, b0, b1}, + {b0, b0, b0, b0, b0, b1}, + {b0, b0, b0, b0, b0, b1}, + {b0, b0, b0, b0, b0, b1}, + }, + -1, + 60, // 3 * (5-1) * (6-1) + 0, // No 1:1:3:1:1 pattern. + -1, + }, + { + [][]bool{ + {b0, b0, b0, b0, b0, b1}, + {b0, b0, b0, b0, b0, b1}, + {b1, b1, b0, b1, b0, b1}, + {b1, b1, b0, b1, b0, b1}, + {b1, b1, b0, b1, b0, b1}, + {b1, b1, b0, b1, b0, b1}, + }, + -1, + 21, // 3*(5-1)*(2-1) + 3*(2-1)*(4-1) = 3*4 + 3*3 + 0, // No 1:1:3:1:1 pattern. + -1, + }, + { + [][]bool{ + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + {b0, b0, b0, b0, b1, b0, b1, b1, b1, b0, b1, b0}, + }, + -1, + -1, + 480, // 12* 1:1:3:1:1 patterns, 12 * 40. + -1, + }, + { + [][]bool{ + {b1, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b1, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b1, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b1, b1, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b1, b1, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b1, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b1, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b1, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + }, + -1, + -1, + 80, // 2* 1:1:3:1:1 patterns, 2 * 40. + -1, + }, + { + [][]bool{ + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + }, + -1, + -1, + -1, + 100, // 10 * (10 steps of 5% deviation from 50% black/white). + }, + { + [][]bool{ + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + }, + -1, + -1, + -1, + 100, // 10 * (10 steps of 5% deviation from 50% black/white). + }, + { + [][]bool{ + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + }, + -1, + -1, + -1, + 0, // Exactly 50%/50% black/white. + }, + { + [][]bool{ + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + }, + -1, + -1, + -1, + 20, // 10 * (2 steps of 5% deviation towards white). + }, + { + [][]bool{ + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + }, + -1, + -1, + -1, + 30, // 10 * (3 steps of 5% deviation towards white). + }, + { + [][]bool{ + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b0}, + {b0, b0, b0, b0, b0, b0, b0, b0, b0, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + {b1, b1, b1, b1, b1, b1, b1, b1, b1, b1}, + }, + -1, + -1, + -1, + 30, // 10 * (3 steps of 5% deviation towards white). + }, + } + + for i, test := range tests { + s := newSymbol(len(test.pattern[0]), 4) + s.set2dPattern(0, 0, test.pattern) + + penalty1 := s.penalty1() + penalty2 := s.penalty2() + penalty3 := s.penalty3() + penalty4 := s.penalty4() + + ok := true + + if test.expectedPenalty1 != -1 && test.expectedPenalty1 != penalty1 { + ok = false + } + if test.expectedPenalty2 != -1 && test.expectedPenalty2 != penalty2 { + ok = false + } + if test.expectedPenalty3 != -1 && test.expectedPenalty3 != penalty3 { + ok = false + } + if test.expectedPenalty4 != -1 && test.expectedPenalty4 != penalty4 { + ok = false + } + + if !ok { + t.Fatalf("Penalty test #%d p1=%d, p2=%d, p3=%d, p4=%d (expected p1=%d, p2=%d, p3=%d, p4=%d)", i, penalty1, penalty2, penalty3, penalty4, + test.expectedPenalty1, test.expectedPenalty2, test.expectedPenalty3, + test.expectedPenalty4) + } + } +} |
