github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/pingcap/tidb/evaluator/builtin_control_test.go (about) 1 // Copyright 2015 PingCAP, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package evaluator 15 16 import ( 17 "errors" 18 19 . "github.com/insionng/yougam/libraries/pingcap/check" 20 21 "github.com/insionng/yougam/libraries/pingcap/tidb/util/testleak" 22 "github.com/insionng/yougam/libraries/pingcap/tidb/util/testutil" 23 "github.com/insionng/yougam/libraries/pingcap/tidb/util/types" 24 ) 25 26 func (s *testEvaluatorSuite) TestIf(c *C) { 27 defer testleak.AfterTest(c)() 28 tbl := []struct { 29 Arg1 interface{} 30 Arg2 interface{} 31 Arg3 interface{} 32 Ret interface{} 33 }{ 34 {1, 1, 2, 1}, 35 {nil, 1, 2, 2}, 36 {0, 1, 2, 2}, 37 } 38 39 for _, t := range tbl { 40 d, err := builtinIf(types.MakeDatums([]interface{}{t.Arg1, t.Arg2, t.Arg3}...), nil) 41 c.Assert(err, IsNil) 42 c.Assert(d, testutil.DatumEquals, types.NewDatum(t.Ret)) 43 } 44 45 _, err := builtinIf(types.MakeDatums([]interface{}{errors.New("must error"), 1, 2}...), nil) 46 c.Assert(err, NotNil) 47 } 48 49 func (s *testEvaluatorSuite) TestIfNull(c *C) { 50 defer testleak.AfterTest(c)() 51 tbl := []struct { 52 Arg1 interface{} 53 Arg2 interface{} 54 Ret interface{} 55 }{ 56 {1, 2, 1}, 57 {nil, 2, 2}, 58 {nil, nil, nil}, 59 } 60 61 for _, t := range tbl { 62 d, err := builtinIfNull(types.MakeDatums([]interface{}{t.Arg1, t.Arg2}...), nil) 63 c.Assert(err, IsNil) 64 c.Assert(d, testutil.DatumEquals, types.NewDatum(t.Ret)) 65 } 66 } 67 68 func (s *testEvaluatorSuite) TestNullIf(c *C) { 69 defer testleak.AfterTest(c)() 70 tbl := []struct { 71 Arg1 interface{} 72 Arg2 interface{} 73 Ret interface{} 74 }{ 75 {1, 1, nil}, 76 {nil, 2, nil}, 77 {1, nil, 1}, 78 {1, 2, 1}, 79 } 80 81 for _, t := range tbl { 82 d, err := builtinNullIf(types.MakeDatums([]interface{}{t.Arg1, t.Arg2}...), nil) 83 c.Assert(err, IsNil) 84 c.Assert(d, testutil.DatumEquals, types.NewDatum(t.Ret)) 85 } 86 }