From 0377eab73c1634c00b37dd19b1c22cf09e1b27d4 Mon Sep 17 00:00:00 2001 From: Michael Mkwelele Date: Tue, 12 Nov 2019 07:19:00 -0800 Subject: [PATCH] Add tests for the binary search implementation. (#110) --- .../src/main/BinarySearch.java | 63 +++++++++++++++++++ .../src/test/BinarySearchTest.java | 50 +++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 01_introduction_to_algorithms/java/01_binary_search/src/main/BinarySearch.java create mode 100644 01_introduction_to_algorithms/java/01_binary_search/src/test/BinarySearchTest.java diff --git a/01_introduction_to_algorithms/java/01_binary_search/src/main/BinarySearch.java b/01_introduction_to_algorithms/java/01_binary_search/src/main/BinarySearch.java new file mode 100644 index 0000000..bc3086d --- /dev/null +++ b/01_introduction_to_algorithms/java/01_binary_search/src/main/BinarySearch.java @@ -0,0 +1,63 @@ +package main; + +public class BinarySearch { + public static void main(String[] args) { + int[] myList = {87, 21, 45, 93}; + + System.out.println(binarySearch(myList, 93)); + System.out.println(binarySearch(myList, 16)); + } + + public static int binarySearch(int[] list, int item) { + if (isListEmpty(list)) { + return -1; + } + + int low = 0; + int high = list.length - 1; + + while (low <= high) { + int mid = (low + high) / 2; + int guess = list[mid]; + + if (guessEqualsItem(guess, item)) { + return mid; + } else if (guessGreaterThanItem(guess, item)) { + high = mid - 1; + } else if(guessLessThanItem(guess, item)) { + low = mid + 1; + } + } + + return -1; + } + + public static boolean isListEmpty(int[] myList) { + int listSize = myList.length; + if (listSize == 0) { + return true; + } + return false; + } + + public static boolean guessEqualsItem(int guess, int item) { + if (guess != item) { + return false; + } + return true; + } + + public static boolean guessGreaterThanItem(int guess, int item) { + if (guess < item) { + return false; + } + return true; + } + + public static boolean guessLessThanItem(int guess, int item) { + if (guess > item) { + return false; + } + return true; + } +} diff --git a/01_introduction_to_algorithms/java/01_binary_search/src/test/BinarySearchTest.java b/01_introduction_to_algorithms/java/01_binary_search/src/test/BinarySearchTest.java new file mode 100644 index 0000000..5ebc5e3 --- /dev/null +++ b/01_introduction_to_algorithms/java/01_binary_search/src/test/BinarySearchTest.java @@ -0,0 +1,50 @@ +package test; + +import main.BinarySearch; +import org.junit.Assert; +import org.junit.Test; + +public class BinarySearchTest { + @Test + public void testListIsEmpty() { + BinarySearch binarySearch = new BinarySearch(); + int[] myList = {6, 9}; + int[] emptyList = {}; + + Assert.assertEquals(false, binarySearch.isListEmpty(myList)); + Assert.assertEquals(true, binarySearch.isListEmpty(emptyList)); + } + + @Test + public void testGuessEqualsItem() { + BinarySearch binarySearch = new BinarySearch(); + + Assert.assertEquals(true, binarySearch.guessEqualsItem(3, 3)); + Assert.assertEquals(false, binarySearch.guessEqualsItem(0, 4)); + } + + @Test + public void testGuessIsLessThanItem() { + BinarySearch binarySearch = new BinarySearch(); + + Assert.assertEquals(true, binarySearch.guessLessThanItem(2, 7)); + Assert.assertEquals(false, binarySearch.guessLessThanItem(6, 1)); + } + + @Test + public void testGuessGreaterThanItem() { + BinarySearch binarySearch = new BinarySearch(); + + Assert.assertEquals(true, binarySearch.guessGreaterThanItem(17, 12)); + Assert.assertEquals(false, binarySearch.guessGreaterThanItem(13, 28)); + } + + @Test + public void testGivenListAndItemReturnIndexOfItem() { + BinarySearch binarySearch = new BinarySearch(); + int[] testList = {1, 3, 5, 7, 9}; + + Assert.assertEquals(1, binarySearch.binarySearch(testList, 3)); + Assert.assertEquals(-1, binarySearch.binarySearch(testList, 77)); + } +}