You've already forked HeurAMS-legacy
fix
This commit is contained in:
@@ -9,15 +9,19 @@ class TestSM2Algorithm(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
# 模拟 timer 函数
|
||||
self.timestamp_patcher = patch('heurams.kernel.algorithms.sm2.timer.get_timestamp')
|
||||
self.daystamp_patcher = patch('heurams.kernel.algorithms.sm2.timer.get_daystamp')
|
||||
self.timestamp_patcher = patch(
|
||||
"heurams.kernel.algorithms.sm2.timer.get_timestamp"
|
||||
)
|
||||
self.daystamp_patcher = patch(
|
||||
"heurams.kernel.algorithms.sm2.timer.get_daystamp"
|
||||
)
|
||||
self.mock_get_timestamp = self.timestamp_patcher.start()
|
||||
self.mock_get_daystamp = self.daystamp_patcher.start()
|
||||
|
||||
|
||||
# 设置固定返回值
|
||||
self.mock_get_timestamp.return_value = 1000.0
|
||||
self.mock_get_daystamp.return_value = 100
|
||||
|
||||
|
||||
def tearDown(self):
|
||||
self.timestamp_patcher.stop()
|
||||
self.daystamp_patcher.stop()
|
||||
@@ -46,7 +50,14 @@ class TestSM2Algorithm(unittest.TestCase):
|
||||
|
||||
def test_revisor_feedback_less_than_3(self):
|
||||
"""测试 feedback < 3 重置 rept 和 interval"""
|
||||
algodata = {SM2Algorithm.algo_name: {"efactor": 2.5, "rept": 5, "interval": 10, "real_rept": 3}}
|
||||
algodata = {
|
||||
SM2Algorithm.algo_name: {
|
||||
"efactor": 2.5,
|
||||
"rept": 5,
|
||||
"interval": 10,
|
||||
"real_rept": 3,
|
||||
}
|
||||
}
|
||||
SM2Algorithm.revisor(algodata, feedback=2)
|
||||
self.assertEqual(algodata[SM2Algorithm.algo_name]["rept"], 0)
|
||||
# rept=0 导致 interval 被设置为 1
|
||||
@@ -55,7 +66,14 @@ class TestSM2Algorithm(unittest.TestCase):
|
||||
|
||||
def test_revisor_feedback_greater_equal_3(self):
|
||||
"""测试 feedback >= 3 递增 rept"""
|
||||
algodata = {SM2Algorithm.algo_name: {"efactor": 2.5, "rept": 2, "interval": 6, "real_rept": 2}}
|
||||
algodata = {
|
||||
SM2Algorithm.algo_name: {
|
||||
"efactor": 2.5,
|
||||
"rept": 2,
|
||||
"interval": 6,
|
||||
"real_rept": 2,
|
||||
}
|
||||
}
|
||||
SM2Algorithm.revisor(algodata, feedback=4)
|
||||
self.assertEqual(algodata[SM2Algorithm.algo_name]["rept"], 3)
|
||||
self.assertEqual(algodata[SM2Algorithm.algo_name]["real_rept"], 3)
|
||||
@@ -65,7 +83,14 @@ class TestSM2Algorithm(unittest.TestCase):
|
||||
|
||||
def test_revisor_new_activation(self):
|
||||
"""测试 is_new_activation 重置 rept 和 efactor"""
|
||||
algodata = {SM2Algorithm.algo_name: {"efactor": 3.0, "rept": 5, "interval": 20, "real_rept": 5}}
|
||||
algodata = {
|
||||
SM2Algorithm.algo_name: {
|
||||
"efactor": 3.0,
|
||||
"rept": 5,
|
||||
"interval": 20,
|
||||
"real_rept": 5,
|
||||
}
|
||||
}
|
||||
SM2Algorithm.revisor(algodata, feedback=5, is_new_activation=True)
|
||||
self.assertEqual(algodata[SM2Algorithm.algo_name]["rept"], 0)
|
||||
self.assertEqual(algodata[SM2Algorithm.algo_name]["efactor"], 2.5)
|
||||
@@ -74,11 +99,20 @@ class TestSM2Algorithm(unittest.TestCase):
|
||||
|
||||
def test_revisor_efactor_calculation(self):
|
||||
"""测试 efactor 计算"""
|
||||
algodata = {SM2Algorithm.algo_name: {"efactor": 2.5, "rept": 1, "interval": 6, "real_rept": 1}}
|
||||
algodata = {
|
||||
SM2Algorithm.algo_name: {
|
||||
"efactor": 2.5,
|
||||
"rept": 1,
|
||||
"interval": 6,
|
||||
"real_rept": 1,
|
||||
}
|
||||
}
|
||||
SM2Algorithm.revisor(algodata, feedback=5)
|
||||
# efactor = 2.5 + (0.1 - (5-5)*(0.08 + (5-5)*0.02)) = 2.5 + 0.1 = 2.6
|
||||
self.assertAlmostEqual(algodata[SM2Algorithm.algo_name]["efactor"], 2.6, places=6)
|
||||
|
||||
self.assertAlmostEqual(
|
||||
algodata[SM2Algorithm.algo_name]["efactor"], 2.6, places=6
|
||||
)
|
||||
|
||||
# 测试 efactor 下限为 1.3
|
||||
algodata[SM2Algorithm.algo_name]["efactor"] = 1.2
|
||||
SM2Algorithm.revisor(algodata, feedback=5)
|
||||
@@ -86,18 +120,32 @@ class TestSM2Algorithm(unittest.TestCase):
|
||||
|
||||
def test_revisor_interval_calculation(self):
|
||||
"""测试 interval 计算规则"""
|
||||
algodata = {SM2Algorithm.algo_name: {"efactor": 2.5, "rept": 0, "interval": 0, "real_rept": 0}}
|
||||
algodata = {
|
||||
SM2Algorithm.algo_name: {
|
||||
"efactor": 2.5,
|
||||
"rept": 0,
|
||||
"interval": 0,
|
||||
"real_rept": 0,
|
||||
}
|
||||
}
|
||||
SM2Algorithm.revisor(algodata, feedback=4)
|
||||
# rept 从 0 递增到 1,因此 interval 应为 6
|
||||
self.assertEqual(algodata[SM2Algorithm.algo_name]["interval"], 6)
|
||||
|
||||
|
||||
# 现在 rept=1,再次调用 revisor 递增到 2
|
||||
SM2Algorithm.revisor(algodata, feedback=4)
|
||||
# rept=2,interval = round(6 * 2.5) = 15
|
||||
self.assertEqual(algodata[SM2Algorithm.algo_name]["interval"], 15)
|
||||
|
||||
|
||||
# 单独测试 rept=1 的情况
|
||||
algodata2 = {SM2Algorithm.algo_name: {"efactor": 2.5, "rept": 1, "interval": 0, "real_rept": 0}}
|
||||
algodata2 = {
|
||||
SM2Algorithm.algo_name: {
|
||||
"efactor": 2.5,
|
||||
"rept": 1,
|
||||
"interval": 0,
|
||||
"real_rept": 0,
|
||||
}
|
||||
}
|
||||
SM2Algorithm.revisor(algodata2, feedback=4)
|
||||
# rept 递增到 2,interval = round(0 * 2.5) = 0
|
||||
self.assertEqual(algodata2[SM2Algorithm.algo_name]["interval"], 0)
|
||||
@@ -108,7 +156,10 @@ class TestSM2Algorithm(unittest.TestCase):
|
||||
self.mock_get_daystamp.return_value = 200
|
||||
SM2Algorithm.revisor(algodata, feedback=5)
|
||||
self.assertEqual(algodata[SM2Algorithm.algo_name]["last_date"], 200)
|
||||
self.assertEqual(algodata[SM2Algorithm.algo_name]["next_date"], 200 + algodata[SM2Algorithm.algo_name]["interval"])
|
||||
self.assertEqual(
|
||||
algodata[SM2Algorithm.algo_name]["next_date"],
|
||||
200 + algodata[SM2Algorithm.algo_name]["interval"],
|
||||
)
|
||||
self.assertEqual(algodata[SM2Algorithm.algo_name]["last_modify"], 1000.0)
|
||||
|
||||
def test_is_due(self):
|
||||
@@ -116,7 +167,7 @@ class TestSM2Algorithm(unittest.TestCase):
|
||||
algodata = {SM2Algorithm.algo_name: {"next_date": 100}}
|
||||
self.mock_get_daystamp.return_value = 150
|
||||
self.assertTrue(SM2Algorithm.is_due(algodata))
|
||||
|
||||
|
||||
algodata[SM2Algorithm.algo_name]["next_date"] = 200
|
||||
self.assertFalse(SM2Algorithm.is_due(algodata))
|
||||
|
||||
@@ -131,5 +182,5 @@ class TestSM2Algorithm(unittest.TestCase):
|
||||
self.assertEqual(SM2Algorithm.nextdate(algodata), 12345)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user