import unittest
import io
import re
from unittest import mock
import math
import copy
import student_X as main #Replace student_X with your filename 
    
    
    
 

class IndexOfMaxInRangeTests(unittest.TestCase):

    def test_default_case(self):
        function = main.index_of_max_in_range
        
        test = False
        try:
            incorrect = ""
            result = function.__doc__
            result = result.strip()
            test = incorrect != result
        except:
            pass
        message = "No docstring."
        self.assertTrue(test, message)

        
        inputs = ([10], 0, 0)
        correct = 0
        original = copy.deepcopy(inputs)
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = inputs == original
        message = "Modifies the inputs."
        self.assertTrue(test, message)
        test = result == correct
        message = "Doesn't work on a case where the list only has one element."
        self.assertTrue(test, message)

        
        inputs = ([-20, -33, -2024], 0, 2)
        correct = 0
        original = copy.deepcopy(inputs)
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = inputs == original
        message = "Modifies the inputs."
        self.assertTrue(test, message)
        test = result == correct
        message = "Doesn't work on a case where everything in the list is negative."
        self.assertTrue(test, message)

        
        inputs = ([10, 9, 8, 7], 0, 3)
        correct = 0
        original = copy.deepcopy(inputs)
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = inputs == original
        message = "Modifies the inputs."
        self.assertTrue(test, message)
        test = result == correct
        message = "Doesn't work on a case where the largest element is the first one in the list."
        self.assertTrue(test, message)

        
        inputs = ([10, 9, 8, 11], 0, 3)
        correct = 3
        original = copy.deepcopy(inputs)
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = inputs == original
        message = "Modifies the inputs."
        self.assertTrue(test, message)
        test = result == correct
        message = "Doesn't work on a case where the largest element is last in the list."
        self.assertTrue(test, message)

        
        inputs = ([10, 9, 7, 6, 8, 12], 1, 3)
        correct = 1
        original = copy.deepcopy(inputs)
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = inputs == original
        message = "Modifies the inputs."
        self.assertTrue(test, message)
        test = result == correct
        message = "Doesn't work on a case where the largest element is first in the range."
        self.assertTrue(test, message)

        
        inputs = ([10, 9, 7, 10, 8, 12], 1, 3)
        correct = 3
        original = copy.deepcopy(inputs)
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = inputs == original
        message = "Modifies the inputs."
        self.assertTrue(test, message)
        test = result == correct
        message = "Doesn't work on a case where the largest element is last in the range."
        self.assertTrue(test, message)

        
        inputs = ([-20, -50, -15, -20, -8, -9, -77, -11, -80, -12], 1, 6)
        correct = 4
        original = copy.deepcopy(inputs)
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = inputs == original
        message = "Modifies the inputs."
        self.assertTrue(test, message)
        test = result == correct
        message = "Doesn't work on a case where the largest element is in the middle of the range."
        self.assertTrue(test, message)

        
        inputs = ([15, 6, 7, 8, 9, 10, 13, 10, 11, 10, 9, 8, 7, 6, 20], 4, 9)
        correct = 6
        original = copy.deepcopy(inputs)
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = inputs == original
        message = "Modifies the inputs."
        self.assertTrue(test, message)
        test = result == correct
        message = "Doesn't work on a case with a long list."
        self.assertTrue(test, message)



        
        
if __name__ == "__main__":
    tests = IndexOfMaxInRangeTests()
    tests.test_default_case()