diff --git a/test.py b/test.py new file mode 100644 --- /dev/null +++ b/test.py @@ -0,0 +1,54 @@ +from unittest import TestCase + +from rank_progress import RankTracker + + +class TestRankTracker(TestCase): + def test_no_change(self): + t = RankTracker(1945) # 2k + for r in [1945, 1949, 1900, 1850]: + self.assertFalse(t.update(r), r) + + def test_promotion(self): + # basic + t = RankTracker(1945) + for (rating, rank) in [(1950, "1k"), (1945, False), (2000, False), (2049, False), (2051, "1d")]: + self.assertEqual(t.update(rating), rank, (rating, rank)) + + # 2+ ranks leaps + + # limited when pushing the personal best + self.skipTest("not yet implemented") + t = RankTracker(1100) + self.assertEqual(t.update(1299), "9k") + self.assertEqual(t.update(1250), "8k") + self.assertEqual(t.update(1500), "6k") + + # regular below the personal best + t = RankTracker(1201) # 9k + t.update(1000) + t.update(900) + t.update(849) # 11k + self.assertEqual(t.update(1250), "8k") + + def test_demotion(self): + t = RankTracker(2069) + self.assertEqual(t.update(1995), "1k") + + t = RankTracker(1590) + self.assertEqual(t.update(1387), "7k") + + t = RankTracker(1087) + self.assertFalse(t.update(995)) + self.assertEqual(t.update(940), "11k") + + def test_edges_cases(self): + t = RankTracker(-900) + self.assertEqual(t.rank, "30k") + with self.assertRaises(AssertionError): + t.update(-901) + + t = RankTracker(2700) + self.assertEqual(t.rank, "7d") + self.assertFalse(t.update(2750)) + self.assertFalse(t.update(2800))