-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathtag_lzw_test.go
101 lines (95 loc) · 2.12 KB
/
tag_lzw_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
90
91
92
93
94
95
96
97
98
99
100
101
package gofast
import "testing"
import "io/ioutil"
func TestTagLzw(t *testing.T) {
tag, enc, dec := makeLZW(nil, nil)
if tag != tagLzw {
t.Errorf("expected %v, got %v", tagLzw, tag)
}
// test with valid input
ref := "hello world"
in, out := make([]byte, 1024*1024), make([]byte, 1024*1024)
n := enc([]byte(ref), in)
m := dec(in[:n], out)
if s := string(out[:m]); s != ref {
t.Errorf("expected %v, got %v", ref, s)
}
// test with empty input for encoder
if n = enc([]byte{}, in); n != 0 {
t.Errorf("expected %v, got %v", 0, n)
}
// test with empty input for decoder
if n = dec([]byte{}, in); n != 0 {
t.Errorf("expected %v, got %v", 0, n)
}
}
func BenchmarkLzwEnc1KFast(b *testing.B) {
_, enc, _ := makeLZW(nil, nil)
s, err := ioutil.ReadFile("testdata/1k.json")
if err != nil {
panic(err)
}
out := make([]byte, 1024*1024)
b.ResetTimer()
var n int
for i := 0; i < b.N; i++ {
n = enc(s, out)
}
//fmt.Println(n)
b.SetBytes(int64(n))
}
func BenchmarkLzwDec1KFast(b *testing.B) {
s, err := ioutil.ReadFile("testdata/1k.json")
if err != nil {
panic(err)
}
_, enc, dec := makeLZW(nil, nil)
in, out := make([]byte, 1024*1024), make([]byte, 1024*1024)
n := enc(s, in)
b.ResetTimer()
var m int
for i := 0; i < b.N; i++ {
m = dec(in[:n], out)
}
// fmt.Println(m)
b.SetBytes(int64(m))
}
func BenchmarkLzwEnc10KSmall(b *testing.B) {
_, enc, _ := makeLZW(nil, nil)
s, err := ioutil.ReadFile("testdata/1k.json")
if err != nil {
panic(err)
}
in, out := make([]byte, 1024*1024*10), make([]byte, 1024*1024*10)
n := 0
for i := 0; i < 10; i++ {
n += copy(in, s)
}
b.ResetTimer()
var m int
for i := 0; i < b.N; i++ {
m = enc(in[:n], out)
}
// fmt.Println(m)
b.SetBytes(int64(m))
}
func BenchmarkLzwDec10KSmall(b *testing.B) {
_, enc, dec := makeLZW(nil, nil)
s, err := ioutil.ReadFile("testdata/1k.json")
if err != nil {
panic(err)
}
in, out := make([]byte, 1024*1024*10), make([]byte, 1024*1024*10)
n := 0
for i := 0; i < 10; i++ {
n += copy(in, s)
}
p := enc(in[:n], out)
b.ResetTimer()
var m int
for i := 0; i < b.N; i++ {
m = dec(out[:p], in)
}
// fmt.Println(m)
b.SetBytes(int64(m))
}