# HackerRank Day 27 Solution in Python: Testing

Today we will see the HackerRank Day 27 Solution in Python. The problem is named Testing which is part of 30 Days of code on HackerRank. Let’s get started!

## Day 27: Testing Problem statement

The problem statement given is about unit testing. We need to write a function that meets the following requirements:

• For a given array of n integers, the function returns the index of the element with the minimum value in the array. If there is more than one element with the minimum value, it returns the smallest one.
• If an empty array is passed to the function, it raises an exception.

We have to finish the implementation of 3 classes to provide data and expected results for the tests.

In the class `TestDataEmptyArray`:

• `get_array()` returns an empty array

In the class `TestDataUniqueValues`:

• `get_array()` returns an array of size at least 2 with all unique elements
• `get_expected_result()` returns the expected minimum value index for this array

In the class `TestDataExactlyTwoDifferentMinimums`:

• `get_array()` returns an array where the minimum value occurs at exactly 2 indices
• `get_expected_result()` returns the expected index

You can solve the problem here.

## HackerRank Day 27 Solution in Python

```def minimum_index(seq):
if len(seq) == 0:
raise ValueError("Cannot get the minimum value index from an empty sequence")
min_idx = 0
for i in range(1, len(seq)):
if seq[i] < seq[min_idx]:
min_idx = i
return min_idx
class TestDataEmptyArray():

#Function to return an empty array
def get_array():
return []

class TestDataUniqueValues():

#Function to return an array of size at least 2 with all unique elements
def get_array():
uniq_array = [1,2,3,4]
return uniq_array

#Function to return the expected minimum value index for this array
def get_expected_result():
return 0

class TestDataExactlyTwoDifferentMinimums:
#Function to return an array where the minimum value occurs at exactly 2 indices
def get_array():
rtn_list = [0,2,0,3]
return rtn_list

#Function to  return the expected index
def get_expected_result():
return 0

def TestWithEmptyArray():
try:
seq = TestDataEmptyArray.get_array()
result = minimum_index(seq)
except ValueError as e:
pass
else:
assert False

def TestWithUniqueValues():
seq = TestDataUniqueValues.get_array()
assert len(seq) >= 2

assert len(list(set(seq))) == len(seq)

expected_result = TestDataUniqueValues.get_expected_result()
result = minimum_index(seq)
assert result == expected_result

def TestiWithExactyTwoDifferentMinimums():
seq = TestDataExactlyTwoDifferentMinimums.get_array()
assert len(seq) >= 2
tmp = sorted(seq)
assert tmp[0] == tmp[1] and (len(tmp) == 2 or tmp[1] < tmp[2])

expected_result = TestDataExactlyTwoDifferentMinimums.get_expected_result()
result = minimum_index(seq)
assert result == expected_result

TestWithEmptyArray()
TestWithUniqueValues()
TestiWithExactyTwoDifferentMinimums()
print("OK")```

## Code Explanation

• First, we created the class `TestDataEmptyArray`, in which the method `get_array()` returns an empty array
• Then we created the class `TestDataUniqueValues` in which `get_array()` returns an array of size at least 2 with all unique elements. The `get_expected_result()` method returns the expected minimum value index for this array
• Then we created the class, in which `get_array()` returns an array where the minimum value occurs at exactly 2 indices. The `get_expected_result()` method returns the expected index