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

class ShrinkifyTests(unittest.TestCase):

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

        
        inputs = ([])
        correct = []
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == None
        message = "Not void."
        self.assertTrue(test, message)
        test = inputs == correct
        message = "Doesn't work on a the empty list."
        self.assertTrue(test, message)

        
        inputs = ([0])
        correct = []
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == None
        message = "Not void."
        self.assertTrue(test, message)
        test = inputs == correct
        message = "Doesn't work on a list with one small element."
        self.assertTrue(test, message)

        
        inputs = ([1])
        correct = []
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == None
        message = "Not void."
        self.assertTrue(test, message)
        test = inputs == correct
        message = "Doesn't work on a list with one smallish element."
        self.assertTrue(test, message)

        
        inputs = ([2])
        correct = [1]
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == None
        message = "Not void."
        self.assertTrue(test, message)
        test = inputs == correct
        message = "Doesn't work on a list with one smallish element."
        self.assertTrue(test, message)

        
        inputs = ([-2])
        correct = [-1]
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == None
        message = "Not void."
        self.assertTrue(test, message)
        test = inputs == correct
        message = "Doesn't work on a list with one smallish element."
        self.assertTrue(test, message)

        
        inputs = ([1, 1, -3, 3, 5, 33, -7, 5])
        correct = [-1.5, 1.5, 2.5, 16.5, -3.5, 2.5]
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == None
        message = "Not void."
        self.assertTrue(test, message)
        test = inputs == correct
        message = "Doesn't work on a longer list."
        self.assertTrue(test, message)

        
        inputs = ([-1.2, 22, 344, 38, -52, 33446690, 1.5, .88, 70, 52])
        correct = [11, 172, 19, -26, 16723345.0, 35, 26]
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == None
        message = "Not void."
        self.assertTrue(test, message)
        test = inputs == correct
        message = "Doesn't work on a long list."
        self.assertTrue(test, message)

        
        inputs = ([0, 1, 2])
        correct = [1]
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == None
        message = "Not void."
        self.assertTrue(test, message)
        test = inputs == correct
        message = "Doesn't work on a list with three elements."
        self.assertTrue(test, message)

        
        inputs = ([0, -1, -2, -3, 4])
        correct = [-1, -1.5, 2.0]
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == None
        message = "Not void."
        self.assertTrue(test, message)
        test = inputs == correct
        message = "Doesn't work on a list with five elements."
        self.assertTrue(test, message)

        
        inputs = ([50, 10, 200, 30, -40, -50, 60, 70, 80, -90, 100])
        correct = [25, 5, 100, 15, -20, -25, 30, 35, 40, -45, 50]
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == None
        message = "Not void."
        self.assertTrue(test, message)
        test = inputs == correct
        message = "Doesn't work on a list where no elements will get removed."
        self.assertTrue(test, message)




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