Add kinds chapter
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
use coracle_lib::kinds::{is_addressable, is_ephemeral, is_regular, is_replaceable};
|
||||
use coracle_lib::kinds::KindError;
|
||||
|
||||
// --- Free function classification tests ---
|
||||
|
||||
#[test]
|
||||
fn regular_kind_1() {
|
||||
assert!(is_regular(1));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn regular_kind_9999() {
|
||||
assert!(is_regular(9999));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn kind_0_is_replaceable_not_regular() {
|
||||
assert!(!is_regular(0));
|
||||
assert!(is_replaceable(0));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn kind_3_is_replaceable_not_regular() {
|
||||
assert!(!is_regular(3));
|
||||
assert!(is_replaceable(3));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn replaceable_range() {
|
||||
assert!(is_replaceable(10_000));
|
||||
assert!(is_replaceable(19_999));
|
||||
assert!(!is_replaceable(20_000));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ephemeral_range() {
|
||||
assert!(is_ephemeral(20_000));
|
||||
assert!(is_ephemeral(29_999));
|
||||
assert!(!is_ephemeral(30_000));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn addressable_range() {
|
||||
assert!(is_addressable(30_000));
|
||||
assert!(is_addressable(39_999));
|
||||
assert!(!is_addressable(40_000));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ranges_are_mutually_exclusive_for_regular() {
|
||||
for k in [1, 100, 5000, 9999] {
|
||||
assert!(is_regular(k));
|
||||
assert!(!is_replaceable(k));
|
||||
assert!(!is_ephemeral(k));
|
||||
assert!(!is_addressable(k));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn high_kinds_are_none_of_the_above() {
|
||||
assert!(!is_regular(40_000));
|
||||
assert!(!is_replaceable(40_000));
|
||||
assert!(!is_ephemeral(40_000));
|
||||
assert!(!is_addressable(40_000));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn kind_error_display() {
|
||||
let err = KindError::WrongKind {
|
||||
expected: 5,
|
||||
got: 1,
|
||||
};
|
||||
assert_eq!(err.to_string(), "expected kind 5, got 1");
|
||||
|
||||
let err = KindError::InvalidContent("bad json".into());
|
||||
assert_eq!(err.to_string(), "invalid content for kind: bad json");
|
||||
}
|
||||
Reference in New Issue
Block a user