vize_l2 0.556.0

L2 - the Davinci semantic IR (codename Disegno): the neutral op family every input dialect lowers into
Documentation
use super::{Allocator, check, complete, owner};
use vize_l2::file::{DeclarationKind, InitializerKind};

#[test]
fn original_decoded_primitive_strings_keep_selected_setup_and_exact_value_class()
-> Result<(), &'static str> {
    for (literal, expected) in [
        (r#"'a\0b'"#, InitializerKind::PrimitiveStringWithNulOrCr),
        (r#"'a\x00b'"#, InitializerKind::PrimitiveStringWithNulOrCr),
        (r#"'a\u0000b'"#, InitializerKind::PrimitiveStringWithNulOrCr),
        (r#"'a\rb'"#, InitializerKind::PrimitiveStringWithNulOrCr),
        (r#"'a\x0db'"#, InitializerKind::PrimitiveStringWithNulOrCr),
        (r#"'a\u000db'"#, InitializerKind::PrimitiveStringWithNulOrCr),
        (r#"'a\r\nb'"#, InitializerKind::PrimitiveStringWithNulOrCr),
        (
            r#"'a\ud800b'"#,
            InitializerKind::PrimitiveStringWithLoneSurrogates,
        ),
        (
            r#"'a\udc00b'"#,
            InitializerKind::PrimitiveStringWithLoneSurrogates,
        ),
        (
            r#"'a\ud800\0b'"#,
            InitializerKind::PrimitiveStringWithLoneSurrogates,
        ),
        (r#"'a\nb'"#, InitializerKind::PrimitiveLiteral),
        (r#"'a\\0b'"#, InitializerKind::PrimitiveLiteral),
        (r#"'a\\rb'"#, InitializerKind::PrimitiveLiteral),
        ("'雪🌸'", InitializerKind::PrimitiveLiteral),
        (r#"'a\ud83c\udf38b'"#, InitializerKind::PrimitiveLiteral),
        (r#"'a\ufffdb'"#, InitializerKind::PrimitiveLiteral),
    ] {
        for (kind, declaration) in [
            (DeclarationKind::Const, "const"),
            (DeclarationKind::Let, "let"),
            (DeclarationKind::Var, "var"),
        ] {
            for (header, annotation) in [("", ""), (" lang=ts", ":string")] {
                let arena = Allocator::default();
                let source = format!(
                    "<script setup{header}>/* same original */ {declaration} value{annotation}={literal};</script><template><div/></template>"
                );
                let mut original = owner(&arena, &source)?;
                let unit = original.parse_setup_program().map_err(|_| "actual setup")?;
                let original = complete(original)?;
                let setup = original.setup().map_err(|_| "selected primitive setup")?;
                check(core::ptr::eq(setup.file(), original.file().ok_or("File")?))?;
                let mut bindings = setup.bindings();
                let binding = bindings.next().ok_or("actual declaration")?;
                check(bindings.next().is_none())?;
                let row = binding.declaration().ok_or("retained declaration")?;
                check(row.initializer == expected && row.initializer.is_primitive())?;
                check(row.kind == kind && row.unit == unit && row.scope == setup.scope())?;
                check(row.is_direct_program() && row.name == "value")?;
                check(setup.binding(binding).is_ok())?;
                check(setup.type_annotations().count() == usize::from(!annotation.is_empty()))?;
            }
        }
    }
    Ok(())
}

#[test]
fn original_comments_and_escape_spellings_do_not_replace_decoded_value_evidence()
-> Result<(), &'static str> {
    let arena = Allocator::default();
    let source =
        r#"<script setup>/* '\0' '\r' */ const value=1;</script><template><div/></template>"#;
    let mut original = owner(&arena, source)?;
    original.parse_setup_program().map_err(|_| "actual setup")?;
    let original = complete(original)?;
    let setup = original.setup().map_err(|_| "selected primitive setup")?;
    let binding = setup.bindings().next().ok_or("actual declaration")?;
    check(binding.declaration().ok_or("row")?.initializer == InitializerKind::PrimitiveLiteral)?;
    check(!InitializerKind::Unknown.is_primitive())?;
    check(!InitializerKind::Function.is_primitive())?;
    Ok(())
}