class TestKeltnerPosition: def setup(self): # Fixture Setup self.kp = KeltnerPosition(10, 2.5) def test_name_returns_expected_string(self): # Arrange, Act, Assert assert self.kp.name == "KeltnerPosition" def test_str_repr_returns_expected_string(self): # Arrange, Act, Assert assert str( self.kp ) == "KeltnerPosition(10, 2.5, EXPONENTIAL, SIMPLE, True, 0.0)" assert repr( self.kp ) == "KeltnerPosition(10, 2.5, EXPONENTIAL, SIMPLE, True, 0.0)" def test_initialized_without_inputs_returns_false(self): # Arrange, Act, Assert assert self.kp.initialized is False def test_initialized_with_required_inputs_returns_true(self): # Arrange for _i in range(10): self.kp.update_raw(1.00000, 1.00000, 1.00000) # Act, Assert assert self.kp.initialized is True def test_period_returns_expected_value(self): # Arrange, Act, Assert assert self.kp.period == 10 def test_k_multiple_returns_expected_value(self): # Arrange, Act, Assert assert self.kp.k_multiplier == 2.5 def test_handle_bar_updates_indicator(self): # Arrange indicator = KeltnerPosition(10, 2.5) bar = TestStubs.bar_5decimal() # Act indicator.handle_bar(bar) # Assert assert indicator.has_inputs assert indicator.value == 0.0444444444447405 def test_value_with_one_input_returns_zero(self): # Arrange self.kp.update_raw(1.00020, 1.00000, 1.00010) # Act, Assert assert self.kp.value == 0 def test_value_with_zero_width_input_returns_zero(self): # Arrange for _i in range(10): self.kp.update_raw(1.00000, 1.00000, 1.00000) # Act, Assert assert self.kp.value == 0 def test_value_with_three_inputs_returns_expected_value(self): # Arrange self.kp.update_raw(1.00020, 1.00000, 1.00010) self.kp.update_raw(1.00030, 1.00010, 1.00020) self.kp.update_raw(1.00040, 1.00020, 1.00030) # Act, Assert assert self.kp.value == 0.29752066115754594 def test_value_with_close_on_high_returns_positive_value(self): # Arrange high = 1.00010 low = 1.00000 for _i in range(10): high += 0.00010 low += 0.00010 close = high self.kp.update_raw(high, low, close) # Act, Assert assert self.kp.value == 1.637585941284833 def test_value_with_close_on_low_returns_lower_value(self): # Arrange high = 1.00010 low = 1.00000 for _i in range(10): high -= 0.00010 low -= 0.00010 close = low self.kp.update_raw(high, low, close) # Act, Assert assert self.kp.value == pytest.approx(-1.637585941284833) def test_value_with_ten_inputs_returns_expected_value(self): # Arrange self.kp.update_raw(1.00020, 1.00000, 1.00010) self.kp.update_raw(1.00030, 1.00010, 1.00020) self.kp.update_raw(1.00050, 1.00020, 1.00030) self.kp.update_raw(1.00030, 1.00000, 1.00010) self.kp.update_raw(1.00030, 1.00010, 1.00020) self.kp.update_raw(1.00040, 1.00020, 1.00030) self.kp.update_raw(1.00010, 1.00000, 1.00010) self.kp.update_raw(1.00030, 1.00010, 1.00020) self.kp.update_raw(1.00030, 1.00020, 1.00030) self.kp.update_raw(1.00020, 1.00010, 1.00010) # Act, Assert assert self.kp.value == -0.14281747514671334 def test_reset_successfully_returns_indicator_to_fresh_state(self): # Arrange self.kp.update_raw(1.00020, 1.00000, 1.00010) self.kp.update_raw(1.00030, 1.00010, 1.00020) self.kp.update_raw(1.00040, 1.00020, 1.00030) # Act self.kp.reset() # Assert assert not self.kp.initialized
class KeltnerPositionTests(unittest.TestCase): def setUp(self): # Fixture Setup self.kp = KeltnerPosition(10, 2.5) def test_name_returns_expected_string(self): # Arrange # Act # Assert self.assertEqual("KeltnerPosition", self.kp.name) def test_str_repr_returns_expected_string(self): # Arrange # Act # Assert self.assertEqual( "KeltnerPosition(10, 2.5, EXPONENTIAL, SIMPLE, True, 0.0)", str(self.kp)) self.assertEqual( "KeltnerPosition(10, 2.5, EXPONENTIAL, SIMPLE, True, 0.0)", repr(self.kp)) def test_initialized_without_inputs_returns_false(self): # Arrange # Act # Assert self.assertEqual(False, self.kp.initialized) def test_initialized_with_required_inputs_returns_true(self): # Arrange for _i in range(10): self.kp.update_raw(1.00000, 1.00000, 1.00000) # Act # Assert self.assertEqual(True, self.kp.initialized) def test_period_returns_expected_value(self): # Arrange # Act # Assert self.assertEqual(10, self.kp.period) def test_k_multiple_returns_expected_value(self): # Arrange # Act # Assert self.assertEqual(2.5, self.kp.k_multiplier) def test_handle_bar_updates_indicator(self): # Arrange indicator = KeltnerPosition(10, 2.5) bar = TestStubs.bar_5decimal() # Act indicator.handle_bar(bar) # Assert self.assertTrue(indicator.has_inputs) self.assertEqual(0.0444444444447405, indicator.value) def test_value_with_one_input_returns_zero(self): # Arrange self.kp.update_raw(1.00020, 1.00000, 1.00010) # Act # Assert self.assertEqual(0, self.kp.value) def test_value_with_zero_width_input_returns_zero(self): # Arrange for _i in range(10): self.kp.update_raw(1.00000, 1.00000, 1.00000) # Act # Assert self.assertEqual(0, self.kp.value) def test_value_with_three_inputs_returns_expected_value(self): # Arrange self.kp.update_raw(1.00020, 1.00000, 1.00010) self.kp.update_raw(1.00030, 1.00010, 1.00020) self.kp.update_raw(1.00040, 1.00020, 1.00030) # Act # Assert self.assertEqual(0.29752066115754594, self.kp.value) def test_value_with_close_on_high_returns_positive_value(self): # Arrange high = 1.00010 low = 1.00000 for _i in range(10): high += 0.00010 low += 0.00010 close = high self.kp.update_raw(high, low, close) # Act # Assert self.assertEqual(1.637585941284833, self.kp.value) def test_value_with_close_on_low_returns_lower_value(self): # Arrange high = 1.00010 low = 1.00000 for _i in range(10): high -= 0.00010 low -= 0.00010 close = low self.kp.update_raw(high, low, close) # Act # Assert self.assertAlmostEqual(-1.637585941284833, self.kp.value) def test_value_with_ten_inputs_returns_expected_value(self): # Arrange self.kp.update_raw(1.00020, 1.00000, 1.00010) self.kp.update_raw(1.00030, 1.00010, 1.00020) self.kp.update_raw(1.00050, 1.00020, 1.00030) self.kp.update_raw(1.00030, 1.00000, 1.00010) self.kp.update_raw(1.00030, 1.00010, 1.00020) self.kp.update_raw(1.00040, 1.00020, 1.00030) self.kp.update_raw(1.00010, 1.00000, 1.00010) self.kp.update_raw(1.00030, 1.00010, 1.00020) self.kp.update_raw(1.00030, 1.00020, 1.00030) self.kp.update_raw(1.00020, 1.00010, 1.00010) # Act # Assert self.assertEqual(-0.14281747514671334, self.kp.value) def test_reset_successfully_returns_indicator_to_fresh_state(self): # Arrange self.kp.update_raw(1.00020, 1.00000, 1.00010) self.kp.update_raw(1.00030, 1.00010, 1.00020) self.kp.update_raw(1.00040, 1.00020, 1.00030) # Act self.kp.reset() # Assert self.assertFalse(self.kp.initialized)
class KeltnerPositionTests(unittest.TestCase): # Fixture Setup def setUp(self): # Arrange self.kp = KeltnerPosition(10, 2.5) def test_name_returns_expected_name(self): # Act # Assert self.assertEqual('KeltnerPosition', self.kp.name) def test_str_returns_expected_string(self): # Act # Assert self.assertEqual( 'KeltnerPosition(10, 2.5, EXPONENTIAL, SIMPLE, True, 0.0)', str(self.kp)) def test_repr_returns_expected_string(self): # Act # Assert self.assertTrue( repr(self.kp).startswith( '<KeltnerPosition(10, 2.5, EXPONENTIAL, SIMPLE, True, 0.0) object at' )) self.assertTrue(repr(self.kp).endswith('>')) def test_initialized_without_inputs_returns_false(self): # Act # Assert self.assertEqual(False, self.kp.initialized) def test_initialized_with_required_inputs_returns_true(self): # Arrange for i in range(10): self.kp.update(1.00000, 1.00000, 1.00000) # Act # Assert self.assertEqual(True, self.kp.initialized) def test_period_returns_expected_value(self): # Act # Assert self.assertEqual(10, self.kp.period) def test_k_multiple_returns_expected_value(self): # Act # Assert self.assertEqual(2.5, self.kp.k_multiplier) def test_value_with_one_input_returns_zero(self): # Arrange self.kp.update(1.00020, 1.00000, 1.00010) # Act # Assert self.assertEqual(0.0, self.kp.value) def test_value_with_zero_width_input_returns_zero(self): # Arrange # Arrange for i in range(10): self.kp.update(1.00000, 1.00000, 1.00000) # Act # Assert self.assertEqual(0.0, self.kp.value) def test_value_with_three_inputs_returns_expected_value(self): # Arrange self.kp.update(1.00020, 1.00000, 1.00010) self.kp.update(1.00030, 1.00010, 1.00020) self.kp.update(1.00040, 1.00020, 1.00030) # Act # Assert self.assertEqual(0.29752066115754594, self.kp.value) def test_value_with_close_on_high_returns_positive_value(self): # Arrange high = 1.00010 low = 1.00000 for i in range(10): high += 0.00010 low += 0.00010 close = high self.kp.update(high=high, low=low, close=close) # Act # Assert self.assertEqual(1.637585941284833, self.kp.value) def test_value_with_close_on_low_returns_lower_value(self): # Arrange high = 1.00010 low = 1.00000 for i in range(10): high -= 0.00010 low -= 0.00010 close = low self.kp.update(high=high, low=low, close=close) # Act # Assert self.assertAlmostEqual(-1.637585941284833, self.kp.value) def test_value_with_ten_inputs_returns_expected_value(self): # Arrange self.kp.update(1.00020, 1.00000, 1.00010) self.kp.update(1.00030, 1.00010, 1.00020) self.kp.update(1.00050, 1.00020, 1.00030) self.kp.update(1.00030, 1.00000, 1.00010) self.kp.update(1.00030, 1.00010, 1.00020) self.kp.update(1.00040, 1.00020, 1.00030) self.kp.update(1.00010, 1.00000, 1.00010) self.kp.update(1.00030, 1.00010, 1.00020) self.kp.update(1.00030, 1.00020, 1.00030) self.kp.update(1.00020, 1.00010, 1.00010) # Act # Assert self.assertEqual(-0.14281747514671334, self.kp.value) def test_reset_successfully_returns_indicator_to_fresh_state(self): # Arrange self.kp.update(1.00020, 1.00000, 1.00010) self.kp.update(1.00030, 1.00010, 1.00020) self.kp.update(1.00040, 1.00020, 1.00030) # Act self.kp.reset() # No assertion errors. def test_with_battery_signal(self): # Arrange self.kp = KeltnerPosition(10, 2.5, atr_floor=0.00010) battery_signal = BatterySeries.create() output = [] # Act for point in BatterySeries.create(): self.kp.update(point, sys.float_info.epsilon, sys.float_info.epsilon) output.append(self.kp.value) # Assert self.assertEqual(len(battery_signal), len(output))