github.com/arieschain/arieschain@v0.0.0-20191023063405-37c074544356/core/vm/instructions_test.go (about) 1 package vm 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/quickchainproject/quickchain/common" 8 "github.com/quickchainproject/quickchain/params" 9 ) 10 11 type twoOperandTest struct { 12 x string 13 y string 14 expected string 15 } 16 17 func testTwoOperandOp(t *testing.T, tests []twoOperandTest, opFn func(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error)) { 18 var ( 19 env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) 20 stack = newstack() 21 pc = uint64(0) 22 ) 23 for i, test := range tests { 24 x := new(big.Int).SetBytes(common.Hex2Bytes(test.x)) 25 shift := new(big.Int).SetBytes(common.Hex2Bytes(test.y)) 26 expected := new(big.Int).SetBytes(common.Hex2Bytes(test.expected)) 27 stack.push(x) 28 stack.push(shift) 29 opFn(&pc, env, nil, nil, stack) 30 actual := stack.pop() 31 if actual.Cmp(expected) != 0 { 32 t.Errorf("Testcase %d, expected %v, got %v", i, expected, actual) 33 } 34 // Check pool usage 35 // 1.pool is not allowed to contain anything on the stack 36 // 2.pool is not allowed to contain the same pointers twice 37 if env.interpreter.intPool.pool.len() > 0 { 38 39 poolvals := make(map[*big.Int]struct{}) 40 poolvals[actual] = struct{}{} 41 42 for env.interpreter.intPool.pool.len() > 0 { 43 key := env.interpreter.intPool.get() 44 if _, exist := poolvals[key]; exist { 45 t.Errorf("Testcase %d, pool contains double-entry", i) 46 } 47 poolvals[key] = struct{}{} 48 } 49 } 50 } 51 } 52 53 func TestByteOp(t *testing.T) { 54 var ( 55 env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) 56 stack = newstack() 57 ) 58 tests := []struct { 59 v string 60 th uint64 61 expected *big.Int 62 }{ 63 {"ABCDEF0908070605040302010000000000000000000000000000000000000000", 0, big.NewInt(0xAB)}, 64 {"ABCDEF0908070605040302010000000000000000000000000000000000000000", 1, big.NewInt(0xCD)}, 65 {"00CDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff", 0, big.NewInt(0x00)}, 66 {"00CDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff", 1, big.NewInt(0xCD)}, 67 {"0000000000000000000000000000000000000000000000000000000000102030", 31, big.NewInt(0x30)}, 68 {"0000000000000000000000000000000000000000000000000000000000102030", 30, big.NewInt(0x20)}, 69 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32, big.NewInt(0x0)}, 70 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 0xFFFFFFFFFFFFFFFF, big.NewInt(0x0)}, 71 } 72 pc := uint64(0) 73 for _, test := range tests { 74 val := new(big.Int).SetBytes(common.Hex2Bytes(test.v)) 75 th := new(big.Int).SetUint64(test.th) 76 stack.push(val) 77 stack.push(th) 78 opByte(&pc, env, nil, nil, stack) 79 actual := stack.pop() 80 if actual.Cmp(test.expected) != 0 { 81 t.Fatalf("Expected [%v] %v:th byte to be %v, was %v.", test.v, test.th, test.expected, actual) 82 } 83 } 84 } 85 86 func TestSHL(t *testing.T) { 87 // Testcases from https://github.com/quickchain/EIPs/blob/master/EIPS/eip-145.md#shl-shift-left 88 tests := []twoOperandTest{ 89 {"0000000000000000000000000000000000000000000000000000000000000001", "00", "0000000000000000000000000000000000000000000000000000000000000001"}, 90 {"0000000000000000000000000000000000000000000000000000000000000001", "01", "0000000000000000000000000000000000000000000000000000000000000002"}, 91 {"0000000000000000000000000000000000000000000000000000000000000001", "ff", "8000000000000000000000000000000000000000000000000000000000000000"}, 92 {"0000000000000000000000000000000000000000000000000000000000000001", "0100", "0000000000000000000000000000000000000000000000000000000000000000"}, 93 {"0000000000000000000000000000000000000000000000000000000000000001", "0101", "0000000000000000000000000000000000000000000000000000000000000000"}, 94 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "00", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, 95 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "01", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"}, 96 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ff", "8000000000000000000000000000000000000000000000000000000000000000"}, 97 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0100", "0000000000000000000000000000000000000000000000000000000000000000"}, 98 {"0000000000000000000000000000000000000000000000000000000000000000", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, 99 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "01", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"}, 100 } 101 testTwoOperandOp(t, tests, opSHL) 102 } 103 104 func TestSHR(t *testing.T) { 105 // Testcases from https://github.com/quickchain/EIPs/blob/master/EIPS/eip-145.md#shr-logical-shift-right 106 tests := []twoOperandTest{ 107 {"0000000000000000000000000000000000000000000000000000000000000001", "00", "0000000000000000000000000000000000000000000000000000000000000001"}, 108 {"0000000000000000000000000000000000000000000000000000000000000001", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, 109 {"8000000000000000000000000000000000000000000000000000000000000000", "01", "4000000000000000000000000000000000000000000000000000000000000000"}, 110 {"8000000000000000000000000000000000000000000000000000000000000000", "ff", "0000000000000000000000000000000000000000000000000000000000000001"}, 111 {"8000000000000000000000000000000000000000000000000000000000000000", "0100", "0000000000000000000000000000000000000000000000000000000000000000"}, 112 {"8000000000000000000000000000000000000000000000000000000000000000", "0101", "0000000000000000000000000000000000000000000000000000000000000000"}, 113 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "00", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, 114 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "01", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, 115 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ff", "0000000000000000000000000000000000000000000000000000000000000001"}, 116 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0100", "0000000000000000000000000000000000000000000000000000000000000000"}, 117 {"0000000000000000000000000000000000000000000000000000000000000000", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, 118 } 119 testTwoOperandOp(t, tests, opSHR) 120 } 121 122 func TestSAR(t *testing.T) { 123 // Testcases from https://github.com/quickchain/EIPs/blob/master/EIPS/eip-145.md#sar-arithmetic-shift-right 124 tests := []twoOperandTest{ 125 {"0000000000000000000000000000000000000000000000000000000000000001", "00", "0000000000000000000000000000000000000000000000000000000000000001"}, 126 {"0000000000000000000000000000000000000000000000000000000000000001", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, 127 {"8000000000000000000000000000000000000000000000000000000000000000", "01", "c000000000000000000000000000000000000000000000000000000000000000"}, 128 {"8000000000000000000000000000000000000000000000000000000000000000", "ff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, 129 {"8000000000000000000000000000000000000000000000000000000000000000", "0100", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, 130 {"8000000000000000000000000000000000000000000000000000000000000000", "0101", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, 131 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "00", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, 132 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "01", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, 133 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, 134 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0100", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, 135 {"0000000000000000000000000000000000000000000000000000000000000000", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, 136 {"4000000000000000000000000000000000000000000000000000000000000000", "fe", "0000000000000000000000000000000000000000000000000000000000000001"}, 137 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "f8", "000000000000000000000000000000000000000000000000000000000000007f"}, 138 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "fe", "0000000000000000000000000000000000000000000000000000000000000001"}, 139 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ff", "0000000000000000000000000000000000000000000000000000000000000000"}, 140 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0100", "0000000000000000000000000000000000000000000000000000000000000000"}, 141 } 142 143 testTwoOperandOp(t, tests, opSAR) 144 } 145 146 func TestSGT(t *testing.T) { 147 tests := []twoOperandTest{ 148 149 {"0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, 150 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, 151 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, 152 {"0000000000000000000000000000000000000000000000000000000000000001", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001"}, 153 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, 154 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000001"}, 155 {"0000000000000000000000000000000000000000000000000000000000000001", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, 156 {"8000000000000000000000000000000000000000000000000000000000000001", "8000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, 157 {"8000000000000000000000000000000000000000000000000000000000000001", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001"}, 158 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "8000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, 159 {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", "0000000000000000000000000000000000000000000000000000000000000001"}, 160 {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb", "0000000000000000000000000000000000000000000000000000000000000000"}, 161 } 162 testTwoOperandOp(t, tests, opSgt) 163 } 164 165 func TestSLT(t *testing.T) { 166 tests := []twoOperandTest{ 167 {"0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, 168 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, 169 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, 170 {"0000000000000000000000000000000000000000000000000000000000000001", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, 171 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000001"}, 172 {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, 173 {"0000000000000000000000000000000000000000000000000000000000000001", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001"}, 174 {"8000000000000000000000000000000000000000000000000000000000000001", "8000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, 175 {"8000000000000000000000000000000000000000000000000000000000000001", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, 176 {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "8000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000001"}, 177 {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", "0000000000000000000000000000000000000000000000000000000000000000"}, 178 {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb", "0000000000000000000000000000000000000000000000000000000000000001"}, 179 } 180 testTwoOperandOp(t, tests, opSlt) 181 } 182 183 func opBenchmark(bench *testing.B, op func(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error), args ...string) { 184 var ( 185 env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) 186 stack = newstack() 187 ) 188 // convert args 189 byteArgs := make([][]byte, len(args)) 190 for i, arg := range args { 191 byteArgs[i] = common.Hex2Bytes(arg) 192 } 193 pc := uint64(0) 194 bench.ResetTimer() 195 for i := 0; i < bench.N; i++ { 196 for _, arg := range byteArgs { 197 a := new(big.Int).SetBytes(arg) 198 stack.push(a) 199 } 200 op(&pc, env, nil, nil, stack) 201 stack.pop() 202 } 203 } 204 205 func BenchmarkOpAdd64(b *testing.B) { 206 x := "ffffffff" 207 y := "fd37f3e2bba2c4f" 208 209 opBenchmark(b, opAdd, x, y) 210 } 211 212 func BenchmarkOpAdd128(b *testing.B) { 213 x := "ffffffffffffffff" 214 y := "f5470b43c6549b016288e9a65629687" 215 216 opBenchmark(b, opAdd, x, y) 217 } 218 219 func BenchmarkOpAdd256(b *testing.B) { 220 x := "0802431afcbce1fc194c9eaa417b2fb67dc75a95db0bc7ec6b1c8af11df6a1da9" 221 y := "a1f5aac137876480252e5dcac62c354ec0d42b76b0642b6181ed099849ea1d57" 222 223 opBenchmark(b, opAdd, x, y) 224 } 225 226 func BenchmarkOpSub64(b *testing.B) { 227 x := "51022b6317003a9d" 228 y := "a20456c62e00753a" 229 230 opBenchmark(b, opSub, x, y) 231 } 232 233 func BenchmarkOpSub128(b *testing.B) { 234 x := "4dde30faaacdc14d00327aac314e915d" 235 y := "9bbc61f5559b829a0064f558629d22ba" 236 237 opBenchmark(b, opSub, x, y) 238 } 239 240 func BenchmarkOpSub256(b *testing.B) { 241 x := "4bfcd8bb2ac462735b48a17580690283980aa2d679f091c64364594df113ea37" 242 y := "97f9b1765588c4e6b69142eb00d20507301545acf3e1238c86c8b29be227d46e" 243 244 opBenchmark(b, opSub, x, y) 245 } 246 247 func BenchmarkOpMul(b *testing.B) { 248 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 249 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 250 251 opBenchmark(b, opMul, x, y) 252 } 253 254 func BenchmarkOpDiv256(b *testing.B) { 255 x := "ff3f9014f20db29ae04af2c2d265de17" 256 y := "fe7fb0d1f59dfe9492ffbf73683fd1e870eec79504c60144cc7f5fc2bad1e611" 257 opBenchmark(b, opDiv, x, y) 258 } 259 260 func BenchmarkOpDiv128(b *testing.B) { 261 x := "fdedc7f10142ff97" 262 y := "fbdfda0e2ce356173d1993d5f70a2b11" 263 opBenchmark(b, opDiv, x, y) 264 } 265 266 func BenchmarkOpDiv64(b *testing.B) { 267 x := "fcb34eb3" 268 y := "f97180878e839129" 269 opBenchmark(b, opDiv, x, y) 270 } 271 272 func BenchmarkOpSdiv(b *testing.B) { 273 x := "ff3f9014f20db29ae04af2c2d265de17" 274 y := "fe7fb0d1f59dfe9492ffbf73683fd1e870eec79504c60144cc7f5fc2bad1e611" 275 276 opBenchmark(b, opSdiv, x, y) 277 } 278 279 func BenchmarkOpMod(b *testing.B) { 280 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 281 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 282 283 opBenchmark(b, opMod, x, y) 284 } 285 286 func BenchmarkOpSmod(b *testing.B) { 287 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 288 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 289 290 opBenchmark(b, opSmod, x, y) 291 } 292 293 func BenchmarkOpExp(b *testing.B) { 294 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 295 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 296 297 opBenchmark(b, opExp, x, y) 298 } 299 300 func BenchmarkOpSignExtend(b *testing.B) { 301 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 302 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 303 304 opBenchmark(b, opSignExtend, x, y) 305 } 306 307 func BenchmarkOpLt(b *testing.B) { 308 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 309 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 310 311 opBenchmark(b, opLt, x, y) 312 } 313 314 func BenchmarkOpGt(b *testing.B) { 315 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 316 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 317 318 opBenchmark(b, opGt, x, y) 319 } 320 321 func BenchmarkOpSlt(b *testing.B) { 322 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 323 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 324 325 opBenchmark(b, opSlt, x, y) 326 } 327 328 func BenchmarkOpSgt(b *testing.B) { 329 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 330 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 331 332 opBenchmark(b, opSgt, x, y) 333 } 334 335 func BenchmarkOpEq(b *testing.B) { 336 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 337 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 338 339 opBenchmark(b, opEq, x, y) 340 } 341 func BenchmarkOpEq2(b *testing.B) { 342 x := "FBCDEF090807060504030201ffffffffFBCDEF090807060504030201ffffffff" 343 y := "FBCDEF090807060504030201ffffffffFBCDEF090807060504030201fffffffe" 344 opBenchmark(b, opEq, x, y) 345 } 346 func BenchmarkOpAnd(b *testing.B) { 347 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 348 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 349 350 opBenchmark(b, opAnd, x, y) 351 } 352 353 func BenchmarkOpOr(b *testing.B) { 354 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 355 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 356 357 opBenchmark(b, opOr, x, y) 358 } 359 360 func BenchmarkOpXor(b *testing.B) { 361 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 362 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 363 364 opBenchmark(b, opXor, x, y) 365 } 366 367 func BenchmarkOpByte(b *testing.B) { 368 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 369 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 370 371 opBenchmark(b, opByte, x, y) 372 } 373 374 func BenchmarkOpAddmod(b *testing.B) { 375 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 376 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 377 z := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 378 379 opBenchmark(b, opAddmod, x, y, z) 380 } 381 382 func BenchmarkOpMulmod(b *testing.B) { 383 x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 384 y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 385 z := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 386 387 opBenchmark(b, opMulmod, x, y, z) 388 } 389 390 func BenchmarkOpSHL(b *testing.B) { 391 x := "FBCDEF090807060504030201ffffffffFBCDEF090807060504030201ffffffff" 392 y := "ff" 393 394 opBenchmark(b, opSHL, x, y) 395 } 396 func BenchmarkOpSHR(b *testing.B) { 397 x := "FBCDEF090807060504030201ffffffffFBCDEF090807060504030201ffffffff" 398 y := "ff" 399 400 opBenchmark(b, opSHR, x, y) 401 } 402 func BenchmarkOpSAR(b *testing.B) { 403 x := "FBCDEF090807060504030201ffffffffFBCDEF090807060504030201ffffffff" 404 y := "ff" 405 406 opBenchmark(b, opSAR, x, y) 407 } 408 func BenchmarkOpIsZero(b *testing.B) { 409 x := "FBCDEF090807060504030201ffffffffFBCDEF090807060504030201ffffffff" 410 opBenchmark(b, opIszero, x) 411 }