You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
3.0 KiB

3 weeks ago
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