|
- // 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)
- }
- }
- }
|