launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/testing/checkers/relop.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package checkers 5 6 import ( 7 "fmt" 8 "reflect" 9 10 gc "launchpad.net/gocheck" 11 ) 12 13 // GreaterThan checker 14 15 type greaterThanChecker struct { 16 *gc.CheckerInfo 17 } 18 19 var GreaterThan gc.Checker = &greaterThanChecker{ 20 &gc.CheckerInfo{Name: "GreaterThan", Params: []string{"obtained", "expected"}}, 21 } 22 23 func (checker *greaterThanChecker) Check(params []interface{}, names []string) (result bool, error string) { 24 defer func() { 25 if v := recover(); v != nil { 26 result = false 27 error = fmt.Sprint(v) 28 } 29 }() 30 31 p0value := reflect.ValueOf(params[0]) 32 p1value := reflect.ValueOf(params[1]) 33 switch p0value.Kind() { 34 case reflect.Int, 35 reflect.Int8, 36 reflect.Int16, 37 reflect.Int32, 38 reflect.Int64: 39 return p0value.Int() > p1value.Int(), "" 40 case reflect.Uint, 41 reflect.Uint8, 42 reflect.Uint16, 43 reflect.Uint32, 44 reflect.Uint64: 45 return p0value.Uint() > p1value.Uint(), "" 46 case reflect.Float32, 47 reflect.Float64: 48 return p0value.Float() > p1value.Float(), "" 49 default: 50 } 51 return false, fmt.Sprintf("obtained value %s:%#v not supported", p0value.Kind(), params[0]) 52 } 53 54 // LessThan checker 55 56 type lessThanChecker struct { 57 *gc.CheckerInfo 58 } 59 60 var LessThan gc.Checker = &lessThanChecker{ 61 &gc.CheckerInfo{Name: "LessThan", Params: []string{"obtained", "expected"}}, 62 } 63 64 func (checker *lessThanChecker) Check(params []interface{}, names []string) (result bool, error string) { 65 defer func() { 66 if v := recover(); v != nil { 67 result = false 68 error = fmt.Sprint(v) 69 } 70 }() 71 72 p0value := reflect.ValueOf(params[0]) 73 p1value := reflect.ValueOf(params[1]) 74 switch p0value.Kind() { 75 case reflect.Int, 76 reflect.Int8, 77 reflect.Int16, 78 reflect.Int32, 79 reflect.Int64: 80 return p0value.Int() < p1value.Int(), "" 81 case reflect.Uint, 82 reflect.Uint8, 83 reflect.Uint16, 84 reflect.Uint32, 85 reflect.Uint64: 86 return p0value.Uint() < p1value.Uint(), "" 87 case reflect.Float32, 88 reflect.Float64: 89 return p0value.Float() < p1value.Float(), "" 90 default: 91 } 92 return false, fmt.Sprintf("obtained value %s:%#v not supported", p0value.Kind(), params[0]) 93 }