calc_rational 3.1.0

CLI calculator for rational numbers.
Documentation
use super::Cache;
#[test]
fn len() {
    let mut c = Cache::<bool, 1>::new();
    assert_eq!(0, c.len());
    c.push(false);
    assert_eq!(1, c.len());
    c.push(false);
    assert_eq!(1, c.len());
}
#[test]
fn is_empty() {
    let mut c = Cache::<bool, 1>::new();
    assert!(c.is_empty());
    c.push(false);
    assert!(!c.is_empty());
}
#[expect(clippy::cognitive_complexity, reason = "a lot to test")]
#[test]
fn get() {
    let mut c = Cache::<bool, 4>::new();
    assert_eq!(c.get(0), None);
    assert_eq!(c.get(1), None);
    assert_eq!(c.get(2), None);
    assert_eq!(c.get(3), None);
    assert_eq!(c.get(4), None);
    assert_eq!(c.get(5), None);
    assert_eq!(c.get(usize::MAX), None);
    c.push(true);
    assert_eq!(c.get(0), Some(&true));
    assert_eq!(c.get(1), None);
    assert_eq!(c.get(2), None);
    assert_eq!(c.get(3), None);
    assert_eq!(c.get(4), None);
    assert_eq!(c.get(5), None);
    assert_eq!(c.get(usize::MAX), None);
    c.push(false);
    assert_eq!(c.get(0), Some(&false));
    assert_eq!(c.get(1), Some(&true));
    assert_eq!(c.get(2), None);
    assert_eq!(c.get(3), None);
    assert_eq!(c.get(4), None);
    assert_eq!(c.get(5), None);
    assert_eq!(c.get(usize::MAX), None);
    c.push(false);
    assert_eq!(c.get(0), Some(&false));
    assert_eq!(c.get(1), Some(&false));
    assert_eq!(c.get(2), Some(&true));
    assert_eq!(c.get(3), None);
    assert_eq!(c.get(4), None);
    assert_eq!(c.get(5), None);
    assert_eq!(c.get(usize::MAX), None);
    c.push(true);
    assert_eq!(c.get(0), Some(&true));
    assert_eq!(c.get(1), Some(&false));
    assert_eq!(c.get(2), Some(&false));
    assert_eq!(c.get(3), Some(&true));
    assert_eq!(c.get(4), None);
    assert_eq!(c.get(5), None);
    assert_eq!(c.get(usize::MAX), None);
    c.push(true);
    assert_eq!(c.get(0), Some(&true));
    assert_eq!(c.get(1), Some(&true));
    assert_eq!(c.get(2), Some(&false));
    assert_eq!(c.get(3), Some(&false));
    assert_eq!(c.get(4), None);
    assert_eq!(c.get(5), None);
    assert_eq!(c.get(usize::MAX), None);
}
#[test]
fn get_unsafe() {
    let mut c = Cache::<bool, 4>::new();
    assert!(!c.get_unchecked(0));
    assert!(!c.get_unchecked(1));
    assert!(!c.get_unchecked(2));
    assert!(!c.get_unchecked(3));
    assert!(!c.get_unchecked(4));
    c.push(true);
    assert!(c.get_unchecked(0));
    assert!(!c.get_unchecked(1));
    assert!(!c.get_unchecked(2));
    assert!(!c.get_unchecked(3));
    assert!(c.get_unchecked(4));
}
#[expect(clippy::indexing_slicing, reason = "comment justifies correctness")]
#[test]
fn index() {
    let mut c = Cache::<bool, 4>::new();
    c.push(true);
    // `c.len() > 0`.
    assert!(c[0]);
}
#[expect(clippy::indexing_slicing, reason = "comment justifies correctness")]
#[test]
#[should_panic(expected = "called `Option::unwrap()` on a `None` value")]
fn index_panic() {
    let c = Cache::<bool, 4>::new();
    // `c.len() > 0`.
    assert!(c[0]);
}
#[expect(clippy::indexing_slicing, reason = "comments justify correctness")]
#[test]
fn push() {
    let mut c = Cache::<bool, 4>::new();
    c.push(true);
    // `c.len() > 0`.
    assert!(c[0]);
    c.push(true);
    // `c.len() > 0`.
    assert!(c[0]);
    c.push(false);
    // `c.len() > 0`.
    assert!(!c[0]);
    c.push(true);
    // `c.len() > 0`.
    assert!(c[0]);
    c.push(false);
    // `c.len() > 0`.
    assert!(!c[0]);
    c.push(false);
    // `c.len() > 0`.
    assert!(!c[0]);
}
#[test]
fn new() {
    _ = Cache::<bool, 0>::new();
    _ = Cache::<bool, 32>::new();
    _ = Cache::<bool, 31>::new();
}