Feat: lots of improvements

This commit is contained in:
2026-02-08 13:52:40 +01:00
parent 2c1765effa
commit f6132bdd70
34 changed files with 333 additions and 123 deletions

View File

@@ -1,5 +1,5 @@
use arc_swap::ArcSwap;
use cagire::forth::{Dictionary, Forth, Rng, StepContext, Value, Variables};
use cagire::forth::{Dictionary, ExecutionTrace, Forth, Rng, StepContext, Value, Variables};
use parking_lot::Mutex;
use rand::rngs::StdRng;
use rand::SeedableRng;
@@ -140,3 +140,11 @@ pub fn expect_outputs(script: &str, count: usize) -> Vec<String> {
assert_eq!(outputs.len(), count, "expected {} outputs", count);
outputs
}
pub fn run_with_trace(script: &str) -> (Forth, ExecutionTrace) {
let f = forth();
let mut trace = ExecutionTrace::default();
f.evaluate_with_trace(script, &default_ctx(), &mut trace)
.unwrap();
(f, trace)
}

View File

@@ -1,4 +1,5 @@
use super::harness::*;
use cagire::forth::ResolvedValue;
#[test]
fn rand_in_range() {
@@ -253,3 +254,14 @@ fn wchoose_quotation() {
.unwrap();
assert_eq!(stack_int(&f), 20);
}
#[test]
fn choose_trace_resolved_span() {
let script = "sine tri 2 choose";
let (_f, trace) = run_with_trace(script);
assert_eq!(trace.resolved.len(), 1, "expected 1 resolved entry: {:?}", trace.resolved);
let (span, ref val) = trace.resolved[0];
assert_eq!(span.start, 11);
assert_eq!(span.end, 17);
assert!(matches!(val, ResolvedValue::Str(s) if s.as_ref() == "sine" || s.as_ref() == "tri"));
}

View File

@@ -94,7 +94,7 @@ fn param_only_emit() {
assert!(outputs[0].contains("voice/0"));
assert!(outputs[0].contains("freq/880"));
assert!(!outputs[0].contains("sound/"));
assert!(!outputs[0].contains("dur/"));
assert!(outputs[0].contains("dur/"));
assert!(!outputs[0].contains("delaytime/"));
}
@@ -138,3 +138,9 @@ fn polyphonic_with_at() {
let outputs = expect_outputs(r#"0 0.5 at 60 64 note sine s ."#, 4);
assert_eq!(outputs.len(), 4);
}
#[test]
fn explicit_dur_zero_is_infinite() {
let outputs = expect_outputs("880 freq 0 dur .", 1);
assert!(outputs[0].contains("dur/0"));
}