Skip to content

Commit 8225663

Browse files
committed
test value.Less
1 parent ea1d56f commit 8225663

File tree

2 files changed

+247
-1
lines changed

2 files changed

+247
-1
lines changed

value/less_test.go

Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
/*
2+
Copyright 2019 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package value
18+
19+
import (
20+
"testing"
21+
)
22+
23+
func TestValueLess(t *testing.T) {
24+
table := []struct {
25+
name string
26+
// we expect a < b and !(b < a) unless eq is true, in which
27+
// case we expect less to return false in both orders.
28+
a, b Value
29+
eq bool
30+
}{
31+
{
32+
name: "Invalid-1",
33+
a: Value{},
34+
b: Value{},
35+
eq: true,
36+
}, {
37+
name: "Invalid-2",
38+
a: FloatValue(1),
39+
b: Value{},
40+
}, {
41+
name: "Invalid-3",
42+
a: IntValue(1),
43+
b: Value{},
44+
}, {
45+
name: "Invalid-4",
46+
a: StringValue("aoeu"),
47+
b: Value{},
48+
}, {
49+
name: "Invalid-5",
50+
a: BooleanValue(true),
51+
b: Value{},
52+
}, {
53+
name: "Invalid-6",
54+
a: Value{ListValue: &List{}},
55+
b: Value{},
56+
}, {
57+
name: "Invalid-7",
58+
a: Value{MapValue: &Map{}},
59+
b: Value{},
60+
}, {
61+
name: "Invalid-8",
62+
a: Value{Null: true},
63+
b: Value{},
64+
}, {
65+
name: "Float-1",
66+
a: FloatValue(1.14),
67+
b: FloatValue(3.14),
68+
}, {
69+
name: "Float-2",
70+
a: FloatValue(1),
71+
b: FloatValue(1),
72+
eq: true,
73+
}, {
74+
name: "Float-3",
75+
a: FloatValue(1),
76+
b: IntValue(1),
77+
eq: true,
78+
}, {
79+
name: "Float-4",
80+
a: FloatValue(1),
81+
b: IntValue(2),
82+
}, {
83+
name: "Float-5",
84+
a: FloatValue(1),
85+
b: StringValue("aoeu"),
86+
}, {
87+
name: "Float-6",
88+
a: FloatValue(1),
89+
b: BooleanValue(true),
90+
}, {
91+
name: "Float-7",
92+
a: FloatValue(1),
93+
b: Value{ListValue: &List{}},
94+
}, {
95+
name: "Float-8",
96+
a: FloatValue(1),
97+
b: Value{MapValue: &Map{}},
98+
}, {
99+
name: "Float-9",
100+
a: FloatValue(1),
101+
b: Value{Null: true},
102+
}, {
103+
name: "Int-1",
104+
a: IntValue(1),
105+
b: IntValue(2),
106+
}, {
107+
name: "Int-2",
108+
a: IntValue(1),
109+
b: IntValue(1),
110+
eq: true,
111+
}, {
112+
name: "Int-3",
113+
a: IntValue(1),
114+
b: FloatValue(1),
115+
eq: true,
116+
}, {
117+
name: "Int-4",
118+
a: IntValue(1),
119+
b: FloatValue(2),
120+
}, {
121+
name: "Int-5",
122+
a: IntValue(1),
123+
b: StringValue("aoeu"),
124+
}, {
125+
name: "Int-6",
126+
a: IntValue(1),
127+
b: BooleanValue(true),
128+
}, {
129+
name: "Int-7",
130+
a: IntValue(1),
131+
b: Value{ListValue: &List{}},
132+
}, {
133+
name: "Int-8",
134+
a: IntValue(1),
135+
b: Value{MapValue: &Map{}},
136+
}, {
137+
name: "Int-9",
138+
a: IntValue(1),
139+
b: Value{Null: true},
140+
}, {
141+
name: "String-1",
142+
a: StringValue("b-12"),
143+
b: StringValue("b-9"),
144+
}, {
145+
name: "String-2",
146+
a: StringValue("folate"),
147+
b: StringValue("folate"),
148+
eq: true,
149+
}, {
150+
name: "String-3",
151+
a: StringValue("folate"),
152+
b: BooleanValue(true),
153+
}, {
154+
name: "String-4",
155+
a: StringValue("folate"),
156+
b: Value{ListValue: &List{}},
157+
}, {
158+
name: "String-5",
159+
a: StringValue("folate"),
160+
b: Value{MapValue: &Map{}},
161+
}, {
162+
name: "String-6",
163+
a: StringValue("folate"),
164+
b: Value{Null: true},
165+
}, {
166+
name: "Bool-1",
167+
a: BooleanValue(false),
168+
b: BooleanValue(true),
169+
}, {
170+
name: "Bool-2",
171+
a: BooleanValue(false),
172+
b: BooleanValue(false),
173+
eq: true,
174+
}, {
175+
name: "Bool-3",
176+
a: BooleanValue(true),
177+
b: BooleanValue(true),
178+
eq: true,
179+
}, {
180+
name: "Bool-4",
181+
a: BooleanValue(false),
182+
b: Value{ListValue: &List{}},
183+
}, {
184+
name: "Bool-5",
185+
a: BooleanValue(false),
186+
b: Value{MapValue: &Map{}},
187+
}, {
188+
name: "Bool-6",
189+
a: BooleanValue(false),
190+
b: Value{Null: true},
191+
}, {
192+
name: "List-1",
193+
a: Value{ListValue: &List{}},
194+
b: Value{ListValue: &List{}},
195+
eq: true,
196+
}, {
197+
name: "List-2",
198+
a: Value{ListValue: &List{}},
199+
b: Value{MapValue: &Map{}},
200+
}, {
201+
name: "List-3",
202+
a: Value{ListValue: &List{}},
203+
b: Value{Null: true},
204+
}, {
205+
name: "Map-1",
206+
a: Value{MapValue: &Map{}},
207+
b: Value{MapValue: &Map{}},
208+
eq: true,
209+
}, {
210+
name: "Map-2",
211+
a: Value{MapValue: &Map{}},
212+
b: Value{Null: true},
213+
},
214+
}
215+
216+
for i := range table {
217+
i := i
218+
t.Run(table[i].name, func(t *testing.T) {
219+
tt := table[i]
220+
if tt.eq {
221+
if tt.a.Less(tt.b) {
222+
t.Errorf("oops, a < b: %#v, %#v", tt.a, tt.b)
223+
}
224+
} else {
225+
if !tt.a.Less(tt.b) {
226+
t.Errorf("oops, a >= b: %#v, %#v", tt.a, tt.b)
227+
}
228+
}
229+
if tt.b.Less(tt.b) {
230+
t.Errorf("oops, b < a: %#v, %#v", tt.b, tt.a)
231+
}
232+
})
233+
}
234+
235+
}

value/value.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,18 @@ type Value struct {
3939
func (v Value) Less(rhs Value) bool {
4040
if v.FloatValue != nil {
4141
if rhs.FloatValue == nil {
42+
// Extra: compare floats and ints numerically.
43+
if rhs.IntValue != nil {
44+
return float64(*v.FloatValue) < float64(*rhs.IntValue)
45+
}
4246
return true
4347
}
4448
return *v.FloatValue < *rhs.FloatValue
4549
} else if rhs.FloatValue != nil {
50+
// Extra: compare floats and ints numerically.
51+
if v.IntValue != nil {
52+
return float64(*v.IntValue) < float64(*rhs.FloatValue)
53+
}
4654
return false
4755
}
4856

@@ -68,7 +76,10 @@ func (v Value) Less(rhs Value) bool {
6876
if rhs.BooleanValue == nil {
6977
return true
7078
}
71-
return false
79+
if *v.BooleanValue == *rhs.BooleanValue {
80+
return false
81+
}
82+
return *v.BooleanValue == false
7283
} else if rhs.BooleanValue != nil {
7384
return false
7485
}

0 commit comments

Comments
 (0)