Overview
Comment: | Added a proper test for fibonacci.Writer that writes 0-255, converts the resulting bits to a string and compares against the result of Numbers.Code for each value. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
c7c8d6445fad8e8f2d7ec070150b0cae |
User & Date: | spaskalev on 2015-01-01 05:30:46 |
Other Links: | manifest | tags |
Context
2015-01-01
| ||
06:34 | Fixed Decode's length return and added a test for it. Reduce encoder's buffer to 2 bytes. CC at 98.3% check-in: ea97951fcd user: spaskalev tags: trunk | |
05:30 | Added a proper test for fibonacci.Writer that writes 0-255, converts the resulting bits to a string and compares against the result of Numbers.Code for each value. check-in: c7c8d6445f user: spaskalev tags: trunk | |
04:58 | Added fibonacci.Writer(io.Writer) io.Writer that encodes bytes. check-in: 93fcb281a1 user: spaskalev tags: trunk | |
Changes
Modified src/0dev.org/encoding/fibonacci/fib.go from [fe204fcaf6] to [2d2f3f4577].
︙ | ︙ | |||
120 121 122 123 124 125 126 127 128 129 130 131 132 133 | // Shift the the encoded value and account for its length enc >>= added e.length += len len -= added // Not enough bits to write if e.length < 8 { continue } // Clearing e.length is not necessary as it will be overwritten later // Stage the complete byte for writing e.buffer = append(e.buffer, byte(e.remaining)) | > > > | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | // Shift the the encoded value and account for its length enc >>= added e.length += len len -= added // Not enough bits to write if e.length < 8 { // Account for the processed input byte total++ continue } // Clearing e.length is not necessary as it will be overwritten later // Stage the complete byte for writing e.buffer = append(e.buffer, byte(e.remaining)) |
︙ | ︙ | |||
146 147 148 149 150 151 152 | _, err = e.target.Write(e.buffer) // Abort write on error if err != nil { break } | | | 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | _, err = e.target.Write(e.buffer) // Abort write on error if err != nil { break } // Account for the processed input byte total++ // Clear the buffer e.buffer = e.buffer[:0] } return total, err } |
︙ | ︙ |
Modified src/0dev.org/encoding/fibonacci/fib_test.go from [76f99cbcd6] to [5ea0aed96e].
1 2 3 4 | package fibonacci import ( "bytes" | < > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | package fibonacci import ( "bytes" "io" "strings" "testing" ) func TestNumbers(t *testing.T) { n := New(32) expected := []uint64{1, 1, 2, 3, 5, 8, 13, 21} |
︙ | ︙ | |||
29 30 31 32 33 34 35 | dec, _ := n.Decode(enc) if i != dec { t.Errorf("Unexpected value for %d - enc is %b, dec is %d\n", i, enc, dec) } } } | | | < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < | > | > > > > > > > > | > > > > > > > > | | > > > > > | > | > > | | | | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | dec, _ := n.Decode(enc) if i != dec { t.Errorf("Unexpected value for %d - enc is %b, dec is %d\n", i, enc, dec) } } } func TestWriter(t *testing.T) { var buf bytes.Buffer var w io.Writer = Writer(&buf) var input []byte = make([]byte, 256) var fib Numbers = New(16) for i := uint64(0); i < 256; i++ { input[i] = byte(i) } // Write the input count, err := w.Write(input) if count != len(input) { t.Error("Unexpected write count", count) } if err != nil { t.Error("Unexpected write error", err.Error()) } // Flush remaining bits count, err = w.Write(nil) if count != 0 { t.Error("Unexpected write count while flushing", count) } if err != nil { t.Error("Unexpected write error while flushing", err.Error()) } var output string for _, v := range buf.Bytes() { output += u2s(uint64(v), 8) } for i, v := range input { c, l := fib.Code(uint64(v)) vs := u2s(c, l) if loc := strings.Index(output, vs); loc != 0 { t.Fatal("Unexpected location for", i, "value", vs) } output = output[len(vs):] } } func u2s(b uint64, l byte) (result string) { for i := byte(0); i < l; i++ { if (b & 1) > 0 { result += "1" } else { result += "0" } b >>= 1 } return } |