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  }