@@ -1,10 +1,11 @@ | |||
from memory_api_test import * | |||
from memory_seq_test import * | |||
from memory_test import * | |||
print(memory_api_test_deselectMismatchedItems()) | |||
print(memory_api_test_detectVictory()) | |||
print(memory_api_test_generateConstPlayfield()) | |||
print(memory_api_test_hideMatchingItems()) | |||
print(memory_api_test_selectItem()) | |||
print(memory_test_generateConstPlayfield()) | |||
print(memory_test_selectItem_1x()) | |||
print(memory_test_selectItem_2x()) | |||
print(memory_test_selectItem_3x()) | |||
print(memory_test_shouldDeselectMismatchedItems()) | |||
print(memory_test_shouldDetectVictory()) | |||
print(memory_test_shouldHideMatchingItems()) | |||
print(memory_seq_test_selectTwoItems()) | |||
#print(memory_seq_test_selectTwoItems()) |
@@ -1,34 +1,55 @@ | |||
from memory_api_Context import * | |||
from memory_Context import * | |||
from llm import * | |||
# Detect victory | |||
# | |||
# Conditions: | |||
# 1. Matching items have just been hidden and all items are hidden now | |||
######## | |||
# Client initiated input | |||
######## | |||
# Generate constant playfield | |||
@llm_by_value | |||
def memory_generateConstPlayfield( | |||
c: memory_Context | |||
) -> memory_Context: | |||
idGroups: dict[int, int] = { } | |||
id = 0 | |||
for gid in range(0, c.playfieldSize): | |||
idGroups[id] = gid | |||
id += 1 | |||
idGroups[id] = gid | |||
id += 1 | |||
#} | |||
c.playfieldItems = idGroups | |||
c.recentField = "playfieldItems" | |||
return c | |||
#} | |||
# Select item | |||
@llm_by_value | |||
def memory_api_detectVictory( | |||
c: memory_api_Context | |||
) -> memory_api_Context: | |||
def memory_selectItem( | |||
c: memory_Context | |||
) -> memory_Context: | |||
if ( | |||
c.recentField == "hiddenItems" and | |||
len(c.hiddenItems) == len(c.playfieldItems) | |||
len(c.selectedItems) == 2 | |||
): | |||
c.victory = True | |||
c.recentField = "victory" | |||
return c | |||
c.recentField = None | |||
c.selectedItems = [] | |||
c.selectedItems.append(c.selectedId) | |||
c.recentField = "selectedItems" | |||
return c | |||
#} | |||
######## | |||
# System initiated reaction | |||
######## | |||
# Deselect mismatched items | |||
# | |||
# Conditions: | |||
# 1. Two items are selected and they are of different groups | |||
@llm_by_value | |||
def memory_api_deselectMismatchedItems( | |||
c: memory_api_Context | |||
) -> memory_api_Context: | |||
def memory_shouldDeselectMismatchedItems( | |||
c: memory_Context | |||
) -> memory_Context: | |||
if ( | |||
c.recentField == "selectedItems" and | |||
len(c.selectedItems) == 2 and | |||
@@ -44,21 +65,23 @@ def memory_api_deselectMismatchedItems( | |||
return c | |||
#} | |||
# Generate constant playfield suitable for testing and debugging | |||
# Detect victory | |||
# | |||
# Conditions: | |||
# 1. Matching items have just been hidden and all items are hidden now | |||
@llm_by_value | |||
def memory_api_generateConstPlayfield( | |||
c: memory_api_Context | |||
) -> memory_api_Context: | |||
idGroups: dict[int, int] = { } | |||
id = 0 | |||
for gid in range(0, c.playfieldSize): | |||
idGroups[id] = gid | |||
id += 1 | |||
idGroups[id] = gid | |||
id += 1 | |||
#} | |||
c.playfieldItems = idGroups | |||
c.recentField = "playfieldItems" | |||
def memory_shouldDetectVictory( | |||
c: memory_Context | |||
) -> memory_Context: | |||
if ( | |||
c.recentField == "hiddenItems" and | |||
len(c.hiddenItems) == len(c.playfieldItems) | |||
): | |||
c.victory = True | |||
c.recentField = "victory" | |||
return c | |||
c.recentField = None | |||
return c | |||
#} | |||
@@ -67,9 +90,9 @@ def memory_api_generateConstPlayfield( | |||
# Conditions: | |||
# 1. Two items are selected and they are of the same group | |||
@llm_by_value | |||
def memory_api_hideMatchingItems( | |||
c: memory_api_Context | |||
) -> memory_api_Context: | |||
def memory_shouldHideMatchingItems( | |||
c: memory_Context | |||
) -> memory_Context: | |||
if ( | |||
c.recentField == "selectedItems" and | |||
len(c.selectedItems) == 2 and | |||
@@ -83,28 +106,3 @@ def memory_api_hideMatchingItems( | |||
c.recentField = None | |||
return c | |||
#} | |||
# Select item | |||
# | |||
# Conditions: | |||
# 1. There are already two selected items | |||
# 2. Item has just been selected | |||
@llm_by_value | |||
def memory_api_selectItem( | |||
c: memory_api_Context | |||
) -> memory_api_Context: | |||
if ( | |||
len(c.selectedItems) == 2 | |||
): | |||
c.selectedItems = [] | |||
if ( | |||
c.recentField == "selectedId" | |||
): | |||
c.selectedItems.append(c.selectedId) | |||
c.recentField = "selectedItems" | |||
return c | |||
c.recentField = None | |||
return c | |||
#} |
@@ -1,4 +1,4 @@ | |||
class memory_api_Context: | |||
class memory_Context: | |||
def __init__(self): | |||
self.hiddenItems = [] | |||
self.mismatchedItems = [] | |||
@@ -13,7 +13,7 @@ class memory_api_Context: | |||
return self.__str__() | |||
def __str__(self): | |||
return f"memory_api_Context(playfieldI/playfieldS/recentF/selectedId/selectedI: '{self.playfieldItems}'/'{self.playfieldSize}'/'{self.recentField}'/'{self.selectedId}'/'{self.selectedItems}')" | |||
return f"memory_Context(playfieldI/playfieldS/recentF/selectedId/selectedI: '{self.playfieldItems}'/'{self.playfieldSize}'/'{self.recentField}'/'{self.selectedId}'/'{self.selectedItems}')" | |||
def memory_api_createContext(): | |||
return memory_api_Context() | |||
def memory_createContext(): | |||
return memory_Context() |
@@ -1,142 +0,0 @@ | |||
from memory_api import * | |||
from memory_api_Context import * | |||
def memory_api_test_deselectMismatchedItems( | |||
) -> str: | |||
c = memory_api_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_api_generateConstPlayfield(c) | |||
# Select two items of different groups. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_api_selectItem(c) | |||
c.selectedId = 2 | |||
c.recentField = "selectedId" | |||
c = memory_api_selectItem(c) | |||
# Detect mismatching. | |||
c = memory_api_deselectMismatchedItems(c) | |||
# See if the two selected items do not match. | |||
if ( | |||
c.recentField == "mismatchedItems" and | |||
len(c.mismatchedItems) == 2 and | |||
c.mismatchedItems[0] == 0 and | |||
c.mismatchedItems[1] == 2 | |||
): | |||
return "OK: memory_api_deselectMismatchedItems" | |||
#} | |||
return "ERR: memory_api_deselectMismatchedItems" | |||
#} | |||
def memory_api_test_detectVictory( | |||
) -> str: | |||
c = memory_api_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_api_generateConstPlayfield(c) | |||
# Select the first two items of the same group. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_api_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c = memory_api_selectItem(c) | |||
# Hide the first pair. | |||
c = memory_api_hideMatchingItems(c) | |||
# Select the last two items of the same group. | |||
c.selectedId = 2 | |||
c.recentField = "selectedId" | |||
c = memory_api_selectItem(c) | |||
c.selectedId = 3 | |||
c.recentField = "selectedId" | |||
c = memory_api_selectItem(c) | |||
# Hide the second pair. | |||
c = memory_api_hideMatchingItems(c) | |||
# Detect victory. | |||
c = memory_api_detectVictory(c) | |||
# See if victory has been detected. | |||
if ( | |||
c.recentField == "victory" and | |||
c.victory == True | |||
): | |||
return "OK: memory_api_detectVictory" | |||
#} | |||
return "ERR: memory_api_detectVictory" | |||
#} | |||
def memory_api_test_generateConstPlayfield( | |||
) -> str: | |||
c = memory_api_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_api_generateConstPlayfield(c) | |||
if ( | |||
c.recentField == "playfieldItems" and | |||
len(c.playfieldItems) == 4 and | |||
c.playfieldItems[0] == 0 and | |||
c.playfieldItems[1] == 0 and | |||
c.playfieldItems[2] == 1 and | |||
c.playfieldItems[3] == 1 | |||
): | |||
return "OK: memory_api_generateConstPlayfield" | |||
#} | |||
return "ERR: memory_api_generateConstPlayfield" | |||
#} | |||
def memory_api_test_hideMatchingItems( | |||
) -> str: | |||
c = memory_api_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_api_generateConstPlayfield(c) | |||
# Select two items of the same group. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_api_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c = memory_api_selectItem(c) | |||
# Hide matching items. | |||
c = memory_api_hideMatchingItems(c) | |||
# See if the two selected items match. | |||
if ( | |||
c.recentField == "hiddenItems" and | |||
len(c.hiddenItems) == 2 and | |||
c.hiddenItems[0] == 0 and | |||
c.hiddenItems[1] == 1 | |||
): | |||
return "OK: memory_api_hideMatchingItems" | |||
#} | |||
return "ERR: memory_api_hideMatchingItems" | |||
#} | |||
def memory_api_test_selectItem( | |||
) -> str: | |||
c = memory_api_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_api_generateConstPlayfield(c) | |||
# Select the first item. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_api_selectItem(c) | |||
# See if it's in selectedItems now. | |||
if ( | |||
c.recentField == "selectedItems" and | |||
len(c.selectedItems) == 1 and | |||
c.selectedItems[0] == 0 | |||
): | |||
return "OK: memory_api_selectItem" | |||
#} | |||
return "ERR: memory_api_selectItem" | |||
#} | |||
@@ -0,0 +1,181 @@ | |||
from memory import * | |||
from memory_Context import * | |||
def memory_test_generateConstPlayfield( | |||
) -> str: | |||
c = memory_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
if ( | |||
c.recentField == "playfieldItems" and | |||
len(c.playfieldItems) == 4 and | |||
c.playfieldItems[0] == 0 and | |||
c.playfieldItems[1] == 0 and | |||
c.playfieldItems[2] == 1 and | |||
c.playfieldItems[3] == 1 | |||
): | |||
return "OK: memory_generateConstPlayfield" | |||
#} | |||
return "ERR: memory_generateConstPlayfield" | |||
#} | |||
def memory_test_selectItem_1x( | |||
) -> str: | |||
c = memory_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select the first item. | |||
c.selectedId = 0 | |||
c = memory_selectItem(c) | |||
# See if it's in selectedItems now. | |||
if ( | |||
c.recentField == "selectedItems" and | |||
len(c.selectedItems) == 1 and | |||
c.selectedItems[0] == 0 | |||
): | |||
return "OK: memory_selectItem_1x" | |||
#} | |||
return "ERR: memory_selectItem_1x" | |||
#} | |||
def memory_test_selectItem_2x( | |||
) -> str: | |||
c = memory_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select the first two items. | |||
c.selectedId = 0 | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c = memory_selectItem(c) | |||
# See if both items are selected now. | |||
if ( | |||
c.recentField == "selectedItems" and | |||
len(c.selectedItems) == 2 and | |||
c.selectedItems[0] == 0 and | |||
c.selectedItems[1] == 1 | |||
): | |||
return "OK: memory_selectItem_2x" | |||
#} | |||
return "ERR: memory_selectItem_2x" | |||
#} | |||
def memory_test_selectItem_3x( | |||
) -> str: | |||
c = memory_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select three items. | |||
c.selectedId = 0 | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c = memory_selectItem(c) | |||
c.selectedId = 2 | |||
c = memory_selectItem(c) | |||
# See if only one (last) item is selected now. | |||
if ( | |||
c.recentField == "selectedItems" and | |||
len(c.selectedItems) == 1 and | |||
c.selectedItems[0] == 2 | |||
): | |||
return "OK: memory_selectItem_3x" | |||
#} | |||
return "ERR: memory_selectItem_3x" | |||
#} | |||
def memory_test_shouldDeselectMismatchedItems( | |||
) -> str: | |||
c = memory_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select two items of different groups. | |||
c.selectedId = 0 | |||
c = memory_selectItem(c) | |||
c.selectedId = 2 | |||
c = memory_selectItem(c) | |||
# Detect mismatching. | |||
c = memory_shouldDeselectMismatchedItems(c) | |||
# See if the two selected items do not match. | |||
if ( | |||
c.recentField == "mismatchedItems" and | |||
len(c.mismatchedItems) == 2 and | |||
c.mismatchedItems[0] == 0 and | |||
c.mismatchedItems[1] == 2 | |||
): | |||
return "OK: memory_shouldDeselectMismatchedItems" | |||
#} | |||
return "ERR: memory_shouldDeselectMismatchedItems" | |||
#} | |||
def memory_test_shouldDetectVictory( | |||
) -> str: | |||
c = memory_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select the first two items of the same group. | |||
c.selectedId = 0 | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c = memory_selectItem(c) | |||
# Hide the first pair. | |||
c = memory_shouldHideMatchingItems(c) | |||
# Select the last two items of the same group. | |||
c.selectedId = 2 | |||
c = memory_selectItem(c) | |||
c.selectedId = 3 | |||
c = memory_selectItem(c) | |||
# Hide the second pair. | |||
c = memory_shouldHideMatchingItems(c) | |||
# Detect victory. | |||
c = memory_shouldDetectVictory(c) | |||
# See if victory has been detected. | |||
if ( | |||
c.recentField == "victory" and | |||
c.victory == True | |||
): | |||
return "OK: memory_shouldDetectVictory" | |||
#} | |||
return "ERR: memory_shouldDetectVictory" | |||
#} | |||
def memory_test_shouldHideMatchingItems( | |||
) -> str: | |||
c = memory_createContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select two items of the same group. | |||
c.selectedId = 0 | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c = memory_selectItem(c) | |||
# Hide matching items. | |||
c = memory_shouldHideMatchingItems(c) | |||
# See if the two selected items match. | |||
if ( | |||
c.recentField == "hiddenItems" and | |||
len(c.hiddenItems) == 2 and | |||
c.hiddenItems[0] == 0 and | |||
c.hiddenItems[1] == 1 | |||
): | |||
return "OK: memory_shouldHideMatchingItems" | |||
#} | |||
return "ERR: memory_shouldHideMatchingItems" | |||
#} |