25-cxsj-final/backend/verify_backend.py

62 lines
2.1 KiB
Python

import sys
import os
# Add backend to path
sys.path.append(os.path.abspath("/Users/hissin/测试/25-cxsj-final/backend"))
from problems.interval_scheduling.generator import generate_interval_scheduling_case
from problems.interval_scheduling.solvers import solve_greedy, solve_brute_force
from problems.interval_scheduling.problem import IntervalSchedulingProblem
def test_generator():
print("Testing Generator...")
intervals = generate_interval_scheduling_case(size=10, min_time=0, max_time=100)
print(f"Generated {len(intervals)} intervals: {intervals}")
assert len(intervals) == 10
for start, end in intervals:
assert start < end
assert start >= 0
assert end <= 100
print("Generator Passed!")
def test_solvers():
print("\nTesting Solvers...")
# Known case
intervals = [(1, 3), (2, 4), (3, 5)]
# Greedy should pick (1,3) and (3,5) -> count 2
greedy_res = solve_greedy(intervals)
print(f"Greedy result: {greedy_res}")
assert len(greedy_res) == 2
brute_res = solve_brute_force(intervals)
print(f"Brute Force result: {brute_res}")
assert len(brute_res) == 2
# Complex case
intervals = [(1, 4), (3, 5), (0, 6), (5, 7), (3, 9), (5, 9), (6, 10), (8, 11), (8, 12), (2, 14), (12, 16)]
greedy_res = solve_greedy(intervals)
brute_res = solve_brute_force(intervals)
print(f"Complex Greedy: {len(greedy_res)}")
print(f"Complex Brute: {len(brute_res)}")
assert len(greedy_res) == len(brute_res)
print("Solvers Passed!")
def test_problem_class():
print("\nTesting Problem Class...")
prob = IntervalSchedulingProblem()
case = prob.generate_case(size=5)
res_greedy = prob.solve(case, "greedy")
res_brute = prob.solve(case, "brute_force")
print(f"Class Greedy: {res_greedy}")
print(f"Class Brute: {res_brute}")
assert prob.verify(case, res_greedy)
assert res_greedy["result_count"] == res_brute["result_count"]
print("Problem Class Passed!")
if __name__ == "__main__":
test_generator()
test_solvers()
test_problem_class()