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 AllOddTests(unittest.TestCase):

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

        
        inputs = ([])
        original = copy.deepcopy(inputs)
        correct = True 
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == correct
        message = "Doesn't work on the empty list."
        self.assertTrue(test, message)
        test = inputs == original
        message = "Changes the inputs.  It should leave the input list unmodified."
        self.assertTrue(test, message)

        
        inputs = ([39])
        original = copy.deepcopy(inputs)
        correct = True 
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == correct
        message = "Doesn't work on a list with a single odd number."
        self.assertTrue(test, message)
        test = inputs == original
        message = "Changes the inputs.  It should leave the input list unmodified."
        self.assertTrue(test, message)

        
        inputs = ([222])
        original = copy.deepcopy(inputs)
        correct = False
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == correct
        message = "Doesn't work on a list with a single even number."
        self.assertTrue(test, message)
        test = inputs == original
        message = "Changes the inputs.  It should leave the input list unmodified."
        self.assertTrue(test, message)

        
        inputs = ([5, 7, 4, 19, -3])
        original = copy.deepcopy(inputs)
        correct = False 
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == correct
        message = "Doesn't work on a list with many odd numbers and one even number."
        self.assertTrue(test, message)
        test = inputs == original
        message = "Changes the inputs.  It should leave the input list unmodified."
        self.assertTrue(test, message)

        
        inputs = ([3, 5, -11, 77, 999, 13, -21])
        original = copy.deepcopy(inputs)
        correct = True 
        if isinstance(inputs, tuple):
            result = function(*inputs)
        else:
            result = function(inputs)
        test = result == correct
        message = "Doesn't work on a list of all odds."
        self.assertTrue(test, message)
        test = inputs == original
        message = "Changes the inputs.  It should leave the input list unmodified."
        self.assertTrue(test, message)
        
        
if __name__ == "__main__":
    tests = AllOddTests()
    tests.test_default_case()