Feat: lots of improvements
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user