123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- package tester
- import (
- "fmt"
- "testing"
- "github.com/gohxs/hqi"
- )
- // Something to test implementation can be used in test packages for drivers
- type Model struct {
- Name string
- Value int
- }
- var (
- Data = []Model{
- {"aaa", 1},
- {"aaa", 2},
- {"bbb", 3},
- {"bbb", 4},
- {"ccc", 5},
- {"ccc", 6},
- }
- )
- func PrepareHQI(t Testing, dc func() hqi.Driver) hqi.Query {
- q := hqi.NewQuery(dc())
- //e := &ErrChecker{t}
- var err error
- err = q.Schema(Model{})
- if err != nil {
- panic(err)
- }
- err = q.Insert(Data)
- if err != nil {
- panic(err)
- }
- err = q.Insert(Data)
- if err != nil {
- panic(err)
- }
- // Needs drop delete All
- //e.MCheckEQ("Creating schema", q.Schema(Model{}), nil)
- // Double data
- // e.MCheckEQ(fmt.Sprint("Inserting data ", Data), q.Insert(Data), nil)
- // e.MCheckEQ(fmt.Sprint("Inserting data AGAIN", Data), q.Insert(Data), nil)
- return q
- }
- //Tester testing implementation on drivers
- func Test(t *testing.T, dc func() hqi.Driver) {
- {
- q := hqi.NewQuery(dc())
- e := &ErrChecker{t}
- // Needs drop delete All
- e.MCheckEQ("Creating schema", q.Schema(Model{}), nil)
- // Double data
- e.MCheckEQ(fmt.Sprint("Inserting data ", Data), q.Insert(Data), nil)
- e.MCheckEQ(fmt.Sprint("Inserting data AGAIN", Data), q.Insert(Data), nil)
- }
- // Initialize data
- t.Run("Match", func(t *testing.T) {
- q := PrepareHQI(t, dc)
- var res []Model
- e := &ErrChecker{t}
- q.Find(`{"Name":"aaa"}`).List(&res)
- e.CheckEQ(fmt.Sprint(res), "[{aaa 1} {aaa 2} {aaa 1} {aaa 2}]")
- })
- t.Run("Skip&Max", func(t *testing.T) {
- q := PrepareHQI(t, dc)
- var res []Model
- e := &ErrChecker{t}
- q.Find().Skip(4).Max(2).List(&res)
- e.CheckEQ(fmt.Sprint(res), "[{ccc 5} {ccc 6}]")
- })
- t.Run("Sort(name)&Max", func(t *testing.T) {
- q := PrepareHQI(t, dc)
- var res []Model
- e := &ErrChecker{t}
- q.Find().Sort("-Name", "Value").Max(2).List(&res)
- e.CheckEQ(fmt.Sprint(res), "[{ccc 5} {ccc 5}]")
- })
- t.Run("Sort(-Name,-Value)&Max", func(t *testing.T) {
- q := PrepareHQI(t, dc)
- var res []Model
- e := &ErrChecker{t}
- q.Find().Sort("-Name", "-Value").Max(2).List(&res)
- e.CheckEQ(fmt.Sprint(res), "[{ccc 6} {ccc 6}]")
- })
- t.Run("Remove", func(t *testing.T) {
- q := PrepareHQI(t, dc)
- var res []Model
- e := &ErrChecker{t}
- var err error
- err = q.Find(hqi.M{"Name": "ccc", "Value": 6}).Delete()
- e.CheckEQ(err, nil)
- q.Find(hqi.M{"Name": "ccc"}).List(&res)
- e.CheckEQ(fmt.Sprint(res), "[{ccc 5} {ccc 5}]")
- })
- t.Run("RemoveOR", func(t *testing.T) {
- q := PrepareHQI(t, dc)
- var res []Model
- e := &ErrChecker{t}
- var err error
- // Remove all bbb 6 or all aaa
- err = q.Find(hqi.M{"Name": "bbb", "Value": 4}, hqi.M{"Name": "aaa"}, hqi.M{"Name": "ccc", "Value": 6}).Delete()
- e.CheckEQ(err, nil)
- q.Find().Sort("Name", "Value").List(&res)
- e.CheckEQ(fmt.Sprint(res), "[{bbb 3} {bbb 3} {ccc 5} {ccc 5}]")
- })
- }
- // Benchmark
- func Benchmark(b *testing.B, getDriver func() hqi.Driver) {
- q := PrepareHQI(b, getDriver)
- b.Run("Match", func(b *testing.B) {
- for i := 0; i < b.N; i++ {
- var res []Model
- q.Find(hqi.M{"Name": "aaa"}).
- List(&res)
- }
- })
- b.Run("Insert&Delete", func(b *testing.B) {
- for i := 0; i < b.N; i++ {
- q.Insert(Model{Name: "zzz", Value: 99})
- q.Find(hqi.M{"Name": "zzz"}).Delete()
- }
- })
- }
|