apollo_infra_utils 0.18.0-dev.0

Infrastructure utility.
Documentation
use std::path::PathBuf;

use crate::cairo0_compiler::{
    CairoLangVersion,
    EXPECTED_CAIRO0_STARKNET_COMPILE_VERSION,
    EXPECTED_CAIRO0_VERSION,
    PIP_REQUIREMENTS_FILE,
    STARKNET_DEPRECATED_COMPILE_REQUIREMENTS_FILE,
};
use crate::cairo0_compiler_test_utils::remove_unused_cairo0_imports;

fn get_cairo_lang_version_from_requirements(path_to_requirements: &PathBuf) -> String {
    let requirements_contents = std::fs::read_to_string(path_to_requirements).unwrap();
    requirements_contents
        .lines()
        .find(|line| line.starts_with("cairo-lang"))
        .unwrap_or_else(|| panic!("Could not find cairo-lang in {path_to_requirements:?}."))
        .trim()
        .split("==")
        .nth(1)
        .unwrap_or_else(|| {
            panic!(
                "Malformed cairo-lang dependency (expected 'cairo-lang==X') in \
                 {path_to_requirements:?}."
            )
        })
        .to_string()
}

#[test]
fn test_cairo0_version_pip_requirements() {
    let pip_cairo_lang_version = get_cairo_lang_version_from_requirements(&PIP_REQUIREMENTS_FILE);
    assert_eq!(CairoLangVersion(pip_cairo_lang_version.as_str()), EXPECTED_CAIRO0_VERSION);
}

#[test]
fn test_cairo0_starknet_compile_version_pip_requirements() {
    let pip_cairo_lang_version =
        get_cairo_lang_version_from_requirements(&STARKNET_DEPRECATED_COMPILE_REQUIREMENTS_FILE);
    assert_eq!(
        CairoLangVersion(pip_cairo_lang_version.as_str()),
        EXPECTED_CAIRO0_STARKNET_COMPILE_VERSION
    );
}

#[test]
fn test_remove_unused_imports() {
    let input = r#"// This is a comment at the top of the file.
// Another comment line.

from starkware.cairo.common.cairo_builtins import HashBuiltin, SignatureBuiltin
from starkware.starknet.core.os.state import (
    StateEntry,
    UnusedType,
    AnotherUnused as AU,
)
from starkware.cairo.common.math import assert_lt as check_lt, assert_nn, unused_func
import starkware.cairo.common.alloc as alloc
import something.dead_code
import something.used
import starkware.cairo.common.unused as unused

func main{hash_ptr: HashBuiltin*}() {
    let entry = StateEntry();
    check_lt(1, 2);
    alloc.alloc();
    used();
    return ();
}
"#;

    let expected = r#"// This is a comment at the top of the file.
// Another comment line.

from starkware.cairo.common.cairo_builtins import HashBuiltin
from starkware.starknet.core.os.state import (
    StateEntry,
)
from starkware.cairo.common.math import assert_lt as check_lt
import starkware.cairo.common.alloc as alloc
import something.used

func main{hash_ptr: HashBuiltin*}() {
    let entry = StateEntry();
    check_lt(1, 2);
    alloc.alloc();
    used();
    return ();
}
"#;

    let output = remove_unused_cairo0_imports(input);
    assert_eq!(output, expected);
}