github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/storage/types_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:45</date> 10 //</624450121500725248> 11 12 13 package storage 14 15 import ( 16 "strconv" 17 "testing" 18 ) 19 20 //testNexibility用显式验证邻近函数 21 //表驱动测试中的值。它高度依赖于 22 //maxpo常量,它将案例验证为maxpo=32。 23 func TestProximity(t *testing.T) { 24 //来自base2编码字符串的整数 25 bx := func(s string) uint8 { 26 i, err := strconv.ParseUint(s, 2, 8) 27 if err != nil { 28 t.Fatal(err) 29 } 30 return uint8(i) 31 } 32 //根据最大采购订单调整预期料仓 33 limitPO := func(po uint8) uint8 { 34 if po > MaxPO { 35 return MaxPO 36 } 37 return po 38 } 39 base := []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00000000")} 40 for _, tc := range []struct { 41 addr []byte 42 po uint8 43 }{ 44 { 45 addr: base, 46 po: MaxPO, 47 }, 48 { 49 addr: []byte{bx("10000000"), bx("00000000"), bx("00000000"), bx("00000000")}, 50 po: limitPO(0), 51 }, 52 { 53 addr: []byte{bx("01000000"), bx("00000000"), bx("00000000"), bx("00000000")}, 54 po: limitPO(1), 55 }, 56 { 57 addr: []byte{bx("00100000"), bx("00000000"), bx("00000000"), bx("00000000")}, 58 po: limitPO(2), 59 }, 60 { 61 addr: []byte{bx("00010000"), bx("00000000"), bx("00000000"), bx("00000000")}, 62 po: limitPO(3), 63 }, 64 { 65 addr: []byte{bx("00001000"), bx("00000000"), bx("00000000"), bx("00000000")}, 66 po: limitPO(4), 67 }, 68 { 69 addr: []byte{bx("00000100"), bx("00000000"), bx("00000000"), bx("00000000")}, 70 po: limitPO(5), 71 }, 72 { 73 addr: []byte{bx("00000010"), bx("00000000"), bx("00000000"), bx("00000000")}, 74 po: limitPO(6), 75 }, 76 { 77 addr: []byte{bx("00000001"), bx("00000000"), bx("00000000"), bx("00000000")}, 78 po: limitPO(7), 79 }, 80 { 81 addr: []byte{bx("00000000"), bx("10000000"), bx("00000000"), bx("00000000")}, 82 po: limitPO(8), 83 }, 84 { 85 addr: []byte{bx("00000000"), bx("01000000"), bx("00000000"), bx("00000000")}, 86 po: limitPO(9), 87 }, 88 { 89 addr: []byte{bx("00000000"), bx("00100000"), bx("00000000"), bx("00000000")}, 90 po: limitPO(10), 91 }, 92 { 93 addr: []byte{bx("00000000"), bx("00010000"), bx("00000000"), bx("00000000")}, 94 po: limitPO(11), 95 }, 96 { 97 addr: []byte{bx("00000000"), bx("00001000"), bx("00000000"), bx("00000000")}, 98 po: limitPO(12), 99 }, 100 { 101 addr: []byte{bx("00000000"), bx("00000100"), bx("00000000"), bx("00000000")}, 102 po: limitPO(13), 103 }, 104 { 105 addr: []byte{bx("00000000"), bx("00000010"), bx("00000000"), bx("00000000")}, 106 po: limitPO(14), 107 }, 108 { 109 addr: []byte{bx("00000000"), bx("00000001"), bx("00000000"), bx("00000000")}, 110 po: limitPO(15), 111 }, 112 { 113 addr: []byte{bx("00000000"), bx("00000000"), bx("10000000"), bx("00000000")}, 114 po: limitPO(16), 115 }, 116 { 117 addr: []byte{bx("00000000"), bx("00000000"), bx("01000000"), bx("00000000")}, 118 po: limitPO(17), 119 }, 120 { 121 addr: []byte{bx("00000000"), bx("00000000"), bx("00100000"), bx("00000000")}, 122 po: limitPO(18), 123 }, 124 { 125 addr: []byte{bx("00000000"), bx("00000000"), bx("00010000"), bx("00000000")}, 126 po: limitPO(19), 127 }, 128 { 129 addr: []byte{bx("00000000"), bx("00000000"), bx("00001000"), bx("00000000")}, 130 po: limitPO(20), 131 }, 132 { 133 addr: []byte{bx("00000000"), bx("00000000"), bx("00000100"), bx("00000000")}, 134 po: limitPO(21), 135 }, 136 { 137 addr: []byte{bx("00000000"), bx("00000000"), bx("00000010"), bx("00000000")}, 138 po: limitPO(22), 139 }, 140 { 141 addr: []byte{bx("00000000"), bx("00000000"), bx("00000001"), bx("00000000")}, 142 po: limitPO(23), 143 }, 144 { 145 addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("10000000")}, 146 po: limitPO(24), 147 }, 148 { 149 addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("01000000")}, 150 po: limitPO(25), 151 }, 152 { 153 addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00100000")}, 154 po: limitPO(26), 155 }, 156 { 157 addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00010000")}, 158 po: limitPO(27), 159 }, 160 { 161 addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00001000")}, 162 po: limitPO(28), 163 }, 164 { 165 addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00000100")}, 166 po: limitPO(29), 167 }, 168 { 169 addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00000010")}, 170 po: limitPO(30), 171 }, 172 { 173 addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00000001")}, 174 po: limitPO(31), 175 }, 176 } { 177 got := uint8(Proximity(base, tc.addr)) 178 if got != tc.po { 179 t.Errorf("got %v bin, want %v", got, tc.po) 180 } 181 } 182 } 183