diff --git a/v4/cli.py b/v4/cli.py index f9b93f2..a3bb780 100644 --- a/v4/cli.py +++ b/v4/cli.py @@ -12,41 +12,77 @@ def cli_greetUser( return c #} -# Ask user to select another item to have a pair of selected items +# Select item +# +# Conditions: +# 1. Id is digit, in bounds and not hidden @llm_by_value -def cli_shouldPromptSelection( +def cli_selectItem( c: cli_Context ) -> cli_Context: - if ( - c.recentField == "cMemory" and - c.cMemory.recentField == "selectedItems" and - len(c.cMemory.selectedItems) == 1 + if not ( + c.input.isdigit() ): - c.outputPromptSelection = "Select the second item now:" - c.recentField = "outputPromptSelection" + c.recentField = "none" + return c + #} + + int(c.input) >= 1 and + int(c.input) <= c.cMemory.playfieldSize * 2 and + int(c.input) not in c.cMemory.hiddenItems + ): + # User ids start with 1 while memory module has ids starting with 0 + # Convert cli item id to memory item id + c.cMemory.selectedId = int(c.input) - 1 + c.cMemory = memory_selectItem(c.cMemory) + c.recentField = "cMemory" return c #} c.recentField = "none" return c #} -# Select item +# Ask user to select another item to have a pair of selected items @llm_by_value -def cli_selectItem( +def cli_shouldPromptSelection( c: cli_Context ) -> cli_Context: if ( - c.input.isdigit() + c.recentField == "cMemory" and + c.cMemory.recentField == "selectedItems" and + len(c.cMemory.selectedItems) == 1 ): - id = int(c.input) - c.cMemory = memory_selectItem(c.cMemory) - c.recentField = "cMemory" + c.outputPromptSelection = "Select the second item now:" + c.recentField = "outputPromptSelection" return c #} c.recentField = "none" return c #} +# Report selection of invalid item ids +# +# Conditions: +# 1. Index out of bounds: less than minimum +# 2. Index out of bounds: greater than maximum +# 3. Item is already hidden +#@llm_by_value +#def cli_shouldReportInvalidItemSelection( +# c: cli_Context +#) -> cli_Context: +# if ( +# c.recentField == "cMemory" and +# c.cMemory.recentField == "selectedItems" and +# len(c.cMemory.selectedItems) == 1 +# ): +# c.outputPromptSelection = "Select the second item now:" +# c.recentField = "outputPromptSelection" +# return c +# #} +# c.recentField = "none" +# return c +##} + # Show help (aka commands) @llm_by_value def cli_showHelp( diff --git a/v4/cli_test.py b/v4/cli_test.py index 27c8b9a..10faa91 100644 --- a/v4/cli_test.py +++ b/v4/cli_test.py @@ -1,5 +1,7 @@ from cli import * from cli_Context import * +from memory import * +from memory_Context import * def cli_test_greetUser( ) -> str: @@ -13,6 +15,51 @@ def cli_test_greetUser( return "ERR: cli_greetUser" #} +def cli_test_selectItem( +) -> str: + c = cli_createContext() + c.cMemory = memory_createContext() + c.input = "1" + c = cli_selectItem(c) + if ( + c.recentField == "cMemory" and + c.cMemory.recentField == "selectedItems" + ): + return "OK: cli_selectItem" + #} + return "ERR: cli_selectItem" +#} + +def cli_test_shouldPromptSelection( +) -> str: + c = cli_createContext() + c.cMemory = memory_createContext() + c.input = "1" + c = cli_selectItem(c) + c = cli_shouldPromptSelection(c) + if ( + c.recentField == "outputPromptSelection" + ): + return "OK: cli_shouldPromptSelection" + #} + return "ERR: cli_shouldPromptSelection" +#} + +def cli_test_shouldReportIvalidItemSelection_outOfBoundsMin( +) -> str: + c = cli_createContext() + c.cMemory = memory_createContext() + c.input = "0" + c = cli_selectItem(c) + c = cli_shouldReportInvalidItemSelection(c) + if ( + c.recentField == "outputInvalidItemSelection" + ): + return "OK: cli_shouldReportInvalidItemSelection" + #} + return "ERR: cli_shouldReportInvalidItemSelection" +#} + def cli_test_showHelp_h( ) -> str: c = cli_createContext() diff --git a/v4/main.py b/v4/main.py index 125244e..d9bfc26 100644 --- a/v4/main.py +++ b/v4/main.py @@ -14,6 +14,9 @@ print(memory_test_shouldDetectVictory()) print(memory_test_shouldHideMatchingItems()) print(cli_test_greetUser()) +print(cli_test_selectItem()) +print(cli_test_shouldPromptSelection()) +print(cli_test_shouldReportIvalidItemSelection_outOfBoundsMin()) print(cli_test_showHelp_h()) print(cli_test_showHelp_help()) diff --git a/v4/memory.py b/v4/memory.py index 1673e06..ad3fbd1 100644 --- a/v4/memory.py +++ b/v4/memory.py @@ -6,6 +6,8 @@ from llm import * ######## # Generate constant playfield +# +# Both ids and group ids start with 0 @llm_by_value def memory_generateConstPlayfield( c: memory_Context