def test_key_function(self): words = SortedList(['apple', 'lime', 'Lemon'], key=str.lower) self.assertEqual(list(words), ['apple', 'Lemon', 'lime']) words.add('Banana') self.assertEqual(list(words), ['apple', 'Banana', 'Lemon', 'lime']) self.assertNotIn('banana', words) self.assertIn('Banana', words) self.assertEqual(words.find('banana'), -1) self.assertEqual(words.find('Banana'), 1) words.remove('Lemon') self.assertEqual(list(words), ['apple', 'Banana', 'lime']) words.add('pear') self.assertEqual(list(words), ['apple', 'Banana', 'lime', 'pear']) self.assertEqual(words.find('LIME'), -1) self.assertEqual(words.find('lime'), 2) self.assertEqual(words.rfind('LIME'), -1) self.assertEqual(words.rfind('lime'), 2) self.assertEqual(words.count('LIME'), 0) self.assertEqual(words.count('lime'), 1) words.add('LIME') self.assertEqual(words.count('lime'), 1) self.assertEqual(words.count('LIME'), 1) words.add('lime') self.assertEqual(words.count('lime'), 2) self.assertEqual(words.count('LIME'), 1)
def test_find_rfind_and_count(self): numbers = SortedList([2, 11, 2, 1, 29, 3, 7, 4, 2, 18, 4, 2]) self.assertEqual(numbers.find(1), 0) self.assertEqual(numbers.find(2), 1) self.assertEqual(numbers.find(3), 5) self.assertEqual(numbers.find(4), 6) self.assertEqual(numbers.find(5), -1) self.assertEqual(numbers.find(7), 8) self.assertEqual(numbers.find(100), -1) self.assertEqual(numbers.find(0), -1) self.assertEqual(numbers.count(1), 1) self.assertEqual(numbers.count(2), 4) self.assertEqual(numbers.count(3), 1) self.assertEqual(numbers.count(4), 2) self.assertEqual(numbers.count(5), 0) self.assertEqual(numbers.count(6), 0) self.assertEqual(numbers.count(7), 1) self.assertEqual(numbers.rfind(1), 0) self.assertEqual(numbers.rfind(2), 4) self.assertEqual(numbers.rfind(3), 5) self.assertEqual(numbers.rfind(4), 7) self.assertEqual(numbers.rfind(5), -1) self.assertEqual(numbers.rfind(7), 8) self.assertEqual(numbers.rfind(100), -1) self.assertEqual(numbers.rfind(0), -1)
def test_time_efficiency(self): sorted_list = SortedList(MANY_BIG_NUMBERS) unsorted_list = sorted(MANY_BIG_NUMBERS) with Timer() as sorted_add: sorted_list.add(0) sorted_list.add(20000) sorted_list.add(49000) sorted_list.add(49999) with Timer() as unsorted_add: unsorted_list.insert(unsorted_list.index(0), 0) unsorted_list.insert(unsorted_list.index(20000), 20000) unsorted_list.insert(unsorted_list.index(49000), 49000) unsorted_list.insert(unsorted_list.index(49999), 49999) self.assertLess(sorted_add.elapsed, unsorted_add.elapsed) with Timer() as sorted_count: self.assertEqual(sorted_list.count(1), 1) self.assertEqual(sorted_list.count(25000), 1) self.assertEqual(sorted_list.count(49000), 2) self.assertEqual(sorted_list.count(50000), 0) with Timer() as unsorted_count: self.assertEqual(unsorted_list.count(1), 1) self.assertEqual(unsorted_list.count(25000), 1) self.assertEqual(unsorted_list.count(49000), 2) self.assertEqual(unsorted_list.count(50000), 0) self.assertLess(sorted_count.elapsed, unsorted_count.elapsed) with Timer() as sorted_contains: self.assertTrue(0 in sorted_list) self.assertTrue(25000 in sorted_list) self.assertFalse(30000.5 in sorted_list) self.assertFalse(100000 in sorted_list) self.assertFalse(-1 in sorted_list) self.assertTrue(48000 in sorted_list) with Timer() as unsorted_contains: self.assertTrue(0 in unsorted_list) self.assertTrue(25000 in unsorted_list) self.assertFalse(30000.5 in unsorted_list) self.assertFalse(100000 in unsorted_list) self.assertFalse(-1 in unsorted_list) self.assertTrue(48000 in unsorted_list) self.assertLess(sorted_contains.elapsed, unsorted_contains.elapsed)