mirror of
https://github.com/pezkuwichain/revive-differential-tests.git
synced 2026-04-27 14:57:58 +00:00
260ac5d98e
* Add support for profiles * Set a default workdir for debug profile
97 lines
3.4 KiB
Rust
97 lines
3.4 KiB
Rust
mod differential_benchmarks;
|
|
mod differential_tests;
|
|
mod helpers;
|
|
|
|
use anyhow::Context as _;
|
|
use clap::Parser;
|
|
use revive_dt_report::ReportAggregator;
|
|
use schemars::schema_for;
|
|
use tracing::{info, level_filters::LevelFilter};
|
|
use tracing_subscriber::{EnvFilter, FmtSubscriber};
|
|
|
|
use revive_dt_config::Context;
|
|
use revive_dt_core::Platform;
|
|
use revive_dt_format::metadata::Metadata;
|
|
|
|
use crate::{
|
|
differential_benchmarks::handle_differential_benchmarks,
|
|
differential_tests::handle_differential_tests,
|
|
};
|
|
|
|
fn main() -> anyhow::Result<()> {
|
|
let (writer, _guard) = tracing_appender::non_blocking::NonBlockingBuilder::default()
|
|
.lossy(false)
|
|
// Assuming that each line contains 255 characters and that each character is one byte, then
|
|
// this means that our buffer is about 4GBs large.
|
|
.buffered_lines_limit(0x1000000)
|
|
.thread_name("buffered writer")
|
|
.finish(std::io::stdout());
|
|
|
|
let subscriber = FmtSubscriber::builder()
|
|
.with_writer(writer)
|
|
.with_thread_ids(false)
|
|
.with_thread_names(false)
|
|
.with_env_filter(
|
|
EnvFilter::builder()
|
|
.with_default_directive(LevelFilter::OFF.into())
|
|
.from_env_lossy(),
|
|
)
|
|
.with_ansi(false)
|
|
.pretty()
|
|
.finish();
|
|
tracing::subscriber::set_global_default(subscriber)?;
|
|
info!("Differential testing tool is starting");
|
|
|
|
let mut context = Context::try_parse()?;
|
|
context.update_for_profile();
|
|
|
|
let (reporter, report_aggregator_task) = ReportAggregator::new(context.clone()).into_task();
|
|
|
|
match context {
|
|
Context::Test(context) => tokio::runtime::Builder::new_multi_thread()
|
|
.worker_threads(context.concurrency_configuration.number_of_threads)
|
|
.enable_all()
|
|
.build()
|
|
.expect("Failed building the Runtime")
|
|
.block_on(async move {
|
|
let differential_tests_handling_task =
|
|
handle_differential_tests(*context, reporter);
|
|
|
|
futures::future::try_join(differential_tests_handling_task, report_aggregator_task)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}),
|
|
Context::Benchmark(context) => tokio::runtime::Builder::new_multi_thread()
|
|
.worker_threads(context.concurrency_configuration.number_of_threads)
|
|
.enable_all()
|
|
.build()
|
|
.expect("Failed building the Runtime")
|
|
.block_on(async move {
|
|
let differential_benchmarks_handling_task =
|
|
handle_differential_benchmarks(*context, reporter);
|
|
|
|
futures::future::try_join(
|
|
differential_benchmarks_handling_task,
|
|
report_aggregator_task,
|
|
)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}),
|
|
Context::ExportGenesis(ref export_genesis_context) => {
|
|
let platform = Into::<&dyn Platform>::into(export_genesis_context.platform);
|
|
let genesis = platform.export_genesis(context)?;
|
|
let genesis_json = serde_json::to_string_pretty(&genesis)
|
|
.context("Failed to serialize the genesis to JSON")?;
|
|
println!("{genesis_json}");
|
|
Ok(())
|
|
}
|
|
Context::ExportJsonSchema => {
|
|
let schema = schema_for!(Metadata);
|
|
println!("{}", serde_json::to_string_pretty(&schema).unwrap());
|
|
Ok(())
|
|
}
|
|
}
|
|
}
|