~ruther/verilog-riscv-semestral-project

a079c57bf9f1ab9cca6147599107bdd01e034121 — Rutherther 1 year, 5 months ago df876b3
tests: add more custom tests
M programs/branches.c => programs/branches.c +15 -14
@@ 1,42 1,43 @@
void main()
{
    int *result_address = 0;
    int a = 1;
    int b = 5;
    int *load_address = 0;
    int a = *(load_address);
    int b = *(load_address + 1);

    if (a < b) {
        *result_address = 1;
        *(result_address + 0) = 1;
    } else {
        *result_address = 2;
        *(result_address + 0) = 2;
    }

    if (a >= b) {
        *result_address = 1;
        *(result_address + 1) = 1;
    } else {
        *result_address = 2;
        *(result_address + 1) = 2;
    }

    if (a != b) {
        *result_address = 1;
        *(result_address + 2) = 1;
    } else {
        *result_address = 2;
        *(result_address + 2) = 2;
    }

    if (a == b) {
        *result_address = 1;
        *(result_address + 3) = 1;
    } else {
        *result_address = 2;
        *(result_address + 3) = 2;
    }

    if (a <= b) {
        *result_address = 1;
        *(result_address + 4) = 1;
    } else {
        *result_address = 2;
        *(result_address + 4) = 2;
    }

    if (a > b) {
        *result_address = 1;
        *(result_address + 5) = 1;
    } else {
        *result_address = 2;
        *(result_address + 5) = 2;
    }
}

A programs/memory_bytes.c => programs/memory_bytes.c +23 -0
@@ 0,0 1,23 @@

int main()
{
    char *load_address = 0;
    int *result_address = 0;

    char a = *load_address;
    char b = *(load_address + 1);
    char c = *(load_address + 2);
    char d = *(load_address + 3);

    *(result_address + 3) = a;
    *(result_address + 2) = b;
    *(result_address + 1) = c;
    *(result_address + 0) = d;

    char* result_bytes = (char*)(result_address + 4);

    *(result_bytes + 0) = a;
    *(result_bytes + 1) = b;
    *(result_bytes + 2) = c;
    *(result_bytes + 3) = d;
}

A programs/operations.c => programs/operations.c +15 -0
@@ 0,0 1,15 @@
int main()
{
    int *load_address = 0;
    int *result_address = 0;

    int a = *load_address;
    int b = *(load_address + 1);

    *(result_address + 0) = a + b;
    *(result_address + 1) = a - b;
    *(result_address + 2) = a > b;
    *(result_address + 3) = a < b;
    *(result_address + 4) = a << b;
    *(result_address + 5) = a >> b;
}

M tests/custom/custom_tests.py => tests/custom/custom_tests.py +6 -5
@@ 6,12 6,12 @@ sys.path.append('../')
from test_types import *
from pathlib import Path

def find_tests(groups_dir: Path, programs_dir: Path, out_dir: Path, group_name: str|None, test_name: str|None) -> list[TestGroup]:
def find_tests(groups_dir: Path, programs_dir: Path, out_dir: Path, filter_group_name: str|None, filter_test_name: str|None) -> list[TestGroup]:
    group_names: list[Path] = []
    if group_name is None:
    if filter_group_name is None:
        group_names = [f for f in groups_dir.iterdir() if f.is_dir()]
    else:
        group_names = [groups_dir / group_name]
        group_names = [groups_dir / filter_group_name]

    groups: list[TestGroup] = []
    for group_dir in group_names:


@@ 25,10 25,10 @@ def find_tests(groups_dir: Path, programs_dir: Path, out_dir: Path, group_name: 
        )

        test_names = []
        if test_name is None:
        if filter_test_name is None:
            test_names = [f.name[:-len("-input.dat")] for f in group_dir.iterdir() if f.is_file() and f.name.endswith("-input.dat")]
        else:
            test_names = [test_name]
            test_names = [filter_test_name]

        for test_name in test_names:
            test = Test(


@@ 41,6 41,7 @@ def find_tests(groups_dir: Path, programs_dir: Path, out_dir: Path, group_name: 
            )

            if not test.memory_in_file.exists() or not test.memory_exp_file.exists():
                print("could not find both input and expected")
                continue

            tests.append(test)

M tests/run.py => tests/run.py +4 -1
@@ 29,9 29,12 @@ def validate_test(test: Test) -> Validation:

    expected_arr = list(filter(lambda word: word != "", re.split(r"[\n ]+", expected)))
    actual_arr = re.split(r"[\n ]+", actual)
    # trim leading
    # ignore rest of memory
    actual_arr = actual_arr[:len(expected_arr)]

    actual_arr = [item.upper() for item in actual_arr]
    expected_arr = [item.upper() for item in expected_arr]

    return Validation(
        test = test,
        expected = expected_arr,

Do not follow this link