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"); }