import unittest
import io
from unittest import mock
#import main
import math
import copy
import inspect
import student_X as main #Replace student_X with your filename 
    
    
    
    
class AnySidedDieRollTests(unittest.TestCase):

    def test_default_case(self):
        # Your test case logic here (replace the example assertion below)
        # You may also rename this to any function in the form of 'test_your_test_name(self):'
        die = main.AnySidedDie(13)

        incorrect = ""
        try:
            doc = die.roll.__doc__
            doc = doc.strip()
        except:
            doc = ""
        test = doc != incorrect
        message = "No docstring."
        self.assertTrue(test, message)

        
        rolls = []
        for i in range(1000):
            rolls.append(die.roll())
        test = 1 in rolls
        message = "Couldn't roll a number that I should have been able to roll."
        self.assertTrue(test, message)
        test = 13 in rolls 
        self.assertTrue(test, message)
        test = 8 in rolls
        self.assertTrue(test, message)
        test = not 0 in rolls
        message = "Rolls something it shouldn't be able to."
        self.assertTrue(test, message)
        test = not 14 in rolls
        self.assertTrue(test, message)

        die = main.AnySidedDie(113)
        rolls = []
        for i in range(10000):
            rolls.append(die.roll())
        test = 1 in rolls
        message = "Couldn't roll a number that I should have been able to roll."
        self.assertTrue(test, message)
        test = 113 in rolls
        self.assertTrue(test, message)
        test = 48 in rolls
        self.assertTrue(test, message)
        test = not 0 in rolls
        message = "Rolls something it shouldn't be able to."
        self.assertTrue(test, message)
        test = not 114 in rolls
        self.assertTrue(test, message)


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