mirror of
https://github.com/dutchcoders/transfer.sh.git
synced 2024-12-13 14:20:18 +01:00
335 lines
8.7 KiB
Go
335 lines
8.7 KiB
Go
|
// 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)
|
||
|
}
|
||
|
}
|
||
|
}
|