1package zstd
2
3import (
4	"strconv"
5	"testing"
6)
7
8func TestEncoderLevelFromString(t *testing.T) {
9	type args struct {
10		s string
11	}
12	tests := []struct {
13		name  string
14		args  args
15		want  bool
16		want1 EncoderLevel
17	}{
18		{
19			name:  "fastest",
20			args:  args{s: "fastest"},
21			want:  true,
22			want1: SpeedFastest,
23		},
24		{
25			name:  "fastest-upper",
26			args:  args{s: "FASTEST"},
27			want:  true,
28			want1: SpeedFastest,
29		},
30		{
31			name:  "default",
32			args:  args{s: "default"},
33			want:  true,
34			want1: SpeedDefault,
35		},
36		{
37			name:  "default-UPPER",
38			args:  args{s: "Default"},
39			want:  true,
40			want1: SpeedDefault,
41		},
42		{
43			name:  "invalid",
44			args:  args{s: "invalid"},
45			want:  false,
46			want1: SpeedDefault,
47		},
48		{
49			name:  "unknown",
50			args:  args{s: "unknown"},
51			want:  false,
52			want1: SpeedDefault,
53		},
54		{
55			name:  "empty",
56			args:  args{s: ""},
57			want:  false,
58			want1: SpeedDefault,
59		},
60		{
61			name:  "fastest-string",
62			args:  args{s: SpeedFastest.String()},
63			want:  true,
64			want1: SpeedFastest,
65		},
66		{
67			name:  "default-string",
68			args:  args{s: SpeedDefault.String()},
69			want:  true,
70			want1: SpeedDefault,
71		},
72	}
73	for _, tt := range tests {
74		t.Run(tt.name, func(t *testing.T) {
75			got, got1 := EncoderLevelFromString(tt.args.s)
76			if got != tt.want {
77				t.Errorf("EncoderLevelFromString() got = %v, want %v", got, tt.want)
78			}
79			if got1 != tt.want1 {
80				t.Errorf("EncoderLevelFromString() got1 = %v, want %v", got1, tt.want1)
81			}
82		})
83	}
84}
85
86func TestEncoderLevelFromZstd(t *testing.T) {
87	type args struct {
88		level int
89	}
90	tests := []struct {
91		name string
92		args args
93		want EncoderLevel
94	}{
95		{
96			name: "level-1",
97			args: args{level: 1},
98			want: SpeedFastest,
99		},
100		{
101			name: "level-minus1",
102			args: args{level: -1},
103			want: SpeedFastest,
104		},
105		{
106			name: "level-3",
107			args: args{level: 3},
108			want: SpeedDefault,
109		},
110		{
111			name: "level-4",
112			args: args{level: 4},
113			want: SpeedDefault,
114		},
115	}
116	for _, tt := range tests {
117		t.Run(tt.name, func(t *testing.T) {
118			if got := EncoderLevelFromZstd(tt.args.level); got != tt.want {
119				t.Errorf("EncoderLevelFromZstd() = %v, want %v", got, tt.want)
120			}
121		})
122	}
123}
124
125func TestWindowSize(t *testing.T) {
126	tests := []struct {
127		windowSize int
128		err        bool
129	}{
130		{1 << 9, true},
131		{1 << 10, false},
132		{(1 << 10) + 1, true},
133		{(1 << 10) * 3, true},
134		{MaxWindowSize, false},
135	}
136	for _, tt := range tests {
137		t.Run(strconv.Itoa(tt.windowSize), func(t *testing.T) {
138			var options encoderOptions
139			err := WithWindowSize(tt.windowSize)(&options)
140			if tt.err {
141				if err == nil {
142					t.Error("did not get error for invalid window size")
143				}
144			} else {
145				if err != nil {
146					t.Error("got error for valid window size")
147				}
148				if options.windowSize != tt.windowSize {
149					t.Error("failed to set window size")
150				}
151			}
152		})
153	}
154}
155