OSDN Git Service

update master (#487)
[bytom/bytom-spv.git] / protocol / bc / tx_status_test.go
1 package bc
2
3 import (
4         "testing"
5 )
6
7 func TestSetBits(t *testing.T) {
8         cases := []struct {
9                 op     map[int]bool
10                 result []bool
11         }{
12                 {
13                         op: map[int]bool{
14                                 0: true,
15                         },
16                         result: []bool{true},
17                 },
18                 {
19                         op: map[int]bool{
20                                 0: false,
21                         },
22                         result: []bool{false},
23                 },
24                 {
25                         op: map[int]bool{
26                                 1: true,
27                         },
28                         result: []bool{false, true},
29                 },
30                 {
31                         op: map[int]bool{
32                                 0: true,
33                                 1: false,
34                         },
35                         result: []bool{true, false},
36                 },
37                 {
38                         op: map[int]bool{
39                                 7: true,
40                         },
41                         result: []bool{false, false, false, false, false, false, false, true},
42                 },
43                 {
44                         op: map[int]bool{
45                                 7: false,
46                         },
47                         result: []bool{false, false, false, false, false, false, false, false},
48                 },
49                 {
50                         op: map[int]bool{
51                                 8: true,
52                         },
53                         result: []bool{false, false, false, false, false, false, false, false, true},
54                 },
55                 {
56                         op: map[int]bool{
57                                 8: false,
58                         },
59                         result: []bool{false, false, false, false, false, false, false, false, false},
60                 },
61                 {
62                         op: map[int]bool{
63                                 0: true,
64                                 1: false,
65                                 2: false,
66                                 3: true,
67                                 4: true,
68                                 5: true,
69                                 6: false,
70                                 7: true,
71                                 8: false,
72                                 9: true,
73                         },
74                         result: []bool{true, false, false, true, true, true, false, true, false, true},
75                 },
76         }
77
78         for ci, c := range cases {
79                 ts := NewTransactionStatus()
80                 for k, v := range c.op {
81                         if err := ts.SetStatus(k, v); err != nil {
82                                 t.Error(err)
83                         }
84                 }
85
86                 for i, v := range c.result {
87                         result, err := ts.GetStatus(i)
88                         if err != nil {
89                                 t.Error(err)
90                         }
91                         if result != v {
92                                 t.Errorf("bad result, %d want %t get %t", i, v, result)
93                         }
94                 }
95                 if len(ts.Bitmap) != (len(c.result)+7)/bitsPerByte {
96                         t.Errorf("wrong bitmap size, %d want %d get %d", ci, len(c.result)/bitsPerByte+1, len(ts.Bitmap))
97                 }
98         }
99 }