From da22bbf21c08090ac0aaa96d24ccccdf7fb1fe92 Mon Sep 17 00:00:00 2001 From: Tomusdrw Date: Wed, 3 Feb 2016 11:26:24 +0100 Subject: [PATCH] Tests for some external operations --- ethcore/src/evm/tests.rs | 26 ++++++++++++++++++++++++++ util/src/uint.rs | 24 ++++++++++++------------ 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/ethcore/src/evm/tests.rs b/ethcore/src/evm/tests.rs index 292a0d869..98a6fe696 100644 --- a/ethcore/src/evm/tests.rs +++ b/ethcore/src/evm/tests.rs @@ -766,6 +766,7 @@ fn test_badinstruction(factory: super::Factory) { _ => assert!(false, "Expected bad instruction") } } + evm_test!{test_pop: test_pop_jit, test_pop_int} fn test_pop(factory: super::Factory) { let code = "60f060aa50600055".from_hex().unwrap(); @@ -784,6 +785,31 @@ fn test_pop(factory: super::Factory) { assert_eq!(gas_left, U256::from(79_989)); } +evm_test!{test_extops: test_extops_jit, test_extops_int} +fn test_extops(factory: super::Factory) { + let code = "5a6001555836553a600255386003553460045560016001526016590454600555".from_hex().unwrap(); + + let mut params = ActionParams::default(); + params.gas = U256::from(150_000); + params.gas_price = U256::from(0x32); + params.value = ActionValue::Transfer(U256::from(0x99)); + params.code = Some(code); + let mut ext = FakeExt::new(); + + let gas_left = { + let vm = factory.create(); + vm.exec(params, &mut ext).unwrap() + }; + + assert_store(&ext, 0, "0000000000000000000000000000000000000000000000000000000000000004"); // PC / CALLDATASIZE + assert_store(&ext, 1, "00000000000000000000000000000000000000000000000000000000000249ee"); // GAS + assert_store(&ext, 2, "0000000000000000000000000000000000000000000000000000000000000032"); // GASPRICE + assert_store(&ext, 3, "0000000000000000000000000000000000000000000000000000000000000020"); // CODESIZE + assert_store(&ext, 4, "0000000000000000000000000000000000000000000000000000000000000099"); // CALLVALUE + assert_store(&ext, 5, "0000000000000000000000000000000000000000000000000000000000000032"); + assert_eq!(gas_left, U256::from(29_898)); +} + fn assert_store(ext: &FakeExt, pos: u64, val: &str) { assert_eq!(ext.store.get(&H256::from(pos)).unwrap(), &H256::from_str(val).unwrap()); } diff --git a/util/src/uint.rs b/util/src/uint.rs index 7eee6029e..4660506e9 100644 --- a/util/src/uint.rs +++ b/util/src/uint.rs @@ -60,20 +60,20 @@ macro_rules! panic_on_overflow { } } -/// TODO [Gav Wood] Please document me +/// Generic Uint of unspecified size pub trait Uint: Sized + Default + FromStr + From + FromJson + fmt::Debug + fmt::Display + PartialOrd + Ord + PartialEq + Eq + Hash { /// Size of this type. const SIZE: usize; - /// TODO [Gav Wood] Please document me + /// Returns `Uint(0)` fn zero() -> Self; - /// TODO [Gav Wood] Please document me + /// Returns `Uint(1)` fn one() -> Self; - /// TODO [Gav Wood] Please document me + /// Error returned when `from_dec_str` method fails type FromDecStrErr; - /// TODO [Gav Wood] Please document me + /// Create `Uint` from specified decimal represented by string fn from_dec_str(value: &str) -> Result; /// Conversion to u32 @@ -105,25 +105,25 @@ pub trait Uint: Sized + Default + FromStr + From + FromJson + fmt::Debug + fn overflowing_pow(self, other: Self) -> (Self, bool); - /// TODO [debris] Please document me + /// Add this `Uint` to other returning result and possible overflow fn overflowing_add(self, other: Self) -> (Self, bool); - /// TODO [debris] Please document me + /// Subtract another `Uint` from this returning result and possible overflow fn overflowing_sub(self, other: Self) -> (Self, bool); - /// TODO [debris] Please document me + /// Multiple this `Uint` with other returning result and possible overflow fn overflowing_mul(self, other: Self) -> (Self, bool); - /// TODO [debris] Please document me + /// Divide this `Uint` by other returning result and possible overflow fn overflowing_div(self, other: Self) -> (Self, bool); - /// TODO [debris] Please document me + /// Returns reminder of division of this `Uint` by other and possible overflow fn overflowing_rem(self, other: Self) -> (Self, bool); - /// TODO [debris] Please document me + /// Returns negation of this `Uint` and overflow (always true) fn overflowing_neg(self) -> (Self, bool); - /// TODO [Gav Wood] Please document me + /// Shifts this `Uint` and returns overflow fn overflowing_shl(self, shift: u32) -> (Self, bool); }