#! /usr/bin/python from utility import lineno class CashFlow: def __init__(self, name, value, rate, period_start, period_last): self.name = name self.value = value self.rate = rate self.period_start = period_start self.period_last = period_last def used_this_period(self, period): return period >= self.period_start and period <= self.period_last def current_value(self, period): return (self.used_this_period(period) and self.value * (1 + self.rate)**period) or 0 def unit_test(): cf = CashFlow("Test", 1000, 0.03, 5, 11) value = 0 for i in range(0, 20): value = int(cf.current_value(i)) if (i <= 4 and i >= 12): assert(value == 0) if i == 5: assert(value == 1159) if i == 6: assert(value == 1194) if i == 7: assert(value == 1229) if i == 8: assert(value == 1266) if i == 9: assert(value == 1304) if i == 10: assert(value == 1343) if i == 11: assert(value == 1384) cf = CashFlow("Test", 1000, 0.03, 0, 5) for i in range(0, 20): value = int(cf.current_value(i)) if i >= 6: assert(value == 0) if i == 0: assert(value == 1000) if i == 1: assert(value == 1030) if i == 2: assert(value == 1060) if i == 3: assert(value == 1092) if i == 4: assert(value == 1125) if i == 5: assert(value == 1159) if __name__ == '__main__': unit_test()