def METHOD_NAME(uoc_max: list[int], courses: list[Course], program: str, specialisations: list[str]):
    res = autoplan(
        courses,
        User({
            "program": program,
            "specialisations" : specialisations,
            "courses": {}
        }),
        (2020, 0),
        (2023, 3),
        uoc_max
    )
    assert isinstance(res, list) # is feasible
    assert len(courses) == len(res) # all courses listed
    # never breach UOC
    for index, number in enumerate(uoc_max):
        course_names = [course[0] for course in res if terms_between((2020, 0), course[1]) == index]
        assert number >= sum(get_uoc(course_name, courses) for course_name in course_names)
    # all courses valid
    plan: list[list[dict[str, tuple[int, Optional[int]]]]] = [[{}, {}, {}, {}] for _ in range(2023-2020)]
    for course_name, (course_year, course_term) in res:
        plan[course_year - 2020][course_term][course_name] = (get_uoc(course_name, courses), get_mark(course_name, courses))
    assert all(course_state['is_accurate'] for course_state in validate_terms(ValidPlannerData(
        program="3778",
        specialisations=["COMPA1"],
        mostRecentPastTerm={
            "Y": 1,
            "T": 0
        },
        plan=plan
    )).values())