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