mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-10 01:33:07 +00:00
91 lines
2.6 KiB
Rust
91 lines
2.6 KiB
Rust
use anyhow::Result;
|
|
use ethereum_types::U256;
|
|
|
|
use crate::cpu::kernel::aggregator::KERNEL;
|
|
use crate::cpu::kernel::interpreter::Interpreter;
|
|
use crate::memory::segments::Segment;
|
|
|
|
#[test]
|
|
fn test_mload_packing_1_byte() -> Result<()> {
|
|
let mstore_unpacking = KERNEL.global_labels["mload_packing"];
|
|
|
|
let retdest = 0xDEADBEEFu32.into();
|
|
let len = 1.into();
|
|
let offset = 2.into();
|
|
let segment = (Segment::RlpRaw as u32).into();
|
|
let context = 0.into();
|
|
let initial_stack = vec![retdest, len, offset, segment, context];
|
|
|
|
let mut interpreter = Interpreter::new_with_kernel(mstore_unpacking, initial_stack);
|
|
interpreter.set_rlp_memory(vec![0, 0, 0xAB]);
|
|
|
|
interpreter.run()?;
|
|
assert_eq!(interpreter.stack(), vec![0xAB.into()]);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[test]
|
|
fn test_mload_packing_3_bytes() -> Result<()> {
|
|
let mstore_unpacking = KERNEL.global_labels["mload_packing"];
|
|
|
|
let retdest = 0xDEADBEEFu32.into();
|
|
let len = 3.into();
|
|
let offset = 2.into();
|
|
let segment = (Segment::RlpRaw as u32).into();
|
|
let context = 0.into();
|
|
let initial_stack = vec![retdest, len, offset, segment, context];
|
|
|
|
let mut interpreter = Interpreter::new_with_kernel(mstore_unpacking, initial_stack);
|
|
interpreter.set_rlp_memory(vec![0, 0, 0xAB, 0xCD, 0xEF]);
|
|
|
|
interpreter.run()?;
|
|
assert_eq!(interpreter.stack(), vec![0xABCDEF.into()]);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[test]
|
|
fn test_mload_packing_32_bytes() -> Result<()> {
|
|
let mstore_unpacking = KERNEL.global_labels["mload_packing"];
|
|
|
|
let retdest = 0xDEADBEEFu32.into();
|
|
let len = 32.into();
|
|
let offset = 0.into();
|
|
let segment = (Segment::RlpRaw as u32).into();
|
|
let context = 0.into();
|
|
let initial_stack = vec![retdest, len, offset, segment, context];
|
|
|
|
let mut interpreter = Interpreter::new_with_kernel(mstore_unpacking, initial_stack);
|
|
interpreter.set_rlp_memory(vec![0xFF; 32]);
|
|
|
|
interpreter.run()?;
|
|
assert_eq!(interpreter.stack(), vec![U256::MAX]);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[test]
|
|
fn test_mstore_unpacking() -> Result<()> {
|
|
let mstore_unpacking = KERNEL.global_labels["mstore_unpacking"];
|
|
|
|
let retdest = 0xDEADBEEFu32.into();
|
|
let len = 4.into();
|
|
let value = 0xABCD1234u32.into();
|
|
let offset = 0.into();
|
|
let segment = (Segment::TxnData as u32).into();
|
|
let context = 0.into();
|
|
let initial_stack = vec![retdest, len, value, offset, segment, context];
|
|
|
|
let mut interpreter = Interpreter::new_with_kernel(mstore_unpacking, initial_stack);
|
|
|
|
interpreter.run()?;
|
|
assert_eq!(interpreter.stack(), vec![4.into()]);
|
|
assert_eq!(
|
|
&interpreter.get_txn_data(),
|
|
&[0xAB.into(), 0xCD.into(), 0x12.into(), 0x34.into()]
|
|
);
|
|
|
|
Ok(())
|
|
}
|