Rewriting tests to support JIT and Interpreter
This commit is contained in:
parent
4a26b6a40f
commit
6577d742a8
@ -1,6 +1,6 @@
|
|||||||
use common::*;
|
use common::*;
|
||||||
use evm;
|
use evm;
|
||||||
use evm::{Ext, Schedule, Factory};
|
use evm::{Ext, Schedule};
|
||||||
|
|
||||||
struct FakeLogEntry {
|
struct FakeLogEntry {
|
||||||
topics: Vec<H256>,
|
topics: Vec<H256>,
|
||||||
@ -85,16 +85,21 @@ impl Ext for FakeExt {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
macro_rules! evm_test(
|
||||||
#[cfg(feature = "jit")]
|
($name_test: ident: $name_jit: ident, $name_int: ident) => {
|
||||||
fn test_add_jit() {
|
#[test]
|
||||||
test_add(Box::new(super::jit::JitEvm));
|
#[cfg(feature = "jit")]
|
||||||
}
|
fn $name_jit() {
|
||||||
#[test]
|
$name_test(Box::new(super::jit::JitEvm));
|
||||||
fn test_add_interpreter() {
|
}
|
||||||
test_add(Box::new(super::interpreter::Interpreter));
|
#[test]
|
||||||
}
|
fn $name_int() {
|
||||||
|
$name_test(Box::new(super::interpreter::Interpreter));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
evm_test!{test_add: test_add_jit, test_add_int}
|
||||||
fn test_add(vm : Box<super::Evm>) {
|
fn test_add(vm : Box<super::Evm>) {
|
||||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||||
let code = "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055".from_hex().unwrap();
|
let code = "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055".from_hex().unwrap();
|
||||||
@ -113,8 +118,8 @@ fn test_add(vm : Box<super::Evm>) {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_sha3: test_sha3_jit, test_sha3_int}
|
||||||
fn test_sha3() {
|
fn test_sha3(vm: Box<super::Evm>) {
|
||||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||||
let code = "6000600020600055".from_hex().unwrap();
|
let code = "6000600020600055".from_hex().unwrap();
|
||||||
|
|
||||||
@ -125,7 +130,6 @@ fn test_sha3() {
|
|||||||
let mut ext = FakeExt::new();
|
let mut ext = FakeExt::new();
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -133,8 +137,8 @@ fn test_sha3() {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_address: test_address_jit, test_address_int}
|
||||||
fn test_address() {
|
fn test_address(vm: Box<super::Evm>) {
|
||||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||||
let code = "30600055".from_hex().unwrap();
|
let code = "30600055".from_hex().unwrap();
|
||||||
|
|
||||||
@ -145,7 +149,6 @@ fn test_address() {
|
|||||||
let mut ext = FakeExt::new();
|
let mut ext = FakeExt::new();
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -153,8 +156,8 @@ fn test_address() {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_origin: test_origin_jit, test_origin_int}
|
||||||
fn test_origin() {
|
fn test_origin(vm: Box<super::Evm>) {
|
||||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||||
let origin = Address::from_str("cd1722f2947def4cf144679da39c4c32bdc35681").unwrap();
|
let origin = Address::from_str("cd1722f2947def4cf144679da39c4c32bdc35681").unwrap();
|
||||||
let code = "32600055".from_hex().unwrap();
|
let code = "32600055".from_hex().unwrap();
|
||||||
@ -167,7 +170,6 @@ fn test_origin() {
|
|||||||
let mut ext = FakeExt::new();
|
let mut ext = FakeExt::new();
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -175,8 +177,8 @@ fn test_origin() {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("000000000000000000000000cd1722f2947def4cf144679da39c4c32bdc35681").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("000000000000000000000000cd1722f2947def4cf144679da39c4c32bdc35681").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_sender: test_sender_jit, test_sender_int}
|
||||||
fn test_sender() {
|
fn test_sender(vm: Box<super::Evm>) {
|
||||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||||
let sender = Address::from_str("cd1722f2947def4cf144679da39c4c32bdc35681").unwrap();
|
let sender = Address::from_str("cd1722f2947def4cf144679da39c4c32bdc35681").unwrap();
|
||||||
let code = "33600055".from_hex().unwrap();
|
let code = "33600055".from_hex().unwrap();
|
||||||
@ -189,7 +191,6 @@ fn test_sender() {
|
|||||||
let mut ext = FakeExt::new();
|
let mut ext = FakeExt::new();
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -197,8 +198,8 @@ fn test_sender() {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("000000000000000000000000cd1722f2947def4cf144679da39c4c32bdc35681").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("000000000000000000000000cd1722f2947def4cf144679da39c4c32bdc35681").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_extcodecopy: test_extcodecopy_jit, test_extcodecopy_int}
|
||||||
fn test_extcodecopy() {
|
fn test_extcodecopy(vm: Box<super::Evm>) {
|
||||||
// 33 - sender
|
// 33 - sender
|
||||||
// 3b - extcodesize
|
// 3b - extcodesize
|
||||||
// 60 00 - push 0
|
// 60 00 - push 0
|
||||||
@ -224,7 +225,6 @@ fn test_extcodecopy() {
|
|||||||
ext.codes.insert(sender, sender_code);
|
ext.codes.insert(sender, sender_code);
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -232,8 +232,8 @@ fn test_extcodecopy() {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("6005600055000000000000000000000000000000000000000000000000000000").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("6005600055000000000000000000000000000000000000000000000000000000").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_log_empty: test_log_empty_jit, test_log_empty_int}
|
||||||
fn test_log_empty() {
|
fn test_log_empty(vm: Box<super::Evm>) {
|
||||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||||
let code = "60006000a0".from_hex().unwrap();
|
let code = "60006000a0".from_hex().unwrap();
|
||||||
|
|
||||||
@ -244,7 +244,6 @@ fn test_log_empty() {
|
|||||||
let mut ext = FakeExt::new();
|
let mut ext = FakeExt::new();
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -254,8 +253,8 @@ fn test_log_empty() {
|
|||||||
assert_eq!(ext.logs[0].data, vec![]);
|
assert_eq!(ext.logs[0].data, vec![]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_log_sender: test_log_sender_jit, test_log_sender_int}
|
||||||
fn test_log_sender() {
|
fn test_log_sender(vm: Box<super::Evm>) {
|
||||||
// 60 ff - push ff
|
// 60 ff - push ff
|
||||||
// 60 00 - push 00
|
// 60 00 - push 00
|
||||||
// 53 - mstore
|
// 53 - mstore
|
||||||
@ -276,7 +275,6 @@ fn test_log_sender() {
|
|||||||
let mut ext = FakeExt::new();
|
let mut ext = FakeExt::new();
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -287,8 +285,8 @@ fn test_log_sender() {
|
|||||||
assert_eq!(ext.logs[0].data, "ff00000000000000000000000000000000000000000000000000000000000000".from_hex().unwrap());
|
assert_eq!(ext.logs[0].data, "ff00000000000000000000000000000000000000000000000000000000000000".from_hex().unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_blockhash: test_blockhash_jit, test_blockhash_int}
|
||||||
fn test_blockhash() {
|
fn test_blockhash(vm: Box<super::Evm>) {
|
||||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||||
let code = "600040600055".from_hex().unwrap();
|
let code = "600040600055".from_hex().unwrap();
|
||||||
let blockhash = H256::from_str("123400000000000000000000cd1722f2947def4cf144679da39c4c32bdc35681").unwrap();
|
let blockhash = H256::from_str("123400000000000000000000cd1722f2947def4cf144679da39c4c32bdc35681").unwrap();
|
||||||
@ -301,7 +299,6 @@ fn test_blockhash() {
|
|||||||
ext.blockhashes.insert(U256::zero(), blockhash.clone());
|
ext.blockhashes.insert(U256::zero(), blockhash.clone());
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -309,8 +306,8 @@ fn test_blockhash() {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &blockhash);
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &blockhash);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_calldataload: test_calldataload_jit, test_calldataload_int}
|
||||||
fn test_calldataload() {
|
fn test_calldataload(vm: Box<super::Evm>) {
|
||||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||||
let code = "600135600055".from_hex().unwrap();
|
let code = "600135600055".from_hex().unwrap();
|
||||||
let data = "0123ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23".from_hex().unwrap();
|
let data = "0123ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23".from_hex().unwrap();
|
||||||
@ -323,7 +320,6 @@ fn test_calldataload() {
|
|||||||
let mut ext = FakeExt::new();
|
let mut ext = FakeExt::new();
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -332,8 +328,8 @@ fn test_calldataload() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_author: test_author_jit, test_author_int}
|
||||||
fn test_author() {
|
fn test_author(vm: Box<super::Evm>) {
|
||||||
let author = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
let author = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||||
let code = "41600055".from_hex().unwrap();
|
let code = "41600055".from_hex().unwrap();
|
||||||
|
|
||||||
@ -344,7 +340,6 @@ fn test_author() {
|
|||||||
ext.info.author = author;
|
ext.info.author = author;
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -352,8 +347,8 @@ fn test_author() {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_timestamp: test_timestamp_jit, test_timestamp_int}
|
||||||
fn test_timestamp() {
|
fn test_timestamp(vm: Box<super::Evm>) {
|
||||||
let timestamp = 0x1234;
|
let timestamp = 0x1234;
|
||||||
let code = "42600055".from_hex().unwrap();
|
let code = "42600055".from_hex().unwrap();
|
||||||
|
|
||||||
@ -364,7 +359,6 @@ fn test_timestamp() {
|
|||||||
ext.info.timestamp = timestamp;
|
ext.info.timestamp = timestamp;
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -372,8 +366,8 @@ fn test_timestamp() {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_number: test_number_jit, test_number_int}
|
||||||
fn test_number() {
|
fn test_number(vm: Box<super::Evm>) {
|
||||||
let number = 0x1234;
|
let number = 0x1234;
|
||||||
let code = "43600055".from_hex().unwrap();
|
let code = "43600055".from_hex().unwrap();
|
||||||
|
|
||||||
@ -384,7 +378,6 @@ fn test_number() {
|
|||||||
ext.info.number = number;
|
ext.info.number = number;
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -392,8 +385,8 @@ fn test_number() {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_difficulty: test_difficulty_jit, test_difficulty_int}
|
||||||
fn test_difficulty() {
|
fn test_difficulty(vm: Box<super::Evm>) {
|
||||||
let difficulty = U256::from(0x1234);
|
let difficulty = U256::from(0x1234);
|
||||||
let code = "44600055".from_hex().unwrap();
|
let code = "44600055".from_hex().unwrap();
|
||||||
|
|
||||||
@ -404,7 +397,6 @@ fn test_difficulty() {
|
|||||||
ext.info.difficulty = difficulty;
|
ext.info.difficulty = difficulty;
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -412,8 +404,8 @@ fn test_difficulty() {
|
|||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
evm_test!{test_gas_limit: test_gas_limit_jit, test_gas_limit_int}
|
||||||
fn test_gas_limit() {
|
fn test_gas_limit(vm: Box<super::Evm>) {
|
||||||
let gas_limit = U256::from(0x1234);
|
let gas_limit = U256::from(0x1234);
|
||||||
let code = "45600055".from_hex().unwrap();
|
let code = "45600055".from_hex().unwrap();
|
||||||
|
|
||||||
@ -424,10 +416,10 @@ fn test_gas_limit() {
|
|||||||
ext.info.gas_limit = gas_limit;
|
ext.info.gas_limit = gas_limit;
|
||||||
|
|
||||||
let gas_left = {
|
let gas_left = {
|
||||||
let vm = Factory::create();
|
|
||||||
vm.exec(¶ms, &mut ext).unwrap()
|
vm.exec(¶ms, &mut ext).unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
assert_eq!(gas_left, U256::from(79_995));
|
assert_eq!(gas_left, U256::from(79_995));
|
||||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap());
|
assert_eq!(ext.store.get(&H256::new()).unwrap(), &H256::from_str("0000000000000000000000000000000000000000000000000000000000001234").unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user