@@ -1,19 +0,0 @@ | |||
class MemoryContext: | |||
def __init__(self): | |||
self.hiddenItems = [] | |||
self.mismatchedItems = [] | |||
self.playfieldItems = {} | |||
self.playfieldSize = 0 | |||
self.recentField = None | |||
self.selectedId = None | |||
self.selectedItems = [] | |||
self.victory = False | |||
def __repr__(self): | |||
return self.__str__() | |||
def __str__(self): | |||
return f"MemoryContext(plyfieldI/playfieldS/recentF/selectedId/selectedI: '{self.playfieldItems}'/'{self.playfieldSize}'/'{self.recentField}'/'{self.selectedId}'/'{self.selectedItems}')" | |||
def memory_createEmptyContext(): | |||
return MemoryContext() |
@@ -1,329 +0,0 @@ | |||
from entities import * | |||
from llm import * | |||
# Detect victory | |||
# | |||
# Conditions: | |||
# 1. Matching items have just been hidden and all items are hidden now | |||
@llm_by_value | |||
def memory_detectVictory( | |||
c: MemoryContext | |||
) -> MemoryContext: | |||
if ( | |||
c.recentField == "hiddenItems" and | |||
len(c.hiddenItems) == len(c.playfieldItems) | |||
): | |||
c.victory = True | |||
c.recentField = "victory" | |||
return c | |||
c.recentField = None | |||
return c | |||
#} | |||
# Deselect mismatched items | |||
# | |||
# Conditions: | |||
# 1. Two items are selected and they are of different groups | |||
@llm_by_value | |||
def memory_deselectMismatchedItems( | |||
c: MemoryContext | |||
) -> MemoryContext: | |||
if ( | |||
c.recentField == "selectedItems" and | |||
len(c.selectedItems) == 2 and | |||
c.playfieldItems[c.selectedItems[0]] != c.playfieldItems[c.selectedItems[1]] | |||
): | |||
c.mismatchedItems.clear() | |||
c.mismatchedItems.append(c.selectedItems[0]) | |||
c.mismatchedItems.append(c.selectedItems[1]) | |||
c.recentField = "mismatchedItems" | |||
return c | |||
c.recentField = None | |||
return c | |||
#} | |||
# Generate constant playfield suitable for testing and debugging | |||
@llm_by_value | |||
def memory_generateConstPlayfield( | |||
c: MemoryContext | |||
) -> MemoryContext: | |||
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 | |||
#} | |||
# Hide matching selected items | |||
# | |||
# Conditions: | |||
# 1. Two items are selected and they are of the same group | |||
@llm_by_value | |||
def memory_hideMatchingItems( | |||
c: MemoryContext | |||
) -> MemoryContext: | |||
if ( | |||
c.recentField == "selectedItems" and | |||
len(c.selectedItems) == 2 and | |||
c.playfieldItems[c.selectedItems[0]] == c.playfieldItems[c.selectedItems[1]] | |||
): | |||
c.hiddenItems.append(c.selectedItems[0]) | |||
c.hiddenItems.append(c.selectedItems[1]) | |||
c.recentField = "hiddenItems" | |||
return c | |||
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_selectItem( | |||
c: MemoryContext | |||
) -> MemoryContext: | |||
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 | |||
#} | |||
# Test. | |||
def test_memory_generateConstPlayfield( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
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 test_memory_selectItem( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select the first item. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
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: selectItem" | |||
#} | |||
return "ERR: selectItem" | |||
#} | |||
def test_selectTwoItems( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select the first two items. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
# See if it's 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: selectTwoItems" | |||
#} | |||
return "ERR: selectTwoItems" | |||
#} | |||
def test_selectThreeItems( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select three items. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 2 | |||
c.recentField = "selectedId" | |||
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: selectThreeItems" | |||
#} | |||
return "ERR: selectThreeItems" | |||
#} | |||
def test_memory_hideMatchingItems( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select two items of the same group. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
# Hide matching items. | |||
c = memory_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_hideMatchingItems" | |||
#} | |||
return "ERR: memory_hideMatchingItems" | |||
#} | |||
def test_memory_deselectMismatchedItems( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select two items of different groups. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 2 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
# Detect mismatching. | |||
c = memory_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_deselectMismatchedItems" | |||
#} | |||
return "ERR: memory_deselectMismatchedItems" | |||
#} | |||
def test_memory_detectVictory( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select the first two items of the same group. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
# Hide the first pair. | |||
c = memory_hideMatchingItems(c) | |||
# Select the last two items of the same group. | |||
c.selectedId = 2 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 3 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
# Hide the second pair. | |||
c = memory_hideMatchingItems(c) | |||
# Detect victory. | |||
c = memory_detectVictory(c) | |||
# See if victory has been detected. | |||
if ( | |||
c.recentField == "victory" and | |||
c.victory == True | |||
): | |||
return "OK: memory_detectVictory" | |||
#} | |||
return "ERR: memory_detectVictory" | |||
#} | |||
def test_passContextByValue( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c1 = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c2 = memory_selectItem(c) | |||
# See if c1 and c2 have different recentField. | |||
if ( | |||
c1.selectedId != c2.selectedId | |||
): | |||
return "OK: passContextByValue" | |||
return "ERR: passContextByValue" | |||
#} | |||
@@ -8,5 +8,3 @@ print(memory_test_shouldDeselectMismatchedItems()) | |||
print(memory_test_shouldDeselectMismatchedItems_itemTwice()) | |||
print(memory_test_shouldDetectVictory()) | |||
print(memory_test_shouldHideMatchingItems()) | |||
#print(memory_seq_test_selectTwoItems()) |
@@ -1,50 +0,0 @@ | |||
from memory_api import * | |||
from memory_api_Context import * | |||
from memory_seq import * | |||
from memory_seq_Context import * | |||
def memory_seq_test_selectThreeItems( | |||
) -> str: | |||
seq = memory_seq_createContext() | |||
seq.api = memory_api_createContext() | |||
seq.api.playfieldSize = 2 | |||
seq.api = memory_api_generateConstPlayfield(seq.api) | |||
seq.itemsToSelect = [0, 1, 2] | |||
seq = memory_seq_selectItems(seq) | |||
# See if only one (last) item is selected now. | |||
if ( | |||
seq.api.recentField == "selectedItems" and | |||
len(seq.api.selectedItems) == 1 and | |||
seq.api.selectedItems[0] == 2 | |||
): | |||
return "OK: memory_seq_selectThreeItems" | |||
#} | |||
return "ERR: memory_seq_selectThreeItems" | |||
#} | |||
def memory_seq_test_selectTwoItems( | |||
) -> str: | |||
seq = memory_seq_createContext() | |||
seq.api = memory_api_createContext() | |||
seq.api.playfieldSize = 2 | |||
seq.api = memory_api_generateConstPlayfield(seq.api) | |||
seq.itemsToSelect = [0, 1] | |||
seq = memory_seq_selectItems(seq) | |||
# See if both items are selected now. | |||
if ( | |||
seq.api.recentField == "selectedItems" and | |||
len(seq.api.selectedItems) == 2 and | |||
seq.api.selectedItems[0] == 0 and | |||
seq.api.selectedItems[1] == 1 | |||
): | |||
return "OK: memory_seq_selectTwoItems" | |||
#} | |||
return "ERR: memory_seq_selectTwoItems" | |||
#} | |||
@@ -1,231 +0,0 @@ | |||
from entities import * | |||
from llm import * | |||
# Execute selections and verify | |||
# | |||
# Conditions: | |||
# 1. Matching items have just been hidden and all items are hidden now | |||
@llm_by_value | |||
def memory_api_detectVictory( | |||
c: MemoryContext | |||
) -> MemoryContext: | |||
# Test. | |||
def test_memory_generateConstPlayfield( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
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 test_memory_selectItem( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select the first item. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
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: selectItem" | |||
#} | |||
return "ERR: selectItem" | |||
#} | |||
def test_selectTwoItems( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select the first two items. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
# See if it's 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: selectTwoItems" | |||
#} | |||
return "ERR: selectTwoItems" | |||
#} | |||
def test_selectThreeItems( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select three items. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 2 | |||
c.recentField = "selectedId" | |||
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: selectThreeItems" | |||
#} | |||
return "ERR: selectThreeItems" | |||
#} | |||
def test_memory_hideMatchingItems( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select two items of the same group. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
# Hide matching items. | |||
c = memory_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_hideMatchingItems" | |||
#} | |||
return "ERR: memory_hideMatchingItems" | |||
#} | |||
def test_memory_deselectMismatchedItems( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select two items of different groups. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 2 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
# Detect mismatching. | |||
c = memory_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_deselectMismatchedItems" | |||
#} | |||
return "ERR: memory_deselectMismatchedItems" | |||
#} | |||
def test_memory_detectVictory( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
# Select the first two items of the same group. | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
# Hide the first pair. | |||
c = memory_hideMatchingItems(c) | |||
# Select the last two items of the same group. | |||
c.selectedId = 2 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
c.selectedId = 3 | |||
c.recentField = "selectedId" | |||
c = memory_selectItem(c) | |||
# Hide the second pair. | |||
c = memory_hideMatchingItems(c) | |||
# Detect victory. | |||
c = memory_detectVictory(c) | |||
# See if victory has been detected. | |||
if ( | |||
c.recentField == "victory" and | |||
c.victory == True | |||
): | |||
return "OK: memory_detectVictory" | |||
#} | |||
return "ERR: memory_detectVictory" | |||
#} | |||
def test_passContextByValue( | |||
) -> str: | |||
c = memory_createEmptyContext() | |||
c.playfieldSize = 2 | |||
c = memory_generateConstPlayfield(c) | |||
c.selectedId = 0 | |||
c.recentField = "selectedId" | |||
c1 = memory_selectItem(c) | |||
c.selectedId = 1 | |||
c.recentField = "selectedId" | |||
c2 = memory_selectItem(c) | |||
# See if c1 and c2 have different recentField. | |||
if ( | |||
c1.selectedId != c2.selectedId | |||
): | |||
return "OK: passContextByValue" | |||
return "ERR: passContextByValue" | |||
#} | |||