48 lines
981 B
Go
48 lines
981 B
Go
|
// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package lzma
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestHashTable(t *testing.T) {
|
||
|
ht, err := newHashTable(32, 2)
|
||
|
if err != nil {
|
||
|
t.Fatalf("newHashTable: error %s", err)
|
||
|
}
|
||
|
// 01234567890123456
|
||
|
s := "abcabcdefghijklmn"
|
||
|
n, err := ht.Write([]byte(s))
|
||
|
if err != nil {
|
||
|
t.Fatalf("ht.Write: error %s", err)
|
||
|
}
|
||
|
if n != len(s) {
|
||
|
t.Fatalf("ht.Write returned %d; want %d", n, len(s))
|
||
|
}
|
||
|
tests := []struct {
|
||
|
s string
|
||
|
w string
|
||
|
}{
|
||
|
{"ab", "[3 0]"},
|
||
|
{"bc", "[4 1]"},
|
||
|
{"ca", "[2]"},
|
||
|
{"xx", "[]"},
|
||
|
{"gh", "[9]"},
|
||
|
{"mn", "[15]"},
|
||
|
}
|
||
|
distances := make([]int64, 20)
|
||
|
for _, c := range tests {
|
||
|
distances := distances[:20]
|
||
|
k := ht.Matches([]byte(c.s), distances)
|
||
|
distances = distances[:k]
|
||
|
o := fmt.Sprintf("%v", distances)
|
||
|
if o != c.w {
|
||
|
t.Errorf("%s: offsets %s; want %s", c.s, o, c.w)
|
||
|
}
|
||
|
}
|
||
|
}
|