#################################################################
##  CS 3200 (Fall 2025), Assignment #2                         ##
##  Program File Name: testAltNim.py                           ##
##       Student Name: Todd Wareham                            ##
##         Login Name: harold                                  ##
##              MUN #: 8008765                                 ##
#################################################################

## Main program for Assigment #2.
##
##      *** DO NOT CHANGE THE CODE IN THIS FILE ***
##

from myAltNimClasses import *
from myAltNimFunctions import *


def main():

## Test #1

   startOdd = True
   maxDepth = 1
   givenSticks = 2
   startState = State(startOdd, maxDepth, 0, None, givenSticks)
   bestVal = MiniMax(startState, 0, True)
   print("\nTest #1: startOdd = " + str(startOdd) + 
         " / maxDepth = " + str(maxDepth) + 
         " / givenSticks = " + str(givenSticks))
   print("Test #1: Best value of " + str(bestVal) + 
         " obtained with action " +
         str(startState.getCurrentBestAction()))

## Test #2

   startOdd = False
   maxDepth = 1
   givenSticks = 2
   startState = State(startOdd, maxDepth, 0, None, givenSticks)
   bestVal = MiniMax(startState, 0, True)
   print("\nTest #2: startOdd = " + str(startOdd) + 
         " / maxDepth = " + str(maxDepth) + 
         " / givenSticks = " + str(givenSticks))
   print("Test #2: Best value of " + str(bestVal) + 
         " obtained with action " +
         str(startState.getCurrentBestAction()))

## Test #3

   startOdd = True
   maxDepth = 2
   givenSticks = 6
   startState = State(startOdd, maxDepth, 0, None, givenSticks)
   bestVal = MiniMax(startState, 0, True)
   print("\nTest #3: startOdd = " + str(startOdd) + 
         " / maxDepth = " + str(maxDepth) + 
         " / givenSticks = " + str(givenSticks))
   print("Test #3: Best value of " + str(bestVal) + 
         " obtained with action " +
         str(startState.getCurrentBestAction()))

## Test #4

   startOdd = False
   maxDepth = 2
   givenSticks = 6
   startState = State(startOdd, maxDepth, 0, None, givenSticks)
   bestVal = MiniMax(startState, 0, True)
   print("\nTest #4: startOdd = " + str(startOdd) + 
         " / maxDepth = " + str(maxDepth) + 
         " / givenSticks = " + str(givenSticks))
   print("Test #4: Best value of " + str(bestVal) + 
         " obtained with action " +
         str(startState.getCurrentBestAction()))

## Test #5

   startOdd = True
   maxDepth = 3
   givenSticks = 15
   startState = State(startOdd, maxDepth, 0, None, givenSticks)
   bestVal = MiniMax(startState, 0, True)
   print("\nTest #5: startOdd = " + str(startOdd) + 
         " / maxDepth = " + str(maxDepth) + 
         " / givenSticks = " + str(givenSticks))
   print("Test #5: Best value of " + str(bestVal) + 
         " obtained with action " +
         str(startState.getCurrentBestAction()))

## Test #6

   startOdd = False
   maxDepth = 3
   givenSticks = 15
   startState = State(startOdd, maxDepth, 0, None, givenSticks)
   bestVal = MiniMax(startState, 0, True)
   print("\nTest #6: startOdd = " + str(startOdd) + 
         " / maxDepth = " + str(maxDepth) + 
         " / givenSticks = " + str(givenSticks))
   print("Test #6: Best value of " + str(bestVal) + 
         " obtained with action " +
         str(startState.getCurrentBestAction()))

## Test #7

   startOdd = True
   maxDepth = 3
   givenSticks = 15
   startState = State(startOdd, maxDepth, 2, None, givenSticks)
   bestVal = MiniMax(startState, 0, True)
   print("\nTest #7: startOdd = " + str(startOdd) + 
         " / maxDepth = " + str(maxDepth) + 
         " / givenSticks = " + str(givenSticks))
   print("Test #7: Best value of " + str(bestVal) + 
         " obtained with action " +
         str(startState.getCurrentBestAction()))

## Test #8

   startOdd = False
   maxDepth = 3
   givenSticks = 15
   startState = State(startOdd, maxDepth, 2, None, givenSticks)
   bestVal = MiniMax(startState, 0, True)
   print("\nTest #8: startOdd = " + str(startOdd) + 
         " / maxDepth = " + str(maxDepth) + 
         " / givenSticks = " + str(givenSticks))
   print("Test #8: Best value of " + str(bestVal) + 
         " obtained with action " +
         str(startState.getCurrentBestAction()))

## Test #9

   startOdd = True
   maxDepth = 7
   givenSticks = 33
   startState = State(startOdd, maxDepth, 0, None, givenSticks)
   bestVal = MiniMax(startState, 0, True)
   print("\nTest #9: startOdd = " + str(startOdd) + 
         " / maxDepth = " + str(maxDepth) + 
         " / givenSticks = " + str(givenSticks))
   print("Test #9: Best value of " + str(bestVal) + 
         " obtained with action " +
         str(startState.getCurrentBestAction()))

## Test #10

   startOdd = False
   maxDepth = 7
   givenSticks = 33
   startState = State(startOdd, maxDepth, 0, None, givenSticks)
   bestVal = MiniMax(startState, 0, True)
   print("\nTest #10: startOdd = " + str(startOdd) + 
         " / maxDepth = " + str(maxDepth) + 
         " / givenSticks = " + str(givenSticks))
   print("Test #10: Best value of " + str(bestVal) + 
         " obtained with action " +
         str(startState.getCurrentBestAction()))


main()
