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

class MySquareRootTests(unittest.TestCase):

    def test_default_case(self):
        function = main.my_square_root

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

        
        inputs = (4, )
        correct = 2
        test = False
        with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            if isinstance(inputs, tuple):
                result = function(*inputs)
            else:
                result = function(inputs)
        printed_output = fake_stdout.getvalue().strip()
        test = abs(correct - result) < .0001
        
        self.assertTrue(test, "Doesn't work on 4 and the default delta.")

        
        inputs = (16, .1)
        delta = inputs[1]
        correct = 4
        test = False
        with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            if isinstance(inputs, tuple):
                result = function(*inputs)
            else:
                result = function(inputs)
        printed_output = fake_stdout.getvalue().strip()
        test = abs(correct - result) < delta
        
        self.assertTrue(test, "Doesn't work when I specify the delta.")

        
        inputs = (121, .01)
        delta = inputs[1]
        correct = 11
        test = False
        with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            if isinstance(inputs, tuple):
                result = function(*inputs)
            else:
                result = function(inputs)
        printed_output = fake_stdout.getvalue().strip()
        test = abs(correct - result) < delta
        
        self.assertTrue(test, "Doesn't work when I specify a small delta.")

        
        inputs = (25, 2)
        delta = inputs[1]
        correct = 5
        test = False
        with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            if isinstance(inputs, tuple):
                result = function(*inputs)
            else:
                result = function(inputs)
        printed_output = fake_stdout.getvalue().strip()
        test = abs(correct - result) < delta
        
        self.assertTrue(test, "Doesn't work when I specify a large delta.")
        
        
        
if __name__ == "__main__":
    tests = MySquareRootTests()
    tests.test_default_case()