github.com/neatlab/neatio@v1.7.3-0.20220425043230-d903e92fcc75/utilities/common/bitutil/bitutil_test.go (about) 1 package bitutil 2 3 import ( 4 "bytes" 5 "testing" 6 ) 7 8 func TestXOR(t *testing.T) { 9 for alignP := 0; alignP < 2; alignP++ { 10 for alignQ := 0; alignQ < 2; alignQ++ { 11 for alignD := 0; alignD < 2; alignD++ { 12 p := make([]byte, 1023)[alignP:] 13 q := make([]byte, 1023)[alignQ:] 14 15 for i := 0; i < len(p); i++ { 16 p[i] = byte(i) 17 } 18 for i := 0; i < len(q); i++ { 19 q[i] = byte(len(q) - i) 20 } 21 d1 := make([]byte, 1023+alignD)[alignD:] 22 d2 := make([]byte, 1023+alignD)[alignD:] 23 24 XORBytes(d1, p, q) 25 safeXORBytes(d2, p, q) 26 if !bytes.Equal(d1, d2) { 27 t.Error("not equal", d1, d2) 28 } 29 } 30 } 31 } 32 } 33 34 func TestAND(t *testing.T) { 35 for alignP := 0; alignP < 2; alignP++ { 36 for alignQ := 0; alignQ < 2; alignQ++ { 37 for alignD := 0; alignD < 2; alignD++ { 38 p := make([]byte, 1023)[alignP:] 39 q := make([]byte, 1023)[alignQ:] 40 41 for i := 0; i < len(p); i++ { 42 p[i] = byte(i) 43 } 44 for i := 0; i < len(q); i++ { 45 q[i] = byte(len(q) - i) 46 } 47 d1 := make([]byte, 1023+alignD)[alignD:] 48 d2 := make([]byte, 1023+alignD)[alignD:] 49 50 ANDBytes(d1, p, q) 51 safeANDBytes(d2, p, q) 52 if !bytes.Equal(d1, d2) { 53 t.Error("not equal") 54 } 55 } 56 } 57 } 58 } 59 60 func TestOR(t *testing.T) { 61 for alignP := 0; alignP < 2; alignP++ { 62 for alignQ := 0; alignQ < 2; alignQ++ { 63 for alignD := 0; alignD < 2; alignD++ { 64 p := make([]byte, 1023)[alignP:] 65 q := make([]byte, 1023)[alignQ:] 66 67 for i := 0; i < len(p); i++ { 68 p[i] = byte(i) 69 } 70 for i := 0; i < len(q); i++ { 71 q[i] = byte(len(q) - i) 72 } 73 d1 := make([]byte, 1023+alignD)[alignD:] 74 d2 := make([]byte, 1023+alignD)[alignD:] 75 76 ORBytes(d1, p, q) 77 safeORBytes(d2, p, q) 78 if !bytes.Equal(d1, d2) { 79 t.Error("not equal") 80 } 81 } 82 } 83 } 84 } 85 86 func TestTest(t *testing.T) { 87 for align := 0; align < 2; align++ { 88 89 p := make([]byte, 1023)[align:] 90 p[100] = 1 91 92 if TestBytes(p) != safeTestBytes(p) { 93 t.Error("not equal") 94 } 95 96 q := make([]byte, 1023)[align:] 97 q[len(q)-1] = 1 98 99 if TestBytes(q) != safeTestBytes(q) { 100 t.Error("not equal") 101 } 102 } 103 } 104 105 func BenchmarkFastXOR1KB(b *testing.B) { benchmarkFastXOR(b, 1024) } 106 func BenchmarkFastXOR2KB(b *testing.B) { benchmarkFastXOR(b, 2048) } 107 func BenchmarkFastXOR4KB(b *testing.B) { benchmarkFastXOR(b, 4096) } 108 109 func benchmarkFastXOR(b *testing.B, size int) { 110 p, q := make([]byte, size), make([]byte, size) 111 112 for i := 0; i < b.N; i++ { 113 XORBytes(p, p, q) 114 } 115 } 116 117 func BenchmarkBaseXOR1KB(b *testing.B) { benchmarkBaseXOR(b, 1024) } 118 func BenchmarkBaseXOR2KB(b *testing.B) { benchmarkBaseXOR(b, 2048) } 119 func BenchmarkBaseXOR4KB(b *testing.B) { benchmarkBaseXOR(b, 4096) } 120 121 func benchmarkBaseXOR(b *testing.B, size int) { 122 p, q := make([]byte, size), make([]byte, size) 123 124 for i := 0; i < b.N; i++ { 125 safeXORBytes(p, p, q) 126 } 127 } 128 129 func BenchmarkFastAND1KB(b *testing.B) { benchmarkFastAND(b, 1024) } 130 func BenchmarkFastAND2KB(b *testing.B) { benchmarkFastAND(b, 2048) } 131 func BenchmarkFastAND4KB(b *testing.B) { benchmarkFastAND(b, 4096) } 132 133 func benchmarkFastAND(b *testing.B, size int) { 134 p, q := make([]byte, size), make([]byte, size) 135 136 for i := 0; i < b.N; i++ { 137 ANDBytes(p, p, q) 138 } 139 } 140 141 func BenchmarkBaseAND1KB(b *testing.B) { benchmarkBaseAND(b, 1024) } 142 func BenchmarkBaseAND2KB(b *testing.B) { benchmarkBaseAND(b, 2048) } 143 func BenchmarkBaseAND4KB(b *testing.B) { benchmarkBaseAND(b, 4096) } 144 145 func benchmarkBaseAND(b *testing.B, size int) { 146 p, q := make([]byte, size), make([]byte, size) 147 148 for i := 0; i < b.N; i++ { 149 safeANDBytes(p, p, q) 150 } 151 } 152 153 func BenchmarkFastOR1KB(b *testing.B) { benchmarkFastOR(b, 1024) } 154 func BenchmarkFastOR2KB(b *testing.B) { benchmarkFastOR(b, 2048) } 155 func BenchmarkFastOR4KB(b *testing.B) { benchmarkFastOR(b, 4096) } 156 157 func benchmarkFastOR(b *testing.B, size int) { 158 p, q := make([]byte, size), make([]byte, size) 159 160 for i := 0; i < b.N; i++ { 161 ORBytes(p, p, q) 162 } 163 } 164 165 func BenchmarkBaseOR1KB(b *testing.B) { benchmarkBaseOR(b, 1024) } 166 func BenchmarkBaseOR2KB(b *testing.B) { benchmarkBaseOR(b, 2048) } 167 func BenchmarkBaseOR4KB(b *testing.B) { benchmarkBaseOR(b, 4096) } 168 169 func benchmarkBaseOR(b *testing.B, size int) { 170 p, q := make([]byte, size), make([]byte, size) 171 172 for i := 0; i < b.N; i++ { 173 safeORBytes(p, p, q) 174 } 175 } 176 177 func BenchmarkFastTest1KB(b *testing.B) { benchmarkFastTest(b, 1024) } 178 func BenchmarkFastTest2KB(b *testing.B) { benchmarkFastTest(b, 2048) } 179 func BenchmarkFastTest4KB(b *testing.B) { benchmarkFastTest(b, 4096) } 180 181 func benchmarkFastTest(b *testing.B, size int) { 182 p := make([]byte, size) 183 for i := 0; i < b.N; i++ { 184 TestBytes(p) 185 } 186 } 187 188 func BenchmarkBaseTest1KB(b *testing.B) { benchmarkBaseTest(b, 1024) } 189 func BenchmarkBaseTest2KB(b *testing.B) { benchmarkBaseTest(b, 2048) } 190 func BenchmarkBaseTest4KB(b *testing.B) { benchmarkBaseTest(b, 4096) } 191 192 func benchmarkBaseTest(b *testing.B, size int) { 193 p := make([]byte, size) 194 for i := 0; i < b.N; i++ { 195 safeTestBytes(p) 196 } 197 }