62 lines
2.1 KiB
Python
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()
|