This repository was archived by the owner on Jan 28, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 109
/
Copy pathlogic_test.go
92 lines (82 loc) · 2.07 KB
/
logic_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
package expression
import (
"testing"
"github.com/src-d/go-mysql-server/sql"
"github.com/stretchr/testify/require"
)
func TestAnd(t *testing.T) {
var testCases = []struct {
name string
left, right interface{}
expected interface{}
}{
{"left is true, right is false", true, false, false},
{"left is true, right is null", true, nil, nil},
{"left is false, right is true", false, true, false},
{"left is null, right is true", nil, true, nil},
{"left is false, right is null", false, nil, false},
{"left is null, right is false", nil, false, false},
{"both true", true, true, true},
{"both false", false, false, false},
{"both nil", nil, nil, nil},
}
for _, tt := range testCases {
t.Run(tt.name, func(t *testing.T) {
require := require.New(t)
result, err := NewAnd(
NewLiteral(tt.left, sql.Boolean),
NewLiteral(tt.right, sql.Boolean),
).Eval(sql.NewEmptyContext(), sql.NewRow())
require.NoError(err)
require.Equal(tt.expected, result)
})
}
}
func TestOr(t *testing.T) {
var testCases = []struct {
name string
left, right interface{}
expected interface{}
}{
{"left is true, right is false", true, false, true},
{"left is null, right is not", nil, true, true},
{"left is false, right is true", false, true, true},
{"right is null, left is not", true, nil, true},
{"both true", true, true, true},
{"both false", false, false, false},
{"both null", nil, nil, nil},
}
for _, tt := range testCases {
t.Run(tt.name, func(t *testing.T) {
require := require.New(t)
result, err := NewOr(
NewLiteral(tt.left, sql.Boolean),
NewLiteral(tt.right, sql.Boolean),
).Eval(sql.NewEmptyContext(), sql.NewRow())
require.NoError(err)
require.Equal(tt.expected, result)
})
}
}
func TestJoinAnd(t *testing.T) {
require := require.New(t)
require.Nil(JoinAnd())
require.Equal(
NewNot(nil),
JoinAnd(NewNot(nil)),
)
require.Equal(
NewAnd(
NewAnd(
NewIsNull(nil),
NewEquals(nil, nil),
),
NewNot(nil),
),
JoinAnd(
NewIsNull(nil),
NewEquals(nil, nil),
NewNot(nil),
),
)
}