...

Source file src/golang.org/x/image/ccitt/writer_test.go

Documentation: golang.org/x/image/ccitt

     1  // Copyright 2019 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     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  	// Encode values to bit stream.
    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  			// No-op.
    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  	// Decode bit stream to values.
    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  	// Check that the round-tripped values were unchanged.
    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