Skip to content

Commit 7e9b8c5

Browse files
committed
array test
1 parent c16161e commit 7e9b8c5

File tree

6 files changed

+199
-49
lines changed

6 files changed

+199
-49
lines changed

go.mod

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
module github.com/liu-cn/json-filter
22

3-
go 1.17
4-
5-
require github.com/liu-cn/pkg v0.0.0-20221218135636-865c46b102ea
3+
go 1.17

test/array_test.go

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"github.com/liu-cn/json-filter/filter"
7+
"testing"
8+
)
9+
10+
type (
11+
Tag struct {
12+
Name string `json:"name,select($any)"`
13+
Icon string `json:"icon,omit($any)"`
14+
}
15+
16+
Array struct {
17+
A [1]Tag `json:"A,select(A|all),omit(A|all)"`
18+
B [2]Tag `json:"B,select(B|all),omit(B|all)"`
19+
C [3]Tag `json:"C,select(C|all),omit(C|all)"`
20+
AP *[1]Tag `json:"AP,select(AP|all),omit(AP|all)"`
21+
BP *[2]Tag `json:"BP,select(BP|all),omit(BP|all)"`
22+
CP *[3]Tag `json:"CP,select(CP|all),omit(CP|all)"`
23+
APP *[1]*Tag `json:"APP,select(APP|all),omit(APP|all)"`
24+
BPP *[2]*Tag `json:"BPP,select(BPP|all),omit(BPP|all)"`
25+
CPP *[3]*Tag `json:"CPP,select(CPP|all),omit(CPP|all)"`
26+
}
27+
)
28+
29+
var arrayWants = []string{
30+
"A",
31+
"B",
32+
"C",
33+
"AP",
34+
"BP",
35+
"CP",
36+
"APP",
37+
"BPP",
38+
"CPP",
39+
}
40+
41+
func getKeys(jsonStr string) string {
42+
maps := make(map[string]interface{})
43+
err := json.Unmarshal([]byte(jsonStr), &maps)
44+
if err != nil {
45+
panic(err)
46+
}
47+
keys := ""
48+
for k := range maps {
49+
keys += k + ","
50+
}
51+
return keys
52+
}
53+
54+
func newArray() *Array {
55+
56+
tag := Tag{Name: "tag"}
57+
tags1 := [1]Tag{tag}
58+
tags2 := [2]Tag{tag, tag}
59+
tags3 := [3]Tag{tag, tag, tag}
60+
tags1p := &[1]Tag{tag}
61+
tags2p := &[2]Tag{tag, tag}
62+
tags3p := &[3]Tag{tag, tag, tag}
63+
tags1pp := &[1]*Tag{&tag}
64+
tags2pp := &[2]*Tag{&tag, &tag}
65+
tags3pp := &[3]*Tag{&tag, &tag, &tag}
66+
67+
arr := &Array{
68+
A: tags1,
69+
B: tags2,
70+
C: tags3,
71+
AP: tags1p,
72+
BP: tags2p,
73+
CP: tags3p,
74+
APP: tags1pp,
75+
BPP: tags2pp,
76+
CPP: tags3pp,
77+
}
78+
return arr
79+
}
80+
81+
func TestSelectArray(t *testing.T) {
82+
for _, want := range arrayWants {
83+
fmt.Println(want, ":", filter.Select(want, newArray()))
84+
}
85+
//=== RUN TestSelectArray
86+
//A : {"A":[{"name":"tag"}]}
87+
//B : {"B":[{"name":"tag"},{"name":"tag"}]}
88+
//C : {"C":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
89+
//AP : {"AP":[{"name":"tag"}]}
90+
//BP : {"BP":[{"name":"tag"},{"name":"tag"}]}
91+
//CP : {"CP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
92+
//APP : {"APP":[{"name":"tag"}]}
93+
//BPP : {"BPP":[{"name":"tag"},{"name":"tag"}]}
94+
//CPP : {"CPP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
95+
//--- PASS: TestSelectArray (0.00s)
96+
//PASS
97+
98+
}
99+
100+
func TestOmitArray(t *testing.T) {
101+
for _, want := range arrayWants {
102+
omit := filter.Omit(want, newArray())
103+
fmt.Println(want, ":", "keys:", getKeys(mustJson(omit)), omit)
104+
}
105+
//=== RUN TestOmitArray
106+
//A : keys: CP,CPP,AP,APP,B,BP,BPP,C, {"AP":[{"name":"tag"}],"APP":[{"name":"tag"}],"B":[{"name":"tag"},{"name":"tag"}],"BP":[{"name":"tag"},{"name":"tag"}],"BPP":[{"name":"tag"},{"name":"tag"}],"C":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CPP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
107+
//B : keys: BPP,C,CP,CPP,A,AP,APP,BP, {"A":[{"name":"tag"}],"AP":[{"name":"tag"}],"APP":[{"name":"tag"}],"BP":[{"name":"tag"},{"name":"tag"}],"BPP":[{"name":"tag"},{"name":"tag"}],"C":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CPP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
108+
//C : keys: A,AP,APP,B,BP,BPP,CP,CPP, {"A":[{"name":"tag"}],"AP":[{"name":"tag"}],"APP":[{"name":"tag"}],"B":[{"name":"tag"},{"name":"tag"}],"BP":[{"name":"tag"},{"name":"tag"}],"BPP":[{"name":"tag"},{"name":"tag"}],"CP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CPP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
109+
//AP : keys: CPP,A,APP,B,BP,BPP,C,CP, {"A":[{"name":"tag"}],"APP":[{"name":"tag"}],"B":[{"name":"tag"},{"name":"tag"}],"BP":[{"name":"tag"},{"name":"tag"}],"BPP":[{"name":"tag"},{"name":"tag"}],"C":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CPP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
110+
//BP : keys: APP,B,BPP,C,CP,CPP,A,AP, {"A":[{"name":"tag"}],"AP":[{"name":"tag"}],"APP":[{"name":"tag"}],"B":[{"name":"tag"},{"name":"tag"}],"BPP":[{"name":"tag"},{"name":"tag"}],"C":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CPP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
111+
//CP : keys: CPP,A,AP,APP,B,BP,BPP,C, {"A":[{"name":"tag"}],"AP":[{"name":"tag"}],"APP":[{"name":"tag"}],"B":[{"name":"tag"},{"name":"tag"}],"BP":[{"name":"tag"},{"name":"tag"}],"BPP":[{"name":"tag"},{"name":"tag"}],"C":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CPP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
112+
//APP : keys: BP,BPP,C,CP,CPP,A,AP,B, {"A":[{"name":"tag"}],"AP":[{"name":"tag"}],"B":[{"name":"tag"},{"name":"tag"}],"BP":[{"name":"tag"},{"name":"tag"}],"BPP":[{"name":"tag"},{"name":"tag"}],"C":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CPP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
113+
//BPP : keys: A,AP,APP,B,BP,C,CP,CPP, {"A":[{"name":"tag"}],"AP":[{"name":"tag"}],"APP":[{"name":"tag"}],"B":[{"name":"tag"},{"name":"tag"}],"BP":[{"name":"tag"},{"name":"tag"}],"C":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CPP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
114+
//CPP : keys: BPP,C,CP,A,AP,APP,B,BP, {"A":[{"name":"tag"}],"AP":[{"name":"tag"}],"APP":[{"name":"tag"}],"B":[{"name":"tag"},{"name":"tag"}],"BP":[{"name":"tag"},{"name":"tag"}],"BPP":[{"name":"tag"},{"name":"tag"}],"C":[{"name":"tag"},{"name":"tag"},{"name":"tag"}],"CP":[{"name":"tag"},{"name":"tag"},{"name":"tag"}]}
115+
//--- PASS: TestOmitArray (0.00s)
116+
//PASS
117+
118+
}
119+
120+
func TestEQ(t *testing.T) {
121+
122+
t.Run("select_eq", func(t *testing.T) {
123+
for _, want := range arrayWants {
124+
arr := newArray()
125+
ptr := mustJson(filter.Select(want, arr))
126+
val := mustJson(filter.Select(want, *arr))
127+
if ptr != val {
128+
t.Errorf("select传递指针和值结果不相等,want%s,ptr:%s,val:%s", want, ptr, val)
129+
}
130+
}
131+
})
132+
t.Run("omit_eq", func(t *testing.T) {
133+
for _, want := range arrayWants {
134+
arr := newArray()
135+
ptr := mustJson(filter.Omit(want, arr))
136+
val := mustJson(filter.Omit(want, *arr))
137+
if ptr != val {
138+
t.Errorf("omit传递指针和值结果不相等,want%s,ptr:%s,val:%s", want, ptr, val)
139+
}
140+
}
141+
})
142+
//=== RUN TestEQ
143+
//--- PASS: TestEQ (0.00s)
144+
//=== RUN TestEQ/select_eq
145+
//--- PASS: TestEQ/select_eq (0.00s)
146+
//=== RUN TestEQ/omit_eq
147+
//--- PASS: TestEQ/omit_eq (0.00s)
148+
//PASS
149+
150+
}

