mirror of
https://github.com/pezkuwichain/revive-differential-tests.git
synced 2026-06-23 08:21:07 +00:00
Refactor some code into the common crate
This commit is contained in:
Generated
+7
-4
@@ -3953,6 +3953,10 @@ name = "revive-dt-common"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
"futures",
|
||||||
|
"once_cell",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3989,6 +3993,7 @@ dependencies = [
|
|||||||
"clap",
|
"clap",
|
||||||
"indexmap 2.10.0",
|
"indexmap 2.10.0",
|
||||||
"rayon",
|
"rayon",
|
||||||
|
"revive-dt-common",
|
||||||
"revive-dt-compiler",
|
"revive-dt-compiler",
|
||||||
"revive-dt-config",
|
"revive-dt-config",
|
||||||
"revive-dt-format",
|
"revive-dt-format",
|
||||||
@@ -4010,6 +4015,7 @@ dependencies = [
|
|||||||
"alloy-primitives",
|
"alloy-primitives",
|
||||||
"alloy-sol-types",
|
"alloy-sol-types",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
"revive-dt-common",
|
||||||
"revive-dt-node-interaction",
|
"revive-dt-node-interaction",
|
||||||
"semver 1.0.26",
|
"semver 1.0.26",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -4023,6 +4029,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"alloy",
|
"alloy",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
"revive-dt-common",
|
||||||
"revive-dt-config",
|
"revive-dt-config",
|
||||||
"revive-dt-node-interaction",
|
"revive-dt-node-interaction",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -4040,10 +4047,6 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"alloy",
|
"alloy",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"futures",
|
|
||||||
"once_cell",
|
|
||||||
"tokio",
|
|
||||||
"tracing",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@@ -10,3 +10,7 @@ rust-version.workspace = true
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = { workspace = true }
|
anyhow = { workspace = true }
|
||||||
|
futures = { workspace = true }
|
||||||
|
tracing = { workspace = true }
|
||||||
|
once_cell = { workspace = true }
|
||||||
|
tokio = { workspace = true }
|
||||||
|
|||||||
+4
-2
@@ -23,7 +23,7 @@ use tracing::Instrument;
|
|||||||
/// executor to drive an async computation:
|
/// executor to drive an async computation:
|
||||||
///
|
///
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// use revive_dt_node_interaction::*;
|
/// use revive_dt_common::concepts::*;
|
||||||
///
|
///
|
||||||
/// fn blocking_function() {
|
/// fn blocking_function() {
|
||||||
/// let result = BlockingExecutor::execute(async move {
|
/// let result = BlockingExecutor::execute(async move {
|
||||||
@@ -208,7 +208,9 @@ mod test {
|
|||||||
fn panics_in_futures_are_caught() {
|
fn panics_in_futures_are_caught() {
|
||||||
// Act
|
// Act
|
||||||
let result = BlockingExecutor::execute(async move {
|
let result = BlockingExecutor::execute(async move {
|
||||||
panic!("This is a panic!");
|
panic!(
|
||||||
|
"If this panic causes, well, a panic, then this is an issue. If it's caught then all good!"
|
||||||
|
);
|
||||||
0xFFu8
|
0xFFu8
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
mod blocking_executor;
|
||||||
|
|
||||||
|
pub use blocking_executor::*;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
mod files_with_extension_iterator;
|
||||||
|
|
||||||
|
pub use files_with_extension_iterator::*;
|
||||||
@@ -1,2 +1,6 @@
|
|||||||
//! This crate provides common concepts, functionality, types, macros, and more that other crates in
|
//! This crate provides common concepts, functionality, types, macros, and more that other crates in
|
||||||
//! the workspace can benefit from.
|
//! the workspace can benefit from.
|
||||||
|
|
||||||
|
pub mod concepts;
|
||||||
|
pub mod iterators;
|
||||||
|
pub mod macros;
|
||||||
|
|||||||
@@ -12,11 +12,9 @@
|
|||||||
/// pub struct CaseId(usize);
|
/// pub struct CaseId(usize);
|
||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
/// And would also implement a number of methods on this type making it easier
|
/// And would also implement a number of methods on this type making it easier to use.
|
||||||
/// to use.
|
|
||||||
///
|
///
|
||||||
/// These wrapper types become very useful as they make the code a lot easier
|
/// These wrapper types become very useful as they make the code a lot easier to read.
|
||||||
/// to read.
|
|
||||||
///
|
///
|
||||||
/// Take the following as an example:
|
/// Take the following as an example:
|
||||||
///
|
///
|
||||||
@@ -26,26 +24,28 @@
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
/// In the above code it's hard to understand what the various types refer to or
|
/// In the above code it's hard to understand what the various types refer to or what to expect them
|
||||||
/// what to expect them to contain.
|
/// to contain.
|
||||||
///
|
///
|
||||||
/// With these wrapper types we're able to create code that's self-documenting
|
/// With these wrapper types we're able to create code that's self-documenting in that the types
|
||||||
/// in that the types tell us what the code is referring to. The above code is
|
/// tell us what the code is referring to. The above code is transformed into
|
||||||
/// transformed into
|
|
||||||
///
|
///
|
||||||
/// ```rust,ignore
|
/// ```rust,ignore
|
||||||
/// struct State {
|
/// struct State {
|
||||||
/// contracts: HashMap<CaseId, HashMap<ContractName, ContractByteCode>>
|
/// contracts: HashMap<CaseId, HashMap<ContractName, ContractByteCode>>
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
///
|
||||||
|
/// Note that we follow the same syntax for defining wrapper structs but we do not permit the use of
|
||||||
|
/// generics.
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! define_wrapper_type {
|
macro_rules! define_wrapper_type {
|
||||||
(
|
(
|
||||||
$(#[$meta: meta])*
|
$(#[$meta: meta])*
|
||||||
$ident: ident($ty: ty) $(;)?
|
$vis:vis struct $ident: ident($ty: ty);
|
||||||
) => {
|
) => {
|
||||||
$(#[$meta])*
|
$(#[$meta])*
|
||||||
pub struct $ident($ty);
|
$vis struct $ident($ty);
|
||||||
|
|
||||||
impl $ident {
|
impl $ident {
|
||||||
pub fn new(value: $ty) -> Self {
|
pub fn new(value: $ty) -> Self {
|
||||||
@@ -104,3 +104,7 @@ macro_rules! define_wrapper_type {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Technically not needed but this allows for the macro to be found in the `macros` module of the
|
||||||
|
/// crate in addition to being found in the root of the crate.
|
||||||
|
pub use define_wrapper_type;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
mod define_wrapper_type;
|
||||||
|
|
||||||
|
pub use define_wrapper_type::*;
|
||||||
@@ -13,6 +13,7 @@ name = "retester"
|
|||||||
path = "src/main.rs"
|
path = "src/main.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
revive-dt-common = { workspace = true }
|
||||||
revive-dt-compiler = { workspace = true }
|
revive-dt-compiler = { workspace = true }
|
||||||
revive-dt-config = { workspace = true }
|
revive-dt-config = { workspace = true }
|
||||||
revive-dt-format = { workspace = true }
|
revive-dt-format = { workspace = true }
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
//! The test driver handles the compilation and execution of the test cases.
|
//! The test driver handles the compilation and execution of the test cases.
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::fmt::Debug;
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
use alloy::json_abi::JsonAbi;
|
use alloy::json_abi::JsonAbi;
|
||||||
@@ -19,6 +20,9 @@ use alloy::{
|
|||||||
};
|
};
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use indexmap::IndexMap;
|
use indexmap::IndexMap;
|
||||||
|
use serde_json::Value;
|
||||||
|
|
||||||
|
use revive_dt_common::iterators::FilesWithExtensionIterator;
|
||||||
use revive_dt_compiler::{Compiler, SolidityCompiler};
|
use revive_dt_compiler::{Compiler, SolidityCompiler};
|
||||||
use revive_dt_config::Arguments;
|
use revive_dt_config::Arguments;
|
||||||
use revive_dt_format::case::CaseIdx;
|
use revive_dt_format::case::CaseIdx;
|
||||||
@@ -29,11 +33,8 @@ use revive_dt_node::Node;
|
|||||||
use revive_dt_node_interaction::EthereumNode;
|
use revive_dt_node_interaction::EthereumNode;
|
||||||
use revive_dt_report::reporter::{CompilationTask, Report, Span};
|
use revive_dt_report::reporter::{CompilationTask, Report, Span};
|
||||||
use revive_solc_json_interface::SolcStandardJsonOutput;
|
use revive_solc_json_interface::SolcStandardJsonOutput;
|
||||||
use serde_json::Value;
|
|
||||||
use std::fmt::Debug;
|
|
||||||
|
|
||||||
use crate::Platform;
|
use crate::Platform;
|
||||||
use crate::common::*;
|
|
||||||
|
|
||||||
pub struct State<'a, T: Platform> {
|
pub struct State<'a, T: Platform> {
|
||||||
/// The configuration that the framework was started with.
|
/// The configuration that the framework was started with.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ use revive_dt_config::TestingPlatform;
|
|||||||
use revive_dt_node::{Node, geth, kitchensink::KitchensinkNode};
|
use revive_dt_node::{Node, geth, kitchensink::KitchensinkNode};
|
||||||
use revive_dt_node_interaction::EthereumNode;
|
use revive_dt_node_interaction::EthereumNode;
|
||||||
|
|
||||||
pub mod common;
|
|
||||||
pub mod driver;
|
pub mod driver;
|
||||||
|
|
||||||
/// One platform can be tested differentially against another.
|
/// One platform can be tested differentially against another.
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ repository.workspace = true
|
|||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
revive-dt-common = { workspace = true }
|
||||||
revive-dt-node-interaction = { workspace = true }
|
revive-dt-node-interaction = { workspace = true }
|
||||||
|
|
||||||
alloy = { workspace = true }
|
alloy = { workspace = true }
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
use revive_dt_common::macros::define_wrapper_type;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
define_wrapper_type,
|
|
||||||
input::{Expected, Input},
|
input::{Expected, Input},
|
||||||
mode::Mode,
|
mode::Mode,
|
||||||
};
|
};
|
||||||
@@ -45,5 +46,5 @@ impl Case {
|
|||||||
define_wrapper_type!(
|
define_wrapper_type!(
|
||||||
/// A wrapper type for the index of test cases found in metadata file.
|
/// A wrapper type for the index of test cases found in metadata file.
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
CaseIdx(usize);
|
pub struct CaseIdx(usize);
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -11,9 +11,10 @@ use alloy_primitives::{FixedBytes, utils::parse_units};
|
|||||||
use semver::VersionReq;
|
use semver::VersionReq;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use revive_dt_common::macros::define_wrapper_type;
|
||||||
use revive_dt_node_interaction::EthereumNode;
|
use revive_dt_node_interaction::EthereumNode;
|
||||||
|
|
||||||
use crate::{define_wrapper_type, metadata::ContractInstance};
|
use crate::metadata::ContractInstance;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)]
|
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
@@ -84,7 +85,7 @@ pub enum Method {
|
|||||||
|
|
||||||
define_wrapper_type!(
|
define_wrapper_type!(
|
||||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
EtherValue(U256);
|
pub struct EtherValue(U256);
|
||||||
);
|
);
|
||||||
|
|
||||||
impl Serialize for EtherValue {
|
impl Serialize for EtherValue {
|
||||||
|
|||||||
@@ -3,6 +3,5 @@
|
|||||||
pub mod case;
|
pub mod case;
|
||||||
pub mod corpus;
|
pub mod corpus;
|
||||||
pub mod input;
|
pub mod input;
|
||||||
pub mod macros;
|
|
||||||
pub mod metadata;
|
pub mod metadata;
|
||||||
pub mod mode;
|
pub mod mode;
|
||||||
|
|||||||
@@ -9,9 +9,10 @@ use std::{
|
|||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use revive_dt_common::macros::define_wrapper_type;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
case::Case,
|
case::Case,
|
||||||
define_wrapper_type,
|
|
||||||
mode::{Mode, SolcMode},
|
mode::{Mode, SolcMode},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -217,18 +218,22 @@ define_wrapper_type!(
|
|||||||
/// Represents a contract instance found a metadata file.
|
/// Represents a contract instance found a metadata file.
|
||||||
///
|
///
|
||||||
/// Typically, this is used as the key to the "contracts" field of metadata files.
|
/// Typically, this is used as the key to the "contracts" field of metadata files.
|
||||||
#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
|
#[derive(
|
||||||
|
Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize,
|
||||||
|
)]
|
||||||
#[serde(transparent)]
|
#[serde(transparent)]
|
||||||
ContractInstance(String);
|
pub struct ContractInstance(String);
|
||||||
);
|
);
|
||||||
|
|
||||||
define_wrapper_type!(
|
define_wrapper_type!(
|
||||||
/// Represents a contract identifier found a metadata file.
|
/// Represents a contract identifier found a metadata file.
|
||||||
///
|
///
|
||||||
/// A contract identifier is the name of the contract in the source code.
|
/// A contract identifier is the name of the contract in the source code.
|
||||||
#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
|
#[derive(
|
||||||
|
Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize,
|
||||||
|
)]
|
||||||
#[serde(transparent)]
|
#[serde(transparent)]
|
||||||
ContractIdent(String);
|
pub struct ContractIdent(String);
|
||||||
);
|
);
|
||||||
|
|
||||||
/// Represents an identifier used for contracts.
|
/// Represents an identifier used for contracts.
|
||||||
|
|||||||
@@ -11,7 +11,3 @@ rust-version.workspace = true
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
alloy = { workspace = true }
|
alloy = { workspace = true }
|
||||||
anyhow = { workspace = true }
|
anyhow = { workspace = true }
|
||||||
futures = { workspace = true }
|
|
||||||
tracing = { workspace = true }
|
|
||||||
once_cell = { workspace = true }
|
|
||||||
tokio = { workspace = true }
|
|
||||||
|
|||||||
@@ -6,9 +6,6 @@ use alloy::rpc::types::trace::geth::{DiffMode, GethDebugTracingOptions, GethTrac
|
|||||||
use alloy::rpc::types::{TransactionReceipt, TransactionRequest};
|
use alloy::rpc::types::{TransactionReceipt, TransactionRequest};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
mod blocking_executor;
|
|
||||||
pub use blocking_executor::*;
|
|
||||||
|
|
||||||
/// An interface for all interactions with Ethereum compatible nodes.
|
/// An interface for all interactions with Ethereum compatible nodes.
|
||||||
pub trait EthereumNode {
|
pub trait EthereumNode {
|
||||||
/// Execute the [TransactionRequest] and return a [TransactionReceipt].
|
/// Execute the [TransactionRequest] and return a [TransactionReceipt].
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ tracing = { workspace = true }
|
|||||||
tokio = { workspace = true }
|
tokio = { workspace = true }
|
||||||
|
|
||||||
revive-dt-node-interaction = { workspace = true }
|
revive-dt-node-interaction = { workspace = true }
|
||||||
|
revive-dt-common = { workspace = true }
|
||||||
revive-dt-config = { workspace = true }
|
revive-dt-config = { workspace = true }
|
||||||
|
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
|
|||||||
@@ -25,8 +25,9 @@ use alloy::{
|
|||||||
},
|
},
|
||||||
signers::local::PrivateKeySigner,
|
signers::local::PrivateKeySigner,
|
||||||
};
|
};
|
||||||
|
use revive_dt_common::concepts::BlockingExecutor;
|
||||||
use revive_dt_config::Arguments;
|
use revive_dt_config::Arguments;
|
||||||
use revive_dt_node_interaction::{BlockingExecutor, EthereumNode};
|
use revive_dt_node_interaction::EthereumNode;
|
||||||
use tracing::Level;
|
use tracing::Level;
|
||||||
|
|
||||||
use crate::{Node, common::FallbackGasFiller, constants::INITIAL_BALANCE};
|
use crate::{Node, common::FallbackGasFiller, constants::INITIAL_BALANCE};
|
||||||
|
|||||||
@@ -36,8 +36,9 @@ use sp_core::crypto::Ss58Codec;
|
|||||||
use sp_runtime::AccountId32;
|
use sp_runtime::AccountId32;
|
||||||
use tracing::Level;
|
use tracing::Level;
|
||||||
|
|
||||||
|
use revive_dt_common::concepts::BlockingExecutor;
|
||||||
use revive_dt_config::Arguments;
|
use revive_dt_config::Arguments;
|
||||||
use revive_dt_node_interaction::{BlockingExecutor, EthereumNode};
|
use revive_dt_node_interaction::EthereumNode;
|
||||||
|
|
||||||
use crate::{Node, common::FallbackGasFiller, constants::INITIAL_BALANCE};
|
use crate::{Node, common::FallbackGasFiller, constants::INITIAL_BALANCE};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user