diff --git a/tests/unit/agents/utils/test_memory.py b/tests/unit/agents/utils/test_memory.py new file mode 100644 index 00000000..f3fdbe59 --- /dev/null +++ b/tests/unit/agents/utils/test_memory.py @@ -0,0 +1,61 @@ +import pytest +from tradingagents.agents.utils.memory import FinancialSituationMemory + +@pytest.fixture +def memory_instance(): + """Fixture to provide a FinancialSituationMemory instance.""" + return FinancialSituationMemory(name="test_memory") + +@pytest.mark.parametrize( + "input_text, expected_tokens", + [ + # Simple cases + ("hello world", ["hello", "world"]), + ("SINGLE", ["single"]), + ("Mixed Case String", ["mixed", "case", "string"]), + + # Numbers + ("123 456", ["123", "456"]), + ("year 2024", ["year", "2024"]), + + # Punctuation + ("hello, world!", ["hello", "world"]), + ("end. start", ["end", "start"]), + ("questions?", ["questions"]), + ("multiple... dots", ["multiple", "dots"]), + + # Edge cases with quotes, apostrophes, and hyphens (based on current implementation) + ("don't", ["don", "t"]), + ("it's", ["it", "s"]), + ("a-b", ["a", "b"]), + ("long-term", ["long", "term"]), + ('"quote"', ["quote"]), + + # Underscores (word boundary \b and \w behavior) + ("_leading", ["_leading"]), + ("trailing_", ["trailing_"]), + ("in_between", ["in_between"]), + + # Symbols + ("100% growth", ["100", "growth"]), + ("price $50", ["price", "50"]), + ("a & b", ["a", "b"]), + ("tech @ sector", ["tech", "sector"]), + + # Empty and whitespace + ("", []), + (" ", []), + ("\t\n", []), + (" spaces around ", ["spaces", "around"]), + + # Complex sentence + ( + "High inflation (CPI at 8.5%) affects the $SPY heavily!", + ["high", "inflation", "cpi", "at", "8", "5", "affects", "the", "spy", "heavily"] + ), + ] +) +def test_tokenize(memory_instance, input_text, expected_tokens): + """Test the _tokenize method handles various strings correctly.""" + tokens = memory_instance._tokenize(input_text) + assert tokens == expected_tokens