hara-native 0.1.21

HAL-free native host runtime and package launcher for Hara
Documentation
use super::super::compile;
use super::support::{analyzed, fixture_modules, plan};
use crate::vm::{compile_bytecode_bundle, ModuleSource};

#[test]
fn repeated_clean_compiles_are_byte_identical() {
    let first = analyzed(fixture_modules(), plan("app.main/start"));
    let second = analyzed(fixture_modules(), plan("app.main/start"));
    let first = compile::compile(&first).unwrap();
    let second = compile::compile(&second).unwrap();
    assert_eq!(first.bytes, second.bytes);
    assert_eq!(
        first
            .modules
            .iter()
            .map(|module| (
                &module.resource,
                &module.namespace_form,
                &module.dependencies
            ))
            .collect::<Vec<_>>(),
        second
            .modules
            .iter()
            .map(|module| (
                &module.resource,
                &module.namespace_form,
                &module.dependencies
            ))
            .collect::<Vec<_>>()
    );
}

#[test]
fn records_module_and_var_level_size_reduction() {
    let modules = fixture_modules();
    let build = analyzed(modules.clone(), plan("app.main/start"));
    let pruned = compile::compile(&build).unwrap();
    let complete_sources = modules
        .iter()
        .map(|module| ModuleSource {
            resource: module.name.as_str(),
            source: module.source.as_str(),
        })
        .collect::<Vec<_>>();
    let complete = compile_bytecode_bundle(&complete_sources).unwrap();
    assert!(
        pruned.bytes.len() < complete.len(),
        "{} !< {}",
        pruned.bytes.len(),
        complete.len()
    );
}