from ps4a import * # # Test code # You don't need to understand how this test code works (but feel free to look it over!) # To run these tests, simply run this file (open up in your IDE, then run the file as normal) def test_getWordScore(): """ Unit test for getWordScore """ failure=False # dictionary of words and scores words = {("", 7):0, ("it", 7):4, ("was", 7):18, ("scored", 7):54, ("waybill", 7):155, ("outgnaw", 7):127, ("fork", 7):44, ("fork", 4):94} for (word, n) in words.keys(): score = getWordScore(word, n) if score != words[(word, n)]: print("FAILURE: test_getWordScore()") print("\tExpected", words[(word, n)], "points but got '" + str(score) + "' for word '" + word + "', n=" + str(n)) failure=True if not failure: print("SUCCESS: test_getWordScore()") # end of test_getWordScore def test_updateHand(): """ Unit test for updateHand """ # test 1 handOrig = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1} handCopy = handOrig.copy() word = "quail" hand2 = updateHand(handCopy, word) expectedHand1 = {'l':1, 'm':1} expectedHand2 = {'a':0, 'q':0, 'l':1, 'm':1, 'u':0, 'i':0} if hand2 != expectedHand1 and hand2 != expectedHand2: print("FAILURE: test_updateHand('"+ word +"', " + str(handOrig) + ")") print("\tReturned: ", hand2, "\n\t-- but expected:", expectedHand1, "or", expectedHand2) return # exit function if handCopy != handOrig: print("FAILURE: test_updateHand('"+ word +"', " + str(handOrig) + ")") print("\tOriginal hand was", handOrig) print("\tbut implementation of updateHand mutated the original hand!") print("\tNow the hand looks like this:", handCopy) return # exit function # test 2 handOrig = {'e':1, 'v':2, 'n':1, 'i':1, 'l':2} handCopy = handOrig.copy() word = "evil" hand2 = updateHand(handCopy, word) expectedHand1 = {'v':1, 'n':1, 'l':1} expectedHand2 = {'e':0, 'v':1, 'n':1, 'i':0, 'l':1} if hand2 != expectedHand1 and hand2 != expectedHand2: print("FAILURE: test_updateHand('"+ word +"', " + str(handOrig) + ")") print("\tReturned: ", hand2, "\n\t-- but expected:", expectedHand1, "or", expectedHand2) return # exit function if handCopy != handOrig: print("FAILURE: test_updateHand('"+ word +"', " + str(handOrig) + ")") print("\tOriginal hand was", handOrig) print("\tbut implementation of updateHand mutated the original hand!") print("\tNow the hand looks like this:", handCopy) return # exit function # test 3 handOrig = {'h': 1, 'e': 1, 'l': 2, 'o': 1} handCopy = handOrig.copy() word = "hello" hand2 = updateHand(handCopy, word) expectedHand1 = {} expectedHand2 = {'h': 0, 'e': 0, 'l': 0, 'o': 0} if hand2 != expectedHand1 and hand2 != expectedHand2: print("FAILURE: test_updateHand('"+ word +"', " + str(handOrig) + ")") print("\tReturned: ", hand2, "\n\t-- but expected:", expectedHand1, "or", expectedHand2) return # exit function if handCopy != handOrig: print("FAILURE: test_updateHand('"+ word +"', " + str(handOrig) + ")") print("\tOriginal hand was", handOrig) print("\tbut implementation of updateHand mutated the original hand!") print("\tNow the hand looks like this:", handCopy) return # exit function print("SUCCESS: test_updateHand()") # end of test_updateHand def test_isValidWord(wordList): """ Unit test for isValidWord """ failure=False # test 1 word = "hello" handOrig = getFrequencyDict(word) handCopy = handOrig.copy() if not isValidWord(word, handCopy, wordList): print("FAILURE: test_isValidWord()") print("\tExpected True, but got False for word: '" + word + "' and hand:", handOrig) failure = True # Test a second time to see if wordList or hand has been modified if not isValidWord(word, handCopy, wordList): print("FAILURE: test_isValidWord()") if handCopy != handOrig: print("\tTesting word", word, "for a second time - be sure you're not modifying hand.") print("\tAt this point, hand ought to be", handOrig, "but it is", handCopy) else: print("\tTesting word", word, "for a second time - have you modified wordList?") wordInWL = word in wordList print("The word", word, "should be in wordList - is it?", wordInWL) print("\tExpected True, but got False for word: '" + word + "' and hand:", handCopy) failure = True # test 2 hand = {'r': 1, 'a': 3, 'p': 2, 'e': 1, 't': 1, 'u':1} word = "rapture" if isValidWord(word, hand, wordList): print("FAILURE: test_isValidWord()") print("\tExpected False, but got True for word: '" + word + "' and hand:", hand) failure = True # test 3 hand = {'n': 1, 'h': 1, 'o': 1, 'y': 1, 'd':1, 'w':1, 'e': 2} word = "honey" if not isValidWord(word, hand, wordList): print("FAILURE: test_isValidWord()") print("\tExpected True, but got False for word: '"+ word +"' and hand:", hand) failure = True # test 4 hand = {'r': 1, 'a': 3, 'p': 2, 't': 1, 'u':2} word = "honey" if isValidWord(word, hand, wordList): print("FAILURE: test_isValidWord()") print("\tExpected False, but got True for word: '" + word + "' and hand:", hand) failure = True # test 5 hand = {'e':1, 'v':2, 'n':1, 'i':1, 'l':2} word = "evil" if not isValidWord(word, hand, wordList): print("FAILURE: test_isValidWord()") print("\tExpected True, but got False for word: '" + word + "' and hand:", hand) failure = True # test 6 word = "even" if isValidWord(word, hand, wordList): print("FAILURE: test_isValidWord()") print("\tExpected False, but got True for word: '" + word + "' and hand:", hand) print("\t(If this is the only failure, make sure isValidWord() isn't mutating its inputs)") failure = True if not failure: print("SUCCESS: test_isValidWord()") wordList = loadWords() print("----------------------------------------------------------------------") print("Testing getWordScore...") test_getWordScore() print("----------------------------------------------------------------------") print("Testing updateHand...") test_updateHand() print("----------------------------------------------------------------------") print("Testing isValidWord...") test_isValidWord(wordList) print("----------------------------------------------------------------------") print("All done!")