Feat: adding logrand and exprand
This commit is contained in:
@@ -105,3 +105,69 @@ fn ftom_880() {
|
||||
fn mtof_ftom_roundtrip() {
|
||||
expect_float("60 mtof ftom", 60.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn exprand_in_range() {
|
||||
let f = forth_seeded(12345);
|
||||
f.evaluate("1.0 100.0 exprand", &default_ctx()).unwrap();
|
||||
let val = stack_float(&f);
|
||||
assert!(val >= 1.0 && val <= 100.0, "exprand {} not in [1, 100]", val);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn exprand_deterministic() {
|
||||
let f1 = forth_seeded(99);
|
||||
let f2 = forth_seeded(99);
|
||||
f1.evaluate("1.0 100.0 exprand", &default_ctx()).unwrap();
|
||||
f2.evaluate("1.0 100.0 exprand", &default_ctx()).unwrap();
|
||||
assert_eq!(f1.stack(), f2.stack());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn exprand_swapped_args() {
|
||||
let f1 = forth_seeded(42);
|
||||
let f2 = forth_seeded(42);
|
||||
f1.evaluate("1.0 100.0 exprand", &default_ctx()).unwrap();
|
||||
f2.evaluate("100.0 1.0 exprand", &default_ctx()).unwrap();
|
||||
assert_eq!(f1.stack(), f2.stack());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn exprand_requires_positive() {
|
||||
expect_error("0.0 10.0 exprand", "exprand requires positive values");
|
||||
expect_error("-1.0 10.0 exprand", "exprand requires positive values");
|
||||
expect_error("1.0 0.0 exprand", "exprand requires positive values");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn logrand_in_range() {
|
||||
let f = forth_seeded(12345);
|
||||
f.evaluate("1.0 100.0 logrand", &default_ctx()).unwrap();
|
||||
let val = stack_float(&f);
|
||||
assert!(val >= 1.0 && val <= 100.0, "logrand {} not in [1, 100]", val);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn logrand_deterministic() {
|
||||
let f1 = forth_seeded(99);
|
||||
let f2 = forth_seeded(99);
|
||||
f1.evaluate("1.0 100.0 logrand", &default_ctx()).unwrap();
|
||||
f2.evaluate("1.0 100.0 logrand", &default_ctx()).unwrap();
|
||||
assert_eq!(f1.stack(), f2.stack());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn logrand_swapped_args() {
|
||||
let f1 = forth_seeded(42);
|
||||
let f2 = forth_seeded(42);
|
||||
f1.evaluate("1.0 100.0 logrand", &default_ctx()).unwrap();
|
||||
f2.evaluate("100.0 1.0 logrand", &default_ctx()).unwrap();
|
||||
assert_eq!(f1.stack(), f2.stack());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn logrand_requires_positive() {
|
||||
expect_error("0.0 10.0 logrand", "logrand requires positive values");
|
||||
expect_error("-1.0 10.0 logrand", "logrand requires positive values");
|
||||
expect_error("1.0 0.0 logrand", "logrand requires positive values");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user