-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbitwise_test.go
More file actions
115 lines (97 loc) · 2.57 KB
/
Copy pathbitwise_test.go
File metadata and controls
115 lines (97 loc) · 2.57 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package monq_test
import (
"reflect"
"testing"
"go.mongodb.org/mongo-driver/v2/bson"
"github.com/behzadsh/monq"
)
func TestBitwiseOperators(t *testing.T) {
tests := []struct {
name string
got bson.D
field monq.FieldPath
op string
mask any
}{
{
name: "BitsAllClear with a numeric mask",
got: monq.BitsAllClear("flags", 6),
field: "flags",
op: "$bitsAllClear",
mask: 6,
},
{
name: "BitsAllSet with a position array",
got: monq.BitsAllSet("flags", bson.A{1, 5}),
field: "flags",
op: "$bitsAllSet",
mask: bson.A{1, 5},
},
{
name: "BitsAnyClear with a numeric mask",
got: monq.BitsAnyClear("flags", 6),
field: "flags",
op: "$bitsAnyClear",
mask: 6,
},
{
name: "BitsAnySet with a position array",
got: monq.BitsAnySet("perms.bits", bson.A{1, 5}),
field: "perms.bits",
op: "$bitsAnySet",
mask: bson.A{1, 5},
},
{
name: "BitsAllSet with binary data",
got: monq.BitsAllSet("flags", bson.Binary{Subtype: 0x00, Data: []byte{0x30}}),
field: "flags",
op: "$bitsAllSet",
mask: bson.Binary{Subtype: 0x00, Data: []byte{0x30}},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.got[0].Key != string(tt.field) {
t.Fatalf("field = %q, want %q", tt.got[0].Key, tt.field)
}
inner, ok := tt.got[0].Value.(bson.D)
if !ok || inner[0].Key != tt.op {
t.Fatalf("got %v, want a %s operator document", tt.got, tt.op)
}
if !reflect.DeepEqual(inner[0].Value, tt.mask) {
t.Fatalf("mask = %v, want %v", inner[0].Value, tt.mask)
}
})
}
}
func TestBitwiseOperatorsComposeWithNot(t *testing.T) {
got := monq.Not(monq.BitsAnySet("flags", 6))
outer, ok := got[0].Value.(bson.D)
if !ok || got[0].Key != "flags" || outer[0].Key != "$not" {
t.Fatalf("Not() = %v, want a $not operator document on flags", got)
}
inner, ok := outer[0].Value.(bson.D)
if !ok || inner[0].Key != "$bitsAnySet" {
t.Fatalf("Not() inner operator = %v, want $bitsAnySet", outer[0].Value)
}
}
func ExampleBitsAllClear() {
filter := monq.BitsAllClear("flags", 6)
printFilter(filter)
// Output: {"flags":{"$bitsAllClear":6}}
}
func ExampleBitsAllSet() {
filter := monq.BitsAllSet("flags", bson.A{1, 5})
printFilter(filter)
// Output: {"flags":{"$bitsAllSet":[1,5]}}
}
func ExampleBitsAnyClear() {
filter := monq.BitsAnyClear("flags", 6)
printFilter(filter)
// Output: {"flags":{"$bitsAnyClear":6}}
}
func ExampleBitsAnySet() {
filter := monq.BitsAnySet("flags", bson.A{1, 5})
printFilter(filter)
// Output: {"flags":{"$bitsAnySet":[1,5]}}
}