github.com/attic-labs/noms@v0.0.0-20210827224422-e5fa29d95e8b/samples/go/nomdex/query_range_test.go (about) 1 // Copyright 2016 Attic Labs, Inc. All rights reserved. 2 // Licensed under the Apache License, version 2.0: 3 // http://www.apache.org/licenses/LICENSE-2.0 4 5 package main 6 7 import ( 8 "testing" 9 10 "github.com/attic-labs/noms/go/types" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 const nilHolder = -1000000 15 16 var ( 17 r1 = qr(2, true, 5, true) 18 r2 = qr(0, true, 8, true) 19 r3 = qr(0, true, 3, true) 20 r4 = qr(3, true, 8, true) 21 r5 = qr(0, true, 1, true) 22 r6 = qr(6, true, 10, true) 23 r7 = qr(nilHolder, true, 10, true) 24 r8 = qr(3, true, nilHolder, true) 25 r10 = qr(2, true, 5, false) 26 r11 = qr(5, true, 10, true) 27 ) 28 29 func newBound(i int, include bool, infinity int) bound { 30 var v types.Value 31 if i != nilHolder { 32 v = types.Number(i) 33 } 34 return bound{value: v, include: include, infinity: int8(infinity)} 35 } 36 37 func qr(lower int, lowerIncl bool, upper int, upperIncl bool) queryRange { 38 lowerInf := 0 39 if lower == nilHolder { 40 lowerInf = -1 41 } 42 upperInf := 0 43 if upper == nilHolder { 44 upperInf = 1 45 } 46 return queryRange{newBound(lower, lowerIncl, lowerInf), newBound(upper, upperIncl, upperInf)} 47 } 48 49 func TestRangeIntersects(t *testing.T) { 50 assert := assert.New(t) 51 52 assert.True(r1.intersects(r2)) 53 assert.True(r1.intersects(r3)) 54 assert.True(r1.intersects(r4)) 55 assert.True(r2.intersects(r1)) 56 assert.True(r1.intersects(r7)) 57 assert.True(r1.intersects(r8)) 58 assert.True(r3.intersects(r4)) 59 assert.True(r3.intersects(r4)) 60 61 assert.False(r1.intersects(r5)) 62 assert.False(r1.intersects(r6)) 63 assert.False(r10.intersects(r11)) 64 } 65 66 func TestRangeAnd(t *testing.T) { 67 assert := assert.New(t) 68 69 assert.Empty(r1.and(r5)) 70 assert.Empty(r1.and(r6)) 71 72 assert.Equal(r1, r1.and(r2)[0]) 73 assert.Equal(r1, r2.and(r1)[0]) 74 75 expected := qr(3, true, 5, true) 76 assert.Equal(expected, r1.and(r4)[0]) 77 } 78 79 func TestRangeOr(t *testing.T) { 80 assert := assert.New(t) 81 82 assert.Equal(r2, r1.or(r2)[0]) 83 84 expected := qr(0, true, 5, true) 85 assert.Equal(expected, r1.or(r3)[0]) 86 87 expectedSlice := queryRangeSlice{r5, r1} 88 assert.Equal(expectedSlice, r1.or(r5)) 89 assert.Equal(expectedSlice, r5.or(r1)) 90 } 91 92 func TestIsLessThan(t *testing.T) { 93 assert := assert.New(t) 94 95 assert.True(newBound(1, true, 0).isLessThanOrEqual(newBound(2, true, 0))) 96 assert.False(newBound(2, true, 0).isLessThanOrEqual(newBound(1, true, 0))) 97 assert.True(newBound(1, true, 0).isLessThanOrEqual(newBound(1, true, 0))) 98 99 assert.True(newBound(1, false, 0).isLessThanOrEqual(newBound(2, false, 0))) 100 assert.False(newBound(2, false, 0).isLessThanOrEqual(newBound(1, false, 0))) 101 assert.True(newBound(1, false, 0).isLessThanOrEqual(newBound(1, false, 0))) 102 103 assert.False(newBound(1, true, 0).isLessThanOrEqual(newBound(1, false, 0))) 104 assert.True(newBound(1, false, 0).isLessThanOrEqual(newBound(1, true, 0))) 105 106 assert.True(newBound(nilHolder, true, -1).isLessThanOrEqual(newBound(1, true, 0))) 107 assert.False(newBound(1, false, 0).isLessThanOrEqual(newBound(nilHolder, true, -1))) 108 } 109 110 func TestIsGreaterThan(t *testing.T) { 111 assert := assert.New(t) 112 113 assert.True(newBound(2, true, 0).isGreaterThanOrEqual(newBound(1, true, 0))) 114 assert.False(newBound(1, true, 0).isGreaterThanOrEqual(newBound(2, true, 0))) 115 assert.True(newBound(1, true, 0).isGreaterThanOrEqual(newBound(1, true, 0))) 116 117 assert.True(newBound(2, false, 0).isGreaterThanOrEqual(newBound(1, false, 0))) 118 assert.False(newBound(1, false, 0).isGreaterThanOrEqual(newBound(2, false, 0))) 119 assert.True(newBound(1, false, 0).isGreaterThanOrEqual(newBound(1, false, 0))) 120 121 assert.True(newBound(1, true, 0).isGreaterThanOrEqual(newBound(1, false, 0))) 122 assert.False(newBound(1, false, 0).isGreaterThanOrEqual(newBound(2, true, 0))) 123 124 assert.True(newBound(nilHolder, true, 1).isGreaterThanOrEqual(newBound(1, true, 0))) 125 assert.False(newBound(1, true, 0).isGreaterThanOrEqual(newBound(nilHolder, true, 1))) 126 } 127 128 func TestMinValue(t *testing.T) { 129 assert := assert.New(t) 130 ve1 := newBound(5, false, 0) 131 ve2 := newBound(5, true, 0) 132 ve3 := newBound(nilHolder, true, -1) 133 ve4 := newBound(nilHolder, true, 1) 134 135 assert.Equal(ve1, ve1.minValue(ve2)) 136 assert.Equal(ve3, ve1.minValue(ve3)) 137 assert.Equal(ve1, ve1.minValue(ve4)) 138 } 139 140 func TestMaxValue(t *testing.T) { 141 assert := assert.New(t) 142 ve1 := newBound(5, false, 0) 143 ve2 := newBound(5, true, 0) 144 ve3 := newBound(nilHolder, true, -1) 145 ve4 := newBound(nilHolder, true, 1) 146 147 assert.Equal(ve2, ve1.maxValue(ve2)) 148 assert.Equal(ve1, ve1.maxValue(ve3)) 149 assert.Equal(ve4, ve1.maxValue(ve4)) 150 }