geam 0.1.1

Experimental Rust-embedded execution runtime for typed Gleam programs
pub(super) mod bool_;
pub(super) mod float;
pub(super) mod int;
pub(super) mod string;

pub(crate) use bool_::*;
pub(crate) use float::*;
pub(crate) use int::*;
pub(crate) use string::*;

#[cfg(test)]
mod tests {
    use super::{bool_case_int, float_case_int, int_case_int, string_case_int};
    use crate::plan::IntExprKind;
    use crate::planner::dsl::expression::{bool_, float, int, string};
    use ecow::EcoString;
    use num_bigint::BigInt;

    #[test]
    fn case_facade_reexports_subject_family_helpers() {
        assert_eq!(
            bool_case_int(bool_(true), int(1), int(0)).0.kind(),
            &IntExprKind::BoolCase {
                subject: Box::new(bool_(true).into()),
                true_: Box::new(int(1).into()),
                false_: Box::new(int(0).into()),
            },
        );
        assert_eq!(
            int_case_int(int(1), [(1, int(1))], int(0)).0.kind(),
            &IntExprKind::IntCase {
                subject: Box::new(int(1).into()),
                clauses: vec![(BigInt::from(1), int(1).into())],
                fallback: Box::new(int(0).into()),
            },
        );
        assert_eq!(
            float_case_int(float(1.0), [(1.0, int(1))], int(0)).0.kind(),
            &IntExprKind::FloatCase {
                subject: Box::new(float(1.0).into()),
                clauses: vec![(1.0, int(1).into())],
                fallback: Box::new(int(0).into()),
            },
        );
        assert_eq!(
            string_case_int(string("key"), [("one", int(1))], int(0))
                .0
                .kind(),
            &IntExprKind::StringCase {
                subject: Box::new(string("key").into()),
                clauses: vec![(EcoString::from("one"), int(1).into())],
                fallback: Box::new(int(0).into()),
            },
        );
    }
}