diff --git a/Cargo.lock b/Cargo.lock index 25a0f0d..17db11d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,7 +68,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", "syn-solidity", "tiny-keccak", ] @@ -142,9 +142,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "ark-ff" @@ -284,7 +284,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -473,7 +473,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -738,9 +738,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -857,9 +857,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -1029,7 +1029,7 @@ dependencies = [ [[package]] name = "inkwell" version = "0.4.0" -source = "git+https://github.com/TheDan64/inkwell.git#5d5a531c765a6ad37aa6591c0287d0f9109fff62" +source = "git+https://github.com/TheDan64/inkwell.git#6c0fb56b3554e939f9ca61b465043d6a84fb7b95" dependencies = [ "either", "inkwell_internals", @@ -1043,11 +1043,11 @@ dependencies = [ [[package]] name = "inkwell_internals" version = "0.9.0" -source = "git+https://github.com/TheDan64/inkwell.git#5d5a531c765a6ad37aa6591c0287d0f9109fff62" +source = "git+https://github.com/TheDan64/inkwell.git#6c0fb56b3554e939f9ca61b465043d6a84fb7b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -1125,9 +1125,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb8515fff80ed850aea4a1595f2e519c003e2a00a82fe168ebf5269196caf444" +checksum = "47a3633291834c4fbebf8673acbc1b04ec9d151418ff9b8e26dcd79129928758" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -1186,7 +1186,7 @@ dependencies = [ "lazy_static", "libc", "regex-lite", - "semver 1.0.22", + "semver 1.0.23", ] [[package]] @@ -1218,9 +1218,9 @@ dependencies = [ [[package]] name = "num" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ "num-bigint", "num-complex", @@ -1232,20 +1232,19 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-complex" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -1272,11 +1271,10 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", "num-bigint", "num-integer", "num-traits", @@ -1322,9 +1320,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.9" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ "arrayvec", "bitvec", @@ -1336,11 +1334,11 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.9" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate 2.0.2", + "proc-macro-crate", "proc-macro2", "quote", "syn 1.0.109", @@ -1348,9 +1346,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "path-slash" @@ -1487,22 +1485,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" -dependencies = [ - "toml_datetime", - "toml_edit 0.20.2", + "toml_edit", ] [[package]] @@ -1531,9 +1518,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] @@ -1745,6 +1732,7 @@ dependencies = [ "env_logger", "hex", "polkavm", + "rayon", "revive-common", "revive-differential", "revive-llvm-context", @@ -1787,7 +1775,7 @@ dependencies = [ "revive-common", "revive-linker", "revive-stdlib", - "semver 1.0.22", + "semver 1.0.23", "serde", "sha2", "sha3", @@ -1812,7 +1800,7 @@ dependencies = [ "regex", "revive-common", "revive-llvm-context", - "semver 1.0.22", + "semver 1.0.23", "serde", "serde_json", "sha3", @@ -1880,9 +1868,9 @@ checksum = "f86854cf50259291520509879a5c294c3c9a4c334e9ff65071c51e42ef1e2343" [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -1911,7 +1899,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.22", + "semver 1.0.23", ] [[package]] @@ -1941,9 +1929,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -1956,9 +1944,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.2" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" dependencies = [ "bitvec", "cfg-if", @@ -1969,11 +1957,11 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.2" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate", "proc-macro2", "quote", "syn 1.0.109", @@ -2004,9 +1992,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ "serde", ] @@ -2022,29 +2010,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.200" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.200" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -2095,9 +2083,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bac61da6b35ad76b195eb4771210f947734321a8d81d7738e1580d953bc7a15e" +checksum = "a9b57fd861253bff08bb1919e995f90ba8f4889de2726091c8876f3a4e823b40" dependencies = [ "cc", "cfg-if", @@ -2209,9 +2197,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -2227,7 +2215,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -2259,22 +2247,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -2298,26 +2286,15 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", @@ -2436,7 +2413,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", "wasm-bindgen-shared", ] @@ -2458,7 +2435,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2682,22 +2659,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.33" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "087eca3c1eaf8c47b94d02790dd086cd594b912d2043d4de4bfdd466b3befb7c" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.33" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f4b6c273f496d8fd4eaf18853e6b448760225dc030ff2c485a786859aea6393" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -2717,7 +2694,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] diff --git a/Makefile b/Makefile index 05cc11a..92f1e1b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: install format test test-solidity test-cli test-integration clean +.PHONY: install format test test-solidity test-cli test-integration test-workspace clean install: install-bin install-npm @@ -11,7 +11,8 @@ install-npm: format: cargo fmt --all --check -test: format install test-integration test-cli test-solidity +test: format install test-cli test-workspace + cargo test --workspace test-integration: install-bin cargo test --package revive-integration @@ -19,6 +20,9 @@ test-integration: install-bin test-solidity: install cargo test --package revive-solidity +test-workspace: install + cargo test --workspace + test-cli: install npm run test:cli diff --git a/crates/integration/Cargo.toml b/crates/integration/Cargo.toml index 7e772d6..04bcba8 100644 --- a/crates/integration/Cargo.toml +++ b/crates/integration/Cargo.toml @@ -21,3 +21,4 @@ revive-common = { path = "../common" } sha1 = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } +rayon = { workspace = true } diff --git a/crates/integration/codesize.json b/crates/integration/codesize.json index 07a16d6..272e01b 100644 --- a/crates/integration/codesize.json +++ b/crates/integration/codesize.json @@ -1,7 +1,9 @@ { "Baseline": 3917, "Computation": 7363, - "ERC20": 53193, + "DivisionArithmetics": 43028, + "ERC20": 53019, "Fibonacci": 5965, - "Flipper": 4336 + "Flipper": 4336, + "SHA1": 35878 } \ No newline at end of file diff --git a/crates/integration/src/cases.rs b/crates/integration/src/cases.rs index 69b340b..71e5774 100644 --- a/crates/integration/src/cases.rs +++ b/crates/integration/src/cases.rs @@ -95,6 +95,12 @@ sol!( } ); +sol!( + contract MStore8 { + function mStore8(uint value) public pure returns (uint256 word); + } +); + impl Contract { pub fn baseline() -> Self { let code = include_str!("../contracts/Baseline.sol"); @@ -282,10 +288,23 @@ impl Contract { calldata: DivisionArithmetics::smodCall::new((n, d)).abi_encode(), } } + + pub fn mstore8(value: U256) -> Self { + let code = include_str!("../contracts/mStore8.sol"); + let name = "MStore8"; + + Self { + evm_runtime: crate::compile_evm_bin_runtime(name, code), + pvm_runtime: crate::compile_blob(name, code), + calldata: MStore8::mStore8Call::new((value,)).abi_encode(), + } + } } #[cfg(test)] mod tests { + use alloy_primitives::U256; + use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; use serde::{de::Deserialize, Serialize}; use std::{collections::BTreeMap, fs::File}; @@ -304,33 +323,37 @@ mod tests { }) .ok(); - let sizes = BTreeMap::from([ - ("Baseline", Contract::baseline().pvm_runtime.len()), - ("Flipper", Contract::flipper().pvm_runtime.len()), - ("Computation", Contract::odd_product(0).pvm_runtime.len()), - ("Fibonacci", Contract::fib_iterative(0).pvm_runtime.len()), - ("ERC20", Contract::erc20().pvm_runtime.len()), - ]); + let cases: [(&str, Box Contract + Send + Sync>); 7] = [ + ("Baseline", Box::new(|| Contract::baseline())), + ("Flipper", Box::new(|| Contract::flipper())), + ("Computation", Box::new(|| Contract::odd_product(0))), + ("Fibonacci", Box::new(|| Contract::fib_iterative(0))), + ("ERC20", Box::new(|| Contract::erc20())), + ("SHA1", Box::new(|| Contract::sha1(Vec::new()))), + ( + "DivisionArithmetics", + Box::new(|| Contract::division_arithmetics_div(U256::ZERO, U256::ZERO)), + ), + ]; - for (name, bytes) in sizes.iter() { - let change = existing - .as_ref() - .and_then(|map| map.get(*name)) - .map(|old| { - let new = *bytes as f32; - let old = *old as f32; - let p = (new - old) / new * 100.0; - format!("({p}% change from {old} bytes)") - }) - .unwrap_or_default(); - - println!("{name}: {bytes} bytes {change}"); - } - - sizes + cases + .par_iter() + .map(|(name, f)| (*name, f().pvm_runtime.len())) + .inspect(|(name, bytes)| { + let change = existing + .as_ref() + .and_then(|map| map.get(*name)) + .map(|old| { + let p = (*bytes - *old) as f32 / *old as f32 * 100.0; + format!("({p}% change from {old} bytes)") + }) + .unwrap_or_default(); + println!("{name}: {bytes} bytes {change}"); + }) + .collect::>() .serialize(&mut serde_json::Serializer::pretty( File::create(path).unwrap(), )) - .unwrap_or_else(|err| panic!("can not write codesize data to '{}': {}", path, err)); + .unwrap_or_else(|err| panic!("can not write codesize data to '{path}': {err}")); } } diff --git a/crates/integration/src/tests.rs b/crates/integration/src/tests.rs index f5042cc..0ee375d 100644 --- a/crates/integration/src/tests.rs +++ b/crates/integration/src/tests.rs @@ -1,5 +1,6 @@ use alloy_primitives::{Address, FixedBytes, Keccak256, I256, U256}; use alloy_sol_types::{sol, SolCall}; +use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; use sha1::Digest; use crate::{ @@ -169,26 +170,7 @@ fn msize_non_word_sized_access() { #[test] fn mstore8() { - sol!( - #[derive(Debug, PartialEq, Eq)] - contract MStore8 { - function mStore8(uint value) public pure returns (uint256 word); - } - ); - let code = crate::compile_blob("MStore8", include_str!("../contracts/mStore8.sol")); - let (mut instance, export) = mock_runtime::prepare(&code, None); - - let mut assert = |parameter, expected| { - let input = MStore8::mStore8Call::new((parameter,)).abi_encode(); - let state = crate::mock_runtime::call(State::new(input), &mut instance, export); - - assert_eq!(state.output.flags, 0); - - let received = U256::from_be_bytes::<32>(state.output.data.try_into().unwrap()); - assert_eq!(received, expected); - }; - - for (parameter, expected) in [ + for (received, expected) in [ (U256::MIN, U256::MIN), ( U256::from(1), @@ -247,8 +229,16 @@ fn mstore8() { ) .unwrap(), ), - ] { - assert(parameter, expected); + ] + .par_iter() + .map(|(parameter, expected)| { + let state = assert_success(Contract::mstore8(*parameter), true); + let received = U256::from_be_bytes::<32>(state.output.data.try_into().unwrap()); + (received, *expected) + }) + .collect::>() + { + assert_eq!(received, expected); } } @@ -302,16 +292,22 @@ fn unsigned_division() { let one = U256::from(1); let two = U256::from(2); let five = U256::from(5); - for (n, d, q) in [ + for (received, expected) in [ (five, five, one), (five, one, five), (U256::ZERO, U256::MAX, U256::ZERO), (five, two, two), (one, U256::ZERO, U256::ZERO), - ] { - let state = assert_success(Contract::division_arithmetics_div(n, d), true); + ] + .par_iter() + .map(|(n, d, q)| { + let state = assert_success(Contract::division_arithmetics_div(*n, *d), true); let received = U256::from_be_bytes::<32>(state.output.data.try_into().unwrap()); - assert_eq!(received, q); + (received, *q) + }) + .collect::>() + { + assert_eq!(received, expected) } } @@ -322,7 +318,7 @@ fn signed_division() { let minus_two = I256::try_from(-2).unwrap(); let five = I256::try_from(5).unwrap(); let minus_five = I256::try_from(-5).unwrap(); - for (n, d, q) in [ + for (received, expected) in [ (five, five, one), (five, one, five), (I256::ZERO, I256::MAX, I256::ZERO), @@ -334,10 +330,16 @@ fn signed_division() { (minus_five, two, minus_two), (I256::MINUS_ONE, I256::MIN, I256::ZERO), (one, I256::ZERO, I256::ZERO), - ] { - let state = assert_success(Contract::division_arithmetics_sdiv(n, d), true); + ] + .par_iter() + .map(|(n, d, q)| { + let state = assert_success(Contract::division_arithmetics_sdiv(*n, *d), true); let received = I256::from_be_bytes::<32>(state.output.data.try_into().unwrap()); - assert_eq!(received, q); + (received, *q) + }) + .collect::>() + { + assert_eq!(received, expected); } } @@ -346,7 +348,7 @@ fn unsigned_remainder() { let one = U256::from(1); let two = U256::from(2); let five = U256::from(5); - for (n, d, q) in [ + for (received, expected) in [ (five, five, U256::ZERO), (five, one, U256::ZERO), (U256::ZERO, U256::MAX, U256::ZERO), @@ -354,10 +356,16 @@ fn unsigned_remainder() { (five, two, one), (two, five, two), (U256::MAX, U256::ZERO, U256::ZERO), - ] { - let state = assert_success(Contract::division_arithmetics_mod(n, d), true); + ] + .par_iter() + .map(|(n, d, q)| { + let state = assert_success(Contract::division_arithmetics_mod(*n, *d), true); let received = U256::from_be_bytes::<32>(state.output.data.try_into().unwrap()); - assert_eq!(received, q); + (received, *q) + }) + .collect::>() + { + assert_eq!(received, expected); } } @@ -368,7 +376,7 @@ fn signed_remainder() { let minus_two = I256::try_from(-2).unwrap(); let five = I256::try_from(5).unwrap(); let minus_five = I256::try_from(-5).unwrap(); - for (n, d, q) in [ + for (received, expected) in [ (five, five, I256::ZERO), (five, one, I256::ZERO), (I256::ZERO, I256::MAX, I256::ZERO), @@ -386,9 +394,15 @@ fn signed_remainder() { (minus_two, minus_five, minus_two), (I256::MIN, I256::MINUS_ONE, I256::ZERO), (I256::ZERO, I256::ZERO, I256::ZERO), - ] { - let state = assert_success(Contract::division_arithmetics_smod(n, d), true); + ] + .par_iter() + .map(|(n, d, q)| { + let state = assert_success(Contract::division_arithmetics_smod(*n, *d), true); let received = I256::from_be_bytes::<32>(state.output.data.try_into().unwrap()); - assert_eq!(received, q); + (received, *q) + }) + .collect::>() + { + assert_eq!(received, expected); } } diff --git a/crates/llvm-context/src/polkavm/context/tests.rs b/crates/llvm-context/src/polkavm/context/tests.rs index 1ebb6f1..5498822 100644 --- a/crates/llvm-context/src/polkavm/context/tests.rs +++ b/crates/llvm-context/src/polkavm/context/tests.rs @@ -33,7 +33,7 @@ pub fn check_attribute_null_pointer_is_invalid() { Some(inkwell::module::Linkage::External), ) .expect("Failed to add function"); - assert!(function + assert!(!function .borrow() .declaration() .value