summaryrefslogtreecommitdiff
path: root/scripts/src/bin
diff options
context:
space:
mode:
authorHenry Gressmann <mail@henrygressmann.de>2024-03-12 18:48:45 +0100
committerGitHub <noreply@github.com>2024-03-12 18:48:45 +0100
commit398b2af4ea37be98093bdf7ac185a468c62c4aef (patch)
treef21db1a58bcd4ddbe6661db59f71fe5a8b483bc3 /scripts/src/bin
parentacb91b800d3668e9fb6dbb5838e2593764a0457e (diff)
test: make tests work on more targets (#11)
- Tests can now be run on more targets (Fixes #7) - Nightly version has been updated to fix broken builds in some cases (Fixes #8)
Diffstat (limited to 'scripts/src/bin')
-rw-r--r--scripts/src/bin/generate-charts/main.rs35
-rw-r--r--scripts/src/bin/generate-charts/progress.rs77
2 files changed, 112 insertions, 0 deletions
diff --git a/scripts/src/bin/generate-charts/main.rs b/scripts/src/bin/generate-charts/main.rs
new file mode 100644
index 0000000..1206e5f
--- /dev/null
+++ b/scripts/src/bin/generate-charts/main.rs
@@ -0,0 +1,35 @@
+mod progress;
+use std::{path::PathBuf, str::FromStr};
+
+use eyre::Result;
+
+fn main() -> Result<()> {
+ generate_charts()
+}
+
+fn generate_charts() -> Result<()> {
+ let results_dir = PathBuf::from_str("./crates/tinywasm/tests/generated")?;
+
+ // check if the folder exists
+ if !results_dir.exists() {
+ return Err(eyre::eyre!(
+ "This script should be run from the root of the project, and the test results should be generated first."
+ ));
+ }
+
+ progress::create_progress_chart(
+ "WebAssembly 1.0 Test Suite",
+ &results_dir.join("mvp.csv"),
+ &results_dir.join("progress-mvp.svg"),
+ )?;
+ println!("created progress chart: {}", results_dir.join("progress-mvp.svg").display());
+
+ progress::create_progress_chart(
+ "WebAssembly 2.0 Test Suite",
+ &results_dir.join("2.0.csv"),
+ &results_dir.join("progress-2.0.svg"),
+ )?;
+ println!("created progress chart: {}", results_dir.join("progress-2.0.svg").display());
+
+ Ok(())
+}
diff --git a/scripts/src/bin/generate-charts/progress.rs b/scripts/src/bin/generate-charts/progress.rs
new file mode 100644
index 0000000..1ecc09c
--- /dev/null
+++ b/scripts/src/bin/generate-charts/progress.rs
@@ -0,0 +1,77 @@
+use eyre::Result;
+use plotters::prelude::*;
+use std::fs::File;
+use std::io::{self, BufRead};
+use std::path::Path;
+
+const FONT: &str = "Victor Mono";
+
+pub fn create_progress_chart(name: &str, csv_path: &Path, output_path: &Path) -> Result<()> {
+ let file = File::open(csv_path)?;
+ let reader = io::BufReader::new(file);
+
+ let mut max_tests = 0;
+ let mut data: Vec<u32> = Vec::new();
+ let mut versions: Vec<String> = Vec::new();
+
+ for line in reader.lines() {
+ let line = line?;
+ let parts: Vec<&str> = line.split(',').collect();
+
+ if parts.len() > 3 {
+ let version = format!("v{}", parts[0]);
+ let passed: u32 = parts[1].parse()?;
+ let failed: u32 = parts[2].parse()?;
+ let total = failed + passed;
+
+ if total > max_tests {
+ max_tests = total;
+ }
+
+ versions.push(version);
+ data.push(passed);
+ }
+ }
+
+ let root_area = SVGBackend::new(output_path, (1000, 400)).into_drawing_area();
+ root_area.fill(&WHITE)?;
+
+ let mut chart = ChartBuilder::on(&root_area)
+ .x_label_area_size(45)
+ .y_label_area_size(70)
+ .margin(10)
+ .margin_top(20)
+ .caption(name, (FONT, 30.0, FontStyle::Bold))
+ .build_cartesian_2d((0..(versions.len() - 1) as u32).into_segmented(), 0..max_tests)?;
+
+ chart
+ .configure_mesh()
+ .light_line_style(TRANSPARENT)
+ .bold_line_style(BLACK.mix(0.3))
+ .max_light_lines(10)
+ .disable_x_mesh()
+ .y_desc("Tests Passed")
+ .y_label_style((FONT, 15))
+ .x_desc("TinyWasm Version")
+ .x_labels((versions.len()).min(4))
+ .x_label_style((FONT, 15))
+ .x_label_formatter(&|x| {
+ let SegmentValue::CenterOf(value) = x else {
+ return "".to_string();
+ };
+ let v = versions.get(*value as usize).unwrap_or(&"".to_string()).to_string();
+ format!("{} ({})", v, data[*value as usize])
+ })
+ .axis_desc_style((FONT, 15, FontStyle::Bold))
+ .draw()?;
+
+ chart.draw_series(
+ Histogram::vertical(&chart)
+ .style(BLUE.mix(0.5).filled())
+ .data(data.iter().enumerate().map(|(x, y)| (x as u32, *y))),
+ )?;
+
+ root_area.present()?;
+
+ Ok(())
+}