OSDN Git Service

feat(warder): add warder backbone (#181)
[bytom/vapor.git] / vendor / github.com / ugorji / go / codec / helper_test.go
1 // Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.
2 // Use of this source code is governed by a MIT license found in the LICENSE file.
3
4 package codec
5
6 // All non-std package dependencies related to testing live in this file,
7 // so porting to different environment is easy (just update functions).
8
9 import (
10         "errors"
11         "reflect"
12 )
13
14 // --- these functions are used by both benchmarks and tests
15
16 func deepEqual(v1, v2 interface{}) (err error) {
17         if !reflect.DeepEqual(v1, v2) {
18                 err = errors.New("Not Match")
19         }
20         return
21 }
22
23 func approxDataSize(rv reflect.Value) (sum int) {
24         switch rk := rv.Kind(); rk {
25         case reflect.Invalid:
26         case reflect.Ptr, reflect.Interface:
27                 sum += int(rv.Type().Size())
28                 sum += approxDataSize(rv.Elem())
29         case reflect.Slice:
30                 sum += int(rv.Type().Size())
31                 for j := 0; j < rv.Len(); j++ {
32                         sum += approxDataSize(rv.Index(j))
33                 }
34         case reflect.String:
35                 sum += int(rv.Type().Size())
36                 sum += rv.Len()
37         case reflect.Map:
38                 sum += int(rv.Type().Size())
39                 for _, mk := range rv.MapKeys() {
40                         sum += approxDataSize(mk)
41                         sum += approxDataSize(rv.MapIndex(mk))
42                 }
43         case reflect.Struct:
44                 //struct size already includes the full data size.
45                 //sum += int(rv.Type().Size())
46                 for j := 0; j < rv.NumField(); j++ {
47                         sum += approxDataSize(rv.Field(j))
48                 }
49         default:
50                 //pure value types
51                 sum += int(rv.Type().Size())
52         }
53         return
54 }