in pkg/index/testcases/duration.go [59:300]
func RunDuration(t *testing.T, data map[int]posting.List, store SimpleStore) {
tester := assert.New(t)
is := require.New(t)
tests := []struct {
name string
want []int
args args
}{
{
name: "sort in asc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_ASC,
},
want: []int{50, 200, 500, 1000, 2000},
},
{
name: "sort in desc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_DESC,
},
want: []int{2000, 1000, 500, 200, 50},
},
{
name: "scan in (lower, upper) and sort in asc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_ASC,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(50),
Upper: convert.Int64ToBytes(2000),
},
},
want: []int{200, 500, 1000},
},
{
name: "scan in (lower, upper) and sort in desc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_DESC,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(50),
Upper: convert.Int64ToBytes(2000),
},
},
want: []int{1000, 500, 200},
},
{
name: "scan in [lower, upper] and sort in asc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_ASC,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(200),
IncludesLower: true,
Upper: convert.Int64ToBytes(1000),
IncludesUpper: true,
},
},
want: []int{200, 500, 1000},
},
{
name: "scan in [lower, upper] and sort in desc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_DESC,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(200),
IncludesLower: true,
Upper: convert.Int64ToBytes(1000),
IncludesUpper: true,
},
},
want: []int{1000, 500, 200},
},
{
name: "scan in [lower, undefined) and sort in asc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_ASC,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(200),
IncludesLower: true,
},
},
want: []int{200, 500, 1000, 2000},
},
{
name: "scan in [lower, undefined) and sort in desc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_DESC,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(200),
IncludesLower: true,
},
},
want: []int{2000, 1000, 500, 200},
},
{
name: "scan in (undefined, upper] and sort in asc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_ASC,
termRange: index.RangeOpts{
Upper: convert.Int64ToBytes(1000),
IncludesUpper: true,
},
},
want: []int{50, 200, 500, 1000},
},
{
name: "scan in (undefined, upper] and sort in desc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_DESC,
termRange: index.RangeOpts{
Upper: convert.Int64ToBytes(1000),
IncludesUpper: true,
},
},
want: []int{1000, 500, 200, 50},
},
{
name: "scan splice in (lower, upper) and sort in asc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_ASC,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(50 + 100),
Upper: convert.Int64ToBytes(2000 - 100),
},
},
want: []int{200, 500, 1000},
},
{
name: "scan splice in (lower, upper) and sort in desc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_DESC,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(50 + 100),
Upper: convert.Int64ToBytes(2000 - 100),
},
},
want: []int{1000, 500, 200},
},
{
name: "scan splice in [lower, upper] and sort in asc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_ASC,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(50 + 100),
IncludesLower: true,
Upper: convert.Int64ToBytes(2000 - 100),
IncludesUpper: true,
},
},
want: []int{200, 500, 1000},
},
{
name: "scan splice in [lower, upper] and sort in desc order",
args: args{
fieldKey: duration,
orderType: modelv1.Sort_SORT_DESC,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(50 + 100),
IncludesLower: true,
Upper: convert.Int64ToBytes(2000 - 100),
IncludesUpper: true,
},
},
want: []int{1000, 500, 200},
},
{
name: "no field key",
args: args{},
},
{
name: "unknown field key",
args: args{
fieldKey: index.FieldKey{
IndexRuleID: 0,
},
},
},
{
name: "default order",
args: args{
fieldKey: duration,
},
want: []int{50, 200, 500, 1000, 2000},
},
{
name: "invalid range",
args: args{
fieldKey: duration,
termRange: index.RangeOpts{
Lower: convert.Int64ToBytes(100),
Upper: convert.Int64ToBytes(50),
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
iter, err := store.Iterator(tt.args.fieldKey, tt.args.termRange, tt.args.orderType)
is.NoError(err)
if iter == nil {
tester.Empty(tt.want)
return
}
defer func() {
tester.NoError(iter.Close())
for i := 0; i < 10; i++ {
is.False(iter.Next())
}
}()
is.NotNil(iter)
got := make([]result, 0)
for iter.Next() {
got = append(got, result{
key: int(convert.BytesToInt64(iter.Val().Term)),
items: toArray(iter.Val().Value),
})
}
for i := 0; i < 10; i++ {
is.False(iter.Next())
}
wants := make([]result, 0, len(tt.want))
for _, w := range tt.want {
wants = append(wants, result{
key: w,
items: toArray(data[w]),
})
}
tester.Equal(wants, got, tt.name)
})
}
}