forked from ahmetb/go-linq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup_test.go
83 lines (66 loc) · 1.11 KB
/
setup_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
package linq
import "testing"
import "fmt"
type foo struct {
f1 int
f2 bool
f3 string
}
func (f foo) Iterate() Iterator {
i := 0
return func() (item interface{}, ok bool) {
switch i {
case 0:
item = f.f1
ok = true
case 1:
item = f.f2
ok = true
case 2:
item = f.f3
ok = true
default:
ok = false
}
i++
return
}
}
func (f foo) CompareTo(c Comparable) int {
a, b := f.f1, c.(foo).f1
if a < b {
return -1
} else if a > b {
return 1
}
return 0
}
func toSlice(q Query) (result []interface{}) {
next := q.Iterate()
for item, ok := next(); ok; item, ok = next() {
result = append(result, item)
}
return
}
func validateQuery(q Query, output []interface{}) bool {
next := q.Iterate()
for _, oitem := range output {
qitem, _ := next()
if oitem != qitem {
return false
}
}
_, ok := next()
_, ok2 := next()
return !(ok || ok2)
}
func mustPanicWithError(t *testing.T, expectedErr string, f func()) {
defer func() {
r := recover()
err := fmt.Sprintf("%s", r)
if err != expectedErr {
t.Fatalf("got=[%v] expected=[%v]", err, expectedErr)
}
}()
f()
}