Feat: new euclidean words and sugar for floating point numbers

This commit is contained in:
2026-02-05 01:30:34 +01:00
parent 53fb3eb759
commit c92a29ab85
9 changed files with 237 additions and 2 deletions

105
tests/forth/euclidean.rs Normal file
View File

@@ -0,0 +1,105 @@
use super::harness::*;
use cagire::forth::Value;
fn int(n: i64) -> Value {
Value::Int(n, None)
}
#[test]
fn euclid_4_8() {
expect_stack("4 8 euclid", &[int(0), int(2), int(4), int(6)]);
}
#[test]
fn euclid_3_8_tresillo() {
expect_stack("3 8 euclid", &[int(0), int(3), int(6)]);
}
#[test]
fn euclid_5_8_cinquillo() {
expect_stack("5 8 euclid", &[int(0), int(2), int(4), int(6), int(7)]);
}
#[test]
fn euclid_4_16() {
expect_stack("4 16 euclid", &[int(0), int(4), int(8), int(12)]);
}
#[test]
fn euclid_5_16() {
expect_stack("5 16 euclid", &[int(0), int(4), int(7), int(10), int(13)]);
}
#[test]
fn euclid_zero_hits() {
expect_stack("0 8 euclid", &[]);
}
#[test]
fn euclid_zero_steps() {
expect_stack("4 0 euclid", &[]);
}
#[test]
fn euclid_k_equals_n() {
expect_stack("4 4 euclid", &[int(0), int(1), int(2), int(3)]);
}
#[test]
fn euclid_k_greater_than_n() {
expect_stack("8 4 euclid", &[int(0), int(1), int(2), int(3)]);
}
#[test]
fn euclid_single_hit() {
expect_stack("1 8 euclid", &[int(0)]);
}
#[test]
fn euclid_negative_k() {
expect_error("-1 8 euclid", "k and n must be >= 0");
}
#[test]
fn euclid_negative_n() {
expect_error("4 -8 euclid", "k and n must be >= 0");
}
#[test]
fn euclid_underflow() {
expect_error("8 euclid", "stack underflow");
expect_error("euclid", "stack underflow");
}
#[test]
fn euclidrot_basic() {
expect_stack("3 8 1 euclidrot", &[int(2), int(5), int(7)]);
}
#[test]
fn euclidrot_zero_rotation() {
expect_stack("3 8 0 euclidrot", &[int(0), int(3), int(6)]);
}
#[test]
fn euclidrot_full_rotation() {
expect_stack("3 8 8 euclidrot", &[int(0), int(3), int(6)]);
}
#[test]
fn euclidrot_negative_r() {
expect_error("3 8 -1 euclidrot", "k, n, and r must be >= 0");
}
#[test]
fn euclidrot_underflow() {
expect_error("8 1 euclidrot", "stack underflow");
expect_error("1 euclidrot", "stack underflow");
expect_error("euclidrot", "stack underflow");
}
#[test]
fn euclid_with_at() {
let outputs = expect_outputs("4 8 euclid at kick sound .", 4);
assert_eq!(outputs.len(), 4);
}