...
1
2
3
4
5 package ccitt
6
7 import (
8 "bytes"
9 "reflect"
10 "testing"
11 )
12
13 func testEncode(t *testing.T, o Order) {
14 t.Helper()
15 values := []uint32{0, 1, 256, 7, 128, 3, 2560, 2240, 2368, 2048}
16
17 decTable := whiteDecodeTable[:]
18 encTableSmall := whiteEncodeTable2[:]
19 encTableBig := whiteEncodeTable3[:]
20
21
22 var bb bytes.Buffer
23 w := &bitWriter{w: &bb, order: o}
24 for _, v := range values {
25 encTable := encTableSmall
26 if v < 64 {
27
28 } else if v&63 != 0 {
29 t.Fatalf("writeCode: cannot encode %d: large but not a multiple of 64", v)
30 } else {
31 encTable = encTableBig
32 v = v/64 - 1
33 }
34 if err := w.writeCode(encTable[v]); err != nil {
35 t.Fatalf("writeCode: %v", err)
36 }
37 }
38 if err := w.close(); err != nil {
39 t.Fatalf("close: %v", err)
40 }
41
42
43 got := []uint32(nil)
44 r := &bitReader{
45 r: bytes.NewReader(bb.Bytes()),
46 order: o,
47 }
48 finalValue := values[len(values)-1]
49 for {
50 v, err := decode(r, decTable)
51 if err != nil {
52 t.Fatalf("after got=%d: %v", got, err)
53 }
54 got = append(got, v)
55 if v == finalValue {
56 break
57 }
58 }
59
60
61 if !reflect.DeepEqual(got, values) {
62 t.Fatalf("\ngot: %v\nwant: %v", got, values)
63 }
64 }
65
66 func TestEncodeLSB(t *testing.T) { testEncode(t, LSB) }
67 func TestEncodeMSB(t *testing.T) { testEncode(t, MSB) }
68
View as plain text