예제 #1
0
 def test_min_search(self):
     # simple comparable ints in list
     self.assertEqual(1, search.min_search([3, 2, 1, 2, 3, 5, 6, 7, 9, 10]))
     # should work also on list of strings
     self.assertEqual("a", search.min_search(["e", "d", "c", "b", "a", "b", "c", "d", "e", "f", "g", "h"]))
     # but also on strings
     self.assertEqual("a", search.min_search("edcbabcdefghijklmnopqrstxz"))
     # generally on any list of elements implementing __lt__
     self.assertEqual(0, search.min_search([LessThanableElement(abs(i)) for i in range(-100, 99)]).val)
예제 #2
0
 def test_min_search_edge_cases(self):
     # minimum at end of strictly monotonically decreasing list
     self.assertEqual(1, search.min_search([10, 5, 1]))
     # minimum exactly at center of a strictly monotonically decreasing then increasing list
     self.assertEqual(1, search.min_search([100, 1, 2]))
     # minimum at beginning of a strictly monotonically increasing list
     self.assertEqual(1, search.min_search([1, 2, 3]))
     # list containing a single item, that item is the minimum
     self.assertEqual(1, search.min_search([1]))
     # smallest splittable list, minimum at end
     self.assertEqual(1, search.min_search([2, 1]))
     # smallest splittable list, minimum at beginning
     self.assertEqual(1, search.min_search([1, 2]))
예제 #3
0
 def test_min_search_unexpected_data(self):
     with self.assertRaises(ValueError):
         search.min_search([10, 9, 8, 8, 8, 7, 5, 3, 4, 5, 5, 6, 6, 7, 8, 9, 10, 10, 11])
예제 #4
0
 def test_min_search_empty_data(self):
     with self.assertRaises(AssertionError):
         search.min_search([])
예제 #5
0
 def test_min_search_no_len(self):
     with self.assertRaises(AssertionError):
         search.min_search(SubscriptableClassWithoutLen())
예제 #6
0
 def test_min_search_unsubscriptable_should_fail(self):
     with self.assertRaises(AssertionError):
         search.min_search(UnscubscriptableClassWithLen())