import pytest from piecewise import * class TestPiecewiseConstant: def test_rmul(self): pc = Piecewise_Constant(7, [(-10, 5), (2, 3)]) assert 3*pc == Piecewise_Constant(21, [(-10, 15), (2, 9)]) def test_neg(self): pc = Piecewise_Constant(7, [(-10, 5), (1, 0), (2, 3)]) assert -pc == Piecewise_Constant(-7, [(-10, -5), (1, 0), (2, -3)]) def test_add(self): pc = Piecewise_Constant(7, [(-10, 5), (1, 0), (2, 3)]) assert pc+11 == Piecewise_Constant(18, [(-10, 16), (1, 11), (2, 14)]) def test_add_conditional_nzstart(self): pc = Piecewise_Constant(7, [(-10, 5), (1, 0), (2, 3)]) assert pc.add_conditional(-3) == Piecewise_Constant(4, [(-10, 2), (1, 0), (2, 0)]) def test_add_conditional_zstart(self): pc = Piecewise_Constant(0, [(-10, 5), (1, 0), (2, 3)]) assert pc.add_conditional(-3) == Piecewise_Constant(0, [(-10, 2), (1, 0), (2, 0)]) class TestConvLimPC: def test_empty(self): assert conv_lim_pc(None, None) == Piecewise_Constant(10000, []) def test_no_low(self): assert conv_lim_pc(None, 3000) == Piecewise_Constant(10000, [(3001, 0)]) def test_no_high(self): assert conv_lim_pc(3000, None) == Piecewise_Constant(0, [(3000, 10000)]) def test_full(self): assert conv_lim_pc(3000, 5000) == Piecewise_Constant(0, [(3000, 10000), (5001, 0)]) class TestMinSumPC: def test_none(self): assert min_sum_pc([]) == 0 def test_single_single(self): assert min_sum_pc([Piecewise_Constant(0, [])]) == 0 assert min_sum_pc([Piecewise_Constant(-10, [])]) == -10 assert min_sum_pc([Piecewise_Constant(10, [])]) == 10 def test_single_mult(self): assert min_sum_pc([Piecewise_Constant(0, [(-20, 40)])]) == 0 assert min_sum_pc([Piecewise_Constant(50, [(-20, 40)])]) == 40 assert min_sum_pc([Piecewise_Constant(-10, [(-20, 40), (1, 70)])]) == -10 assert min_sum_pc([Piecewise_Constant(100, [(-20, 70), (1, 40)])]) == 40 assert min_sum_pc([Piecewise_Constant(100, [(-20, 70), (1, 40), (17, 0)])]) == 0 def test_mult_single(self): assert min_sum_pc([Piecewise_Constant(0, []), Piecewise_Constant(10, [])]) == 10 assert min_sum_pc([Piecewise_Constant(0, []), Piecewise_Constant(-10, [])]) == -10 assert min_sum_pc([Piecewise_Constant(-10, []), Piecewise_Constant(0, [])]) == -10 assert min_sum_pc([Piecewise_Constant(20, []), Piecewise_Constant(30, [])]) == 50 def test_mult_mult(self): assert min_sum_pc([Piecewise_Constant(0, [(5, 11)]), Piecewise_Constant(0, [(4, 7)])]) == 0 assert min_sum_pc([Piecewise_Constant(0, [(5, 11)]), Piecewise_Constant(100, [(4, 7)])]) == 7 assert min_sum_pc([Piecewise_Constant(100, [(5, 11)]), Piecewise_Constant(0, [(4, 7)])]) == 18 assert min_sum_pc([Piecewise_Constant(100, [(5, 11), (10, 200)]), Piecewise_Constant(100, [(5, 7), (8, 200)])]) == 18 assert min_sum_pc([Piecewise_Constant(0, [(5, 11), (10, 200)]), Piecewise_Constant(0, [(6, -20), (8, 200)])]) == -9