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 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_repeated_promotion(self): t = RankTracker(1945) self.assertEqual(t.update(1950), "1k") self.assertFalse(t.update(1895)) self.assertEqual(t.rank, "2k") self.assertFalse(t.update( 1951)) self.assertEqual(t.rank, "1k") self.assertFalse(t.update(2049)) self.assertEqual(t.update(2051), "1d") def test_demotion(self): t = RankTracker(2069) self.assertFalse(t.update(1995)) # 1k self.assertEqual(t.rank, "1k") t = RankTracker(1590) self.assertFalse(t.update(1387)) # 7k self.assertEqual(t.rank, "7k") t = RankTracker(1087) self.assertFalse(t.update(995)) self.assertEqual(t.rank, "10k") self.assertFalse(t.update(940)) # 11k self.assertEqual(t.rank, "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))