test/bench.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"time"
6+
)
7+
8+
func TimeAndRes(fn func() interface{}, runNum int) Info {
9+
now := time.Now()
10+
var res interface{}
11+
for i := 0; i < runNum; i++ {
12+
v := fn()
13+
if i == runNum-1 {
14+
res = v
15+
}
16+
}
17+
return Info{
18+
start: now,
19+
end: time.Now(),
20+
LastRes: res,
21+
}
22+
}
23+
24+
type Info struct {
25+
start time.Time
26+
end time.Time
27+
LastRes interface{}
28+
}
29+
30+
func (i *Info) Print(str ...interface{}) {
31+
s := ""
32+
for _, v := range str {
33+
s += fmt.Sprintf("%v", v)
34+
}
35+
36+
fmt.Println(s, i.end.Sub(i.start))
37+
}

test/cache_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ package main
33
import (
44
"encoding/json"
55
"github.com/liu-cn/json-filter/filter"
6-
"github.com/liu-cn/pkg/benchmark"
76
)
87

98
func getCacheVal(s string, el interface{}, isSelect bool) string {
109
st := ""
11-
benchmark.TimeAndRes(func() interface{} {
10+
TimeAndRes(func() interface{} {
1211
if isSelect {
1312
ss := filter.Select(s, el)
1413
marshal, err := json.Marshal(ss)

test/main.go

Lines changed: 7 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,9 @@ func mustJson(v interface{}) string {
1414
return string(marshal)
1515
}
1616

17-
type Uu struct {
18-
Name string `json:"name"`
19-
}
20-
2117
type UID [3]byte
2218
type UIDs []byte
2319

24-
//func (u UID) String() string {
25-
// return "uid"
26-
//}
27-
2820
func (u UID) MarshalText() (text []byte, err error) {
2921
return []byte("uid"), nil
3022
}
@@ -33,16 +25,11 @@ type Us struct {
3325
//Name string `json:"name,select(all),omit(h)"`
3426
B []byte `json:"b,select(all),omit(h)"`
3527
EmptySlice []string `json:"empty_slice,select(all),omit(h)"`
36-
37-
//H struct{} `json:"h,select(h)"`
38-
//Uu Uu `json:"uu,select(h),omit(h)"`
39-
//S []string `json:"s,select(h)"`
40-
41-
BB [3]byte `json:"bb,select(all)"`
42-
Avatar []byte `json:"avatar,select(all),func(GetAvatar)"`
43-
Avatar2 []byte `json:"avatar2,select(all),func(GetAvatar2)"`
44-
UID UID `json:"uid,select(all)"`
45-
UIDs UIDs `json:"uids,select(all)"`
28+
BB [3]byte `json:"bb,select(all)"`
29+
Avatar []byte `json:"avatar,select(all),func(GetAvatar)"`
30+
Avatar2 []byte `json:"avatar2,select(all),func(GetAvatar2)"`
31+
UID UID `json:"uid,select(all)"`
32+
UIDs UIDs `json:"uids,select(all)"`
4633
}
4734

4835
func (u Us) GetAvatar() string {
@@ -52,17 +39,6 @@ func (u *Us) GetAvatar2() string {
5239
return string(u.Avatar[:]) + ".jpg"
5340
}
5441

55-
func newUs() Us {
56-
return Us{
57-
//Name: "1",
58-
//H: struct{}{},
59-
//Uu: Uu{
60-
// Name: "uu",
61-
//},
62-
//S: []string{"1", "2"},
63-
}
64-
}
65-
6642
func main() {
6743
//var bb = []byte(`{"a":"1"}`)
6844
u := Us{
@@ -76,18 +52,8 @@ func main() {
7652
}
7753
list := []Us{u, u, u}
7854
fmt.Println(filter.Omit("1", &list))
79-
//return
80-
fmt.Println(mustJson(u))
81-
//fmt.Println(filter.Omit("h", u))
82-
//fmt.Println(filter.Select("all", u))
83-
//fmt.Println(filter.Omit("all", u))
84-
//fmt.Println(filter.Select("all", &u))
85-
//fmt.Println(filter.Omit("all", &u))
86-
//TestSlice()
87-
//TestMap()
88-
//TestU()
89-
90-
ExampleOmit()
55+
//fmt.Println(mustJson(u))
56+
//ExampleOmit()
9157
}
9258

9359
func ExampleOmit() {

test/slice.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@ func TestSlice() {
5353
Test: slice,
5454
}
5555

56-
fmt.Println("slice select:", filter.SelectMarshal("test", test).MustJSON())
56+
fmt.Println("slice select:", filter.Select("test", test))
5757
//{"slice_p":["值"],"slices":["值"],"slices_pp":["值"]}
58-
fmt.Println("slice omit:", filter.OmitMarshal("test", test).MustJSON())
58+
fmt.Println("slice omit:", filter.Omit("test", test))
5959
//{"slice_p":["值"],"slices":["值"],"slices_pp":["值"]}
6060

6161
marshal, _ := json.Marshal(test)
6262
fmt.Println("原生slice json 解析", string(marshal))
6363
//{"slices":["值"],"test":["值"],"slice_p":["值"],"slices_pp":["值"]}
6464

65-
fmt.Println(filter.SelectMarshal("test", test))
65+
fmt.Println(filter.Select("test", test))
6666
}

0 commit comments

Comments
 (0)