Skip to content

Commit 13556b0

Browse files
author
James Cor
committed
comparison microbenchmarks
1 parent aa0d6d0 commit 13556b0

File tree

1 file changed

+58
-21
lines changed

1 file changed

+58
-21
lines changed

sql/expression/comparison_test.go

Lines changed: 58 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package expression_test
15+
package expression
1616

1717
import (
18+
"encoding/binary"
19+
"github.com/dolthub/vitess/go/sqltypes"
1820
"testing"
1921

2022
"github.com/stretchr/testify/require"
2123

2224
"github.com/dolthub/go-mysql-server/sql"
23-
"github.com/dolthub/go-mysql-server/sql/expression"
2425
"github.com/dolthub/go-mysql-server/sql/types"
2526
)
2627

@@ -109,11 +110,11 @@ var likeComparisonCases = map[sql.Type]map[int][][]interface{}{
109110
func TestEquals(t *testing.T) {
110111
require := require.New(t)
111112
for resultType, cmpCase := range comparisonCases {
112-
get0 := expression.NewGetField(0, resultType, "col1", true)
113+
get0 := NewGetField(0, resultType, "col1", true)
113114
require.NotNil(get0)
114-
get1 := expression.NewGetField(1, resultType, "col2", true)
115+
get1 := NewGetField(1, resultType, "col2", true)
115116
require.NotNil(get1)
116-
eq := expression.NewEquals(get0, get1)
117+
eq := NewEquals(get0, get1)
117118
require.NotNil(eq)
118119
require.Equal(types.Boolean, eq.Type())
119120
for cmpResult, cases := range cmpCase {
@@ -136,11 +137,11 @@ func TestEquals(t *testing.T) {
136137
func TestNullSafeEquals(t *testing.T) {
137138
require := require.New(t)
138139
for resultType, cmpCase := range comparisonCases {
139-
get0 := expression.NewGetField(0, resultType, "col1", true)
140+
get0 := NewGetField(0, resultType, "col1", true)
140141
require.NotNil(get0)
141-
get1 := expression.NewGetField(1, resultType, "col2", true)
142+
get1 := NewGetField(1, resultType, "col2", true)
142143
require.NotNil(get1)
143-
seq := expression.NewNullSafeEquals(get0, get1)
144+
seq := NewNullSafeEquals(get0, get1)
144145
require.NotNil(seq)
145146
require.Equal(types.Boolean, seq.Type())
146147
for cmpResult, cases := range cmpCase {
@@ -167,11 +168,11 @@ func TestNullSafeEquals(t *testing.T) {
167168
func TestLessThan(t *testing.T) {
168169
require := require.New(t)
169170
for resultType, cmpCase := range comparisonCases {
170-
get0 := expression.NewGetField(0, resultType, "col1", true)
171+
get0 := NewGetField(0, resultType, "col1", true)
171172
require.NotNil(get0)
172-
get1 := expression.NewGetField(1, resultType, "col2", true)
173+
get1 := NewGetField(1, resultType, "col2", true)
173174
require.NotNil(get1)
174-
eq := expression.NewLessThan(get0, get1)
175+
eq := NewLessThan(get0, get1)
175176
require.NotNil(eq)
176177
require.Equal(types.Boolean, eq.Type())
177178
for cmpResult, cases := range cmpCase {
@@ -194,11 +195,11 @@ func TestLessThan(t *testing.T) {
194195
func TestGreaterThan(t *testing.T) {
195196
require := require.New(t)
196197
for resultType, cmpCase := range comparisonCases {
197-
get0 := expression.NewGetField(0, resultType, "col1", true)
198+
get0 := NewGetField(0, resultType, "col1", true)
198199
require.NotNil(get0)
199-
get1 := expression.NewGetField(1, resultType, "col2", true)
200+
get1 := NewGetField(1, resultType, "col2", true)
200201
require.NotNil(get1)
201-
eq := expression.NewGreaterThan(get0, get1)
202+
eq := NewGreaterThan(get0, get1)
202203
require.NotNil(eq)
203204
require.Equal(types.Boolean, eq.Type())
204205
for cmpResult, cases := range cmpCase {
@@ -218,13 +219,49 @@ func TestGreaterThan(t *testing.T) {
218219
}
219220
}
220221

221-
func eval(t *testing.T, e sql.Expression, row sql.Row) interface{} {
222-
t.Helper()
223-
v, err := e.Eval(sql.NewEmptyContext(), row)
224-
require.NoError(t, err)
225-
return v
226-
}
227-
228222
func TestValueComparison(t *testing.T) {
229223
// TODO
230224
}
225+
226+
// BenchmarkComparison
227+
// BenchmarkComparison-14 4426766 264.4 ns/op
228+
func BenchmarkComparison(b *testing.B) {
229+
ctx := sql.NewEmptyContext()
230+
gf1 := NewGetField(0, types.Int64, "col1", true)
231+
gf2 := NewGetField(1, types.Int64, "col2", true)
232+
cmp := newComparison(gf1, gf2)
233+
row := sql.Row{1, 1}
234+
b.ResetTimer()
235+
236+
for i := 0; i < b.N; i++ {
237+
res, err := cmp.Compare(ctx, row)
238+
require.NoError(b, err)
239+
require.Equal(b, 0, res)
240+
}
241+
}
242+
243+
// BenchmarkValueComparison
244+
// BenchmarkValueComparison-14 4115744 285.8 ns/op
245+
func BenchmarkValueComparison(b *testing.B) {
246+
ctx := sql.NewEmptyContext()
247+
gf1 := NewGetField(0, types.Int64, "col1", true)
248+
gf2 := NewGetField(1, types.Int64, "col2", true)
249+
cmp := newComparison(gf1, gf2)
250+
row := sql.ValueRow{
251+
{
252+
Val: binary.LittleEndian.AppendUint64(nil, uint64(1)),
253+
Typ: sqltypes.Int64,
254+
},
255+
{
256+
Val: binary.LittleEndian.AppendUint64(nil, uint64(1)),
257+
Typ: sqltypes.Int64,
258+
},
259+
}
260+
b.ResetTimer()
261+
262+
for i := 0; i < b.N; i++ {
263+
res, err := cmp.CompareValue(ctx, row)
264+
require.NoError(b, err)
265+
require.Equal(b, 0, res)
266+
}
267+
}

0 commit comments

Comments
 (0)