Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion exercises/binary-search/binary_search.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
def binary_search(list_of_numbers, number):
def find(search_list, value):
pass
25 changes: 12 additions & 13 deletions exercises/binary-search/binary_search_test.py
Original file line number Diff line number Diff line change
@@ -1,52 +1,51 @@
import unittest

from binary_search import binary_search
from binary_search import find

# Tests adapted from `problem-specifications//canonical-data.json` @ v1.3.0


class BinarySearchTest(unittest.TestCase):
def test_finds_value_in_array_with_one_element(self):
self.assertEqual(binary_search([6], 6), 0)
self.assertEqual(find([6], 6), 0)

def test_finds_value_in_middle_of_array(self):
self.assertEqual(binary_search([1, 3, 4, 6, 8, 9, 11], 6), 3)
self.assertEqual(find([1, 3, 4, 6, 8, 9, 11], 6), 3)

def test_finds_value_at_beginning_of_array(self):
self.assertEqual(binary_search([1, 3, 4, 6, 8, 9, 11], 1), 0)
self.assertEqual(find([1, 3, 4, 6, 8, 9, 11], 1), 0)

def test_finds_value_at_end_of_array(self):
self.assertEqual(binary_search([1, 3, 4, 6, 8, 9, 11], 11), 6)
self.assertEqual(find([1, 3, 4, 6, 8, 9, 11], 11), 6)

def test_finds_value_in_array_of_odd_length(self):
self.assertEqual(
binary_search([1, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 634],
144), 9)
find([1, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 634], 144), 9)

def test_finds_value_in_array_of_even_length(self):
self.assertEqual(
binary_search([1, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377], 21),
find([1, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377], 21),
5)

def test_identifies_value_missing(self):
with self.assertRaisesWithMessage(ValueError):
binary_search([1, 3, 4, 6, 8, 9, 11], 7)
find([1, 3, 4, 6, 8, 9, 11], 7)

def test_value_smaller_than_arrays_minimum(self):
with self.assertRaisesWithMessage(ValueError):
binary_search([1, 3, 4, 6, 8, 9, 11], 0)
find([1, 3, 4, 6, 8, 9, 11], 0)

def test_value_larger_than_arrays_maximum(self):
with self.assertRaisesWithMessage(ValueError):
binary_search([1, 3, 4, 6, 8, 9, 11], 13)
find([1, 3, 4, 6, 8, 9, 11], 13)

def test_empty_array(self):
with self.assertRaisesWithMessage(ValueError):
binary_search([], 1)
find([], 1)

def test_nothing_is_found_when_left_and_right_bounds_cross(self):
with self.assertRaisesWithMessage(ValueError):
binary_search([1, 2], 0)
find([1, 2], 0)

# Utility functions
def setUp(self):
Expand Down
2 changes: 1 addition & 1 deletion exercises/binary-search/example.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
def binary_search(search_list, value):
def find(search_list, value):
low = 0
high = len(search_list) - 1
while low <= high:
Expand Down