mago-codex 1.47.4

PHP type system representation, comparison logic, and codebase metadata for static analysis.
Documentation
mod comparator_common;

use comparator_common::*;

#[test]
fn class_string_reflexive() {
    assert_atomic_subtype(&t_class_string(), &t_class_string());
}

#[test]
fn interface_string_reflexive() {
    assert_atomic_subtype(&t_interface_string(), &t_interface_string());
}

#[test]
fn enum_string_reflexive() {
    assert_atomic_subtype(&t_enum_string(), &t_enum_string());
}

#[test]
fn trait_string_reflexive() {
    assert_atomic_subtype(&t_trait_string(), &t_trait_string());
}

#[test]
fn lit_class_string_reflexive() {
    for n in ["Foo", "App\\Bar", "Vendor\\Pkg\\X"] {
        assert_atomic_subtype(&t_lit_class_string(n), &t_lit_class_string(n));
    }
}

#[test]
fn lit_class_string_in_class_string() {
    for n in ["Foo", "Bar", "App\\Service"] {
        assert_atomic_subtype(&t_lit_class_string(n), &t_class_string());
    }
}

#[test]
fn class_string_not_in_lit_class_string() {
    assert_atomic_not_subtype(&t_class_string(), &t_lit_class_string("Foo"));
}

#[test]
fn class_string_in_string() {
    assert_atomic_subtype(&t_class_string(), &t_string());
}

#[test]
fn interface_string_in_string() {
    assert_atomic_subtype(&t_interface_string(), &t_string());
}

#[test]
fn enum_string_in_string() {
    assert_atomic_subtype(&t_enum_string(), &t_string());
}

#[test]
fn trait_string_in_string() {
    assert_atomic_subtype(&t_trait_string(), &t_string());
}

#[test]
fn class_string_in_array_key() {
    assert_atomic_subtype(&t_class_string(), &t_array_key());
}

#[test]
fn class_string_in_scalar() {
    assert_atomic_subtype(&t_class_string(), &t_scalar());
}

#[test]
fn class_string_not_in_int() {
    assert_atomic_not_subtype(&t_class_string(), &t_int());
}

#[test]
fn class_string_not_in_numeric() {
    assert_atomic_not_subtype(&t_class_string(), &t_numeric());
}

#[test]
fn lit_class_string_in_string() {
    assert_atomic_subtype(&t_lit_class_string("Foo"), &t_string());
}

#[test]
fn lit_class_string_in_array_key() {
    assert_atomic_subtype(&t_lit_class_string("Foo"), &t_array_key());
}

#[test]
fn distinct_lit_class_strings_disjoint() {
    assert_atomic_not_subtype(&t_lit_class_string("Foo"), &t_lit_class_string("Bar"));
}

#[test]
fn many_lit_class_strings_in_class_string() {
    for i in 0..30 {
        let n = format!("Class_{i}");
        assert_atomic_subtype(&t_lit_class_string(&n), &t_class_string());
    }
}