mirror of
https://github.com/pezkuwichain/revive-differential-tests.git
synced 2026-05-08 23:37:57 +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"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"futures",
|
||||
"once_cell",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3989,6 +3993,7 @@ dependencies = [
|
||||
"clap",
|
||||
"indexmap 2.10.0",
|
||||
"rayon",
|
||||
"revive-dt-common",
|
||||
"revive-dt-compiler",
|
||||
"revive-dt-config",
|
||||
"revive-dt-format",
|
||||
@@ -4010,6 +4015,7 @@ dependencies = [
|
||||
"alloy-primitives",
|
||||
"alloy-sol-types",
|
||||
"anyhow",
|
||||
"revive-dt-common",
|
||||
"revive-dt-node-interaction",
|
||||
"semver 1.0.26",
|
||||
"serde",
|
||||
@@ -4023,6 +4029,7 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"alloy",
|
||||
"anyhow",
|
||||
"revive-dt-common",
|
||||
"revive-dt-config",
|
||||
"revive-dt-node-interaction",
|
||||
"serde",
|
||||
@@ -4040,10 +4047,6 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"alloy",
|
||||
"anyhow",
|
||||
"futures",
|
||||
"once_cell",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -10,3 +10,7 @@ rust-version.workspace = true
|
||||
|
||||
[dependencies]
|
||||
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:
|
||||
///
|
||||
/// ```rust
|
||||
/// use revive_dt_node_interaction::*;
|
||||
/// use revive_dt_common::concepts::*;
|
||||
///
|
||||
/// fn blocking_function() {
|
||||
/// let result = BlockingExecutor::execute(async move {
|
||||
@@ -208,7 +208,9 @@ mod test {
|
||||
fn panics_in_futures_are_caught() {
|
||||
// Act
|
||||
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
|
||||
});
|
||||
|
||||
@@ -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
|
||||
//! the workspace can benefit from.
|
||||
|
||||
pub mod concepts;
|
||||
pub mod iterators;
|
||||
pub mod macros;
|
||||
|
||||
@@ -12,11 +12,9 @@
|
||||
/// pub struct CaseId(usize);
|
||||
/// ```
|
||||
///
|
||||
/// And would also implement a number of methods on this type making it easier
|
||||
/// to use.
|
||||
/// And would also implement a number of methods on this type making it easier to use.
|
||||
///
|
||||
/// These wrapper types become very useful as they make the code a lot easier
|
||||
/// to read.
|
||||
/// These wrapper types become very useful as they make the code a lot easier to read.
|
||||
///
|
||||
/// 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
|
||||
/// what to expect them to contain.
|
||||
/// In the above code it's hard to understand what the various types refer to or what to expect them
|
||||
/// to contain.
|
||||
///
|
||||
/// With these wrapper types we're able to create code that's self-documenting
|
||||
/// in that the types tell us what the code is referring to. The above code is
|
||||
/// transformed into
|
||||
/// With these wrapper types we're able to create code that's self-documenting in that the types
|
||||
/// tell us what the code is referring to. The above code is transformed into
|
||||
///
|
||||
/// ```rust,ignore
|
||||
/// struct State {
|
||||
/// 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_rules! define_wrapper_type {
|
||||
(
|
||||
$(#[$meta: meta])*
|
||||
$ident: ident($ty: ty) $(;)?
|
||||
$vis:vis struct $ident: ident($ty: ty);
|
||||
) => {
|
||||
$(#[$meta])*
|
||||
pub struct $ident($ty);
|
||||
$vis struct $ident($ty);
|
||||
|
||||
impl $ident {
|
||||
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"
|
||||
|
||||
[dependencies]
|
||||
revive-dt-common = { workspace = true }
|
||||
revive-dt-compiler = { workspace = true }
|
||||
revive-dt-config = { workspace = true }
|
||||
revive-dt-format = { workspace = true }
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
//! The test driver handles the compilation and execution of the test cases.
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::fmt::Debug;
|
||||
use std::marker::PhantomData;
|
||||
|
||||
use alloy::json_abi::JsonAbi;
|
||||
@@ -19,6 +20,9 @@ use alloy::{
|
||||
};
|
||||
use anyhow::Context;
|
||||
use indexmap::IndexMap;
|
||||
use serde_json::Value;
|
||||
|
||||
use revive_dt_common::iterators::FilesWithExtensionIterator;
|
||||
use revive_dt_compiler::{Compiler, SolidityCompiler};
|
||||
use revive_dt_config::Arguments;
|
||||
use revive_dt_format::case::CaseIdx;
|
||||
@@ -29,11 +33,8 @@ use revive_dt_node::Node;
|
||||
use revive_dt_node_interaction::EthereumNode;
|
||||
use revive_dt_report::reporter::{CompilationTask, Report, Span};
|
||||
use revive_solc_json_interface::SolcStandardJsonOutput;
|
||||
use serde_json::Value;
|
||||
use std::fmt::Debug;
|
||||
|
||||
use crate::Platform;
|
||||
use crate::common::*;
|
||||
|
||||
pub struct State<'a, T: Platform> {
|
||||
/// 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_interaction::EthereumNode;
|
||||
|
||||
pub mod common;
|
||||
pub mod driver;
|
||||
|
||||
/// One platform can be tested differentially against another.
|
||||
|
||||
@@ -9,6 +9,7 @@ repository.workspace = true
|
||||
rust-version.workspace = true
|
||||
|
||||
[dependencies]
|
||||
revive-dt-common = { workspace = true }
|
||||
revive-dt-node-interaction = { workspace = true }
|
||||
|
||||
alloy = { workspace = true }
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use serde::Deserialize;
|
||||
|
||||
use revive_dt_common::macros::define_wrapper_type;
|
||||
|
||||
use crate::{
|
||||
define_wrapper_type,
|
||||
input::{Expected, Input},
|
||||
mode::Mode,
|
||||
};
|
||||
@@ -45,5 +46,5 @@ impl Case {
|
||||
define_wrapper_type!(
|
||||
/// A wrapper type for the index of test cases found in metadata file.
|
||||
#[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 serde::{Deserialize, Serialize};
|
||||
|
||||
use revive_dt_common::macros::define_wrapper_type;
|
||||
use revive_dt_node_interaction::EthereumNode;
|
||||
|
||||
use crate::{define_wrapper_type, metadata::ContractInstance};
|
||||
use crate::metadata::ContractInstance;
|
||||
|
||||
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)]
|
||||
pub struct Input {
|
||||
@@ -84,7 +85,7 @@ pub enum Method {
|
||||
|
||||
define_wrapper_type!(
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||
EtherValue(U256);
|
||||
pub struct EtherValue(U256);
|
||||
);
|
||||
|
||||
impl Serialize for EtherValue {
|
||||
|
||||
@@ -3,6 +3,5 @@
|
||||
pub mod case;
|
||||
pub mod corpus;
|
||||
pub mod input;
|
||||
pub mod macros;
|
||||
pub mod metadata;
|
||||
pub mod mode;
|
||||
|
||||
@@ -9,9 +9,10 @@ use std::{
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use revive_dt_common::macros::define_wrapper_type;
|
||||
|
||||
use crate::{
|
||||
case::Case,
|
||||
define_wrapper_type,
|
||||
mode::{Mode, SolcMode},
|
||||
};
|
||||
|
||||
@@ -217,18 +218,22 @@ define_wrapper_type!(
|
||||
/// Represents a contract instance found a metadata file.
|
||||
///
|
||||
/// 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)]
|
||||
ContractInstance(String);
|
||||
pub struct ContractInstance(String);
|
||||
);
|
||||
|
||||
define_wrapper_type!(
|
||||
/// Represents a contract identifier found a metadata file.
|
||||
///
|
||||
/// 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)]
|
||||
ContractIdent(String);
|
||||
pub struct ContractIdent(String);
|
||||
);
|
||||
|
||||
/// Represents an identifier used for contracts.
|
||||
|
||||
@@ -11,7 +11,3 @@ rust-version.workspace = true
|
||||
[dependencies]
|
||||
alloy = { 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 anyhow::Result;
|
||||
|
||||
mod blocking_executor;
|
||||
pub use blocking_executor::*;
|
||||
|
||||
/// An interface for all interactions with Ethereum compatible nodes.
|
||||
pub trait EthereumNode {
|
||||
/// Execute the [TransactionRequest] and return a [TransactionReceipt].
|
||||
|
||||
@@ -15,6 +15,7 @@ tracing = { workspace = true }
|
||||
tokio = { workspace = true }
|
||||
|
||||
revive-dt-node-interaction = { workspace = true }
|
||||
revive-dt-common = { workspace = true }
|
||||
revive-dt-config = { workspace = true }
|
||||
|
||||
serde = { workspace = true }
|
||||
|
||||
@@ -25,8 +25,9 @@ use alloy::{
|
||||
},
|
||||
signers::local::PrivateKeySigner,
|
||||
};
|
||||
use revive_dt_common::concepts::BlockingExecutor;
|
||||
use revive_dt_config::Arguments;
|
||||
use revive_dt_node_interaction::{BlockingExecutor, EthereumNode};
|
||||
use revive_dt_node_interaction::EthereumNode;
|
||||
use tracing::Level;
|
||||
|
||||
use crate::{Node, common::FallbackGasFiller, constants::INITIAL_BALANCE};
|
||||
|
||||
@@ -36,8 +36,9 @@ use sp_core::crypto::Ss58Codec;
|
||||
use sp_runtime::AccountId32;
|
||||
use tracing::Level;
|
||||
|
||||
use revive_dt_common::concepts::BlockingExecutor;
|
||||
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};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user