diff --git a/.gitignore b/.gitignore index 1d74e21..ebfe9e6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .vscode/ +__pycache__/ diff --git a/SLS_Tests/generate_tests/__main__.py b/SLS_Tests/generate_tests/__main__.py new file mode 100644 index 0000000..d2faeb4 --- /dev/null +++ b/SLS_Tests/generate_tests/__main__.py @@ -0,0 +1,35 @@ +""" +Test case generator for integer literals in the Stack Language. +Generates comprehensive test cases for all integer types and bases. +""" + +from .integer_tests import generate_integer_literal_tests + +if __name__ == "__main__": + # import json + import yaml + + # Generate tests + tests = [] + tests.append(generate_integer_literal_tests()) + + # Print summary + print(f"Generated {len(tests)} test cases") + + # # Save as JSON + # with open("integer_literal_tests.json", "w") as f: + # json.dump(tests, f, indent=2) + # print("Saved to integer_literal_tests.json") + + # # Save as YAML + # with open("integer_literal_tests.yaml", "w") as f: + # yaml.dump(tests, f, default_flow_style=False, sort_keys=False) + # print("Saved to integer_literal_tests.yaml") + + # Save as YAML + with open("cases.yaml", "w") as f: + yaml.dump(tests, f, default_flow_style=False, sort_keys=False) + + # Print first few tests as example + # print("\nFirst 3 test cases:") + # print(yaml.dump(tests[:3], default_flow_style=False, sort_keys=False)) diff --git a/SLS_Tests/generate_tests.py b/SLS_Tests/generate_tests/integer_tests.py similarity index 87% rename from SLS_Tests/generate_tests.py rename to SLS_Tests/generate_tests/integer_tests.py index ba12ce8..896d9df 100644 --- a/SLS_Tests/generate_tests.py +++ b/SLS_Tests/generate_tests/integer_tests.py @@ -1,53 +1,5 @@ -""" -Test case generator for integer literals in the Stack Language. -Generates comprehensive test cases for all integer types and bases. -""" - from typing import List, Dict, Any, Optional -from dataclasses import dataclass, asdict - - -@dataclass -class Token: - type: str - value: Any - - -@dataclass -class Operation: - function: str - type: str - value: Any - - -@dataclass -class StackItem: - type: str - value: Any - - -@dataclass -class RuntimeError: - message: str - - -@dataclass -class TestCase: - name: str - code: str - tokens: List[Dict[str, Any]] - operations: Optional[List[Dict[str, Any]]] = None - stack_final: Optional[List[Dict[str, Any]]] = None - runtime_error: Optional[Dict[str, str]] = None - - -def to_dict(obj): - """Convert dataclass to dict, removing None values.""" - if obj is None: - return None - d = asdict(obj) if hasattr(obj, '__dataclass_fields__') else obj - return {k: v for k, v in d.items() if v is not None} - +from .utils import Token, Operation, StackItem, RuntimeError, TestCase, to_dict class IntegerTestGenerator: """Generate test cases for integer literals.""" @@ -324,32 +276,3 @@ def generate_integer_literal_tests() -> List[Dict[str, Any]]: """ generator = IntegerTestGenerator() return generator.generate_all_tests() - - -if __name__ == "__main__": - # import json - import yaml - - # Generate tests - tests = generate_integer_literal_tests() - - # Print summary - print(f"Generated {len(tests)} test cases") - - # # Save as JSON - # with open("integer_literal_tests.json", "w") as f: - # json.dump(tests, f, indent=2) - # print("Saved to integer_literal_tests.json") - - # # Save as YAML - # with open("integer_literal_tests.yaml", "w") as f: - # yaml.dump(tests, f, default_flow_style=False, sort_keys=False) - # print("Saved to integer_literal_tests.yaml") - - # Save as YAML - with open("cases.yaml", "w") as f: - yaml.dump(tests, f, default_flow_style=False, sort_keys=False) - - # Print first few tests as example - print("\nFirst 3 test cases:") - print(yaml.dump(tests[:3], default_flow_style=False, sort_keys=False)) diff --git a/SLS_Tests/generate_tests/utils.py b/SLS_Tests/generate_tests/utils.py new file mode 100644 index 0000000..126e5d6 --- /dev/null +++ b/SLS_Tests/generate_tests/utils.py @@ -0,0 +1,45 @@ + +from typing import List, Dict, Any, Optional +from dataclasses import dataclass, asdict + + +@dataclass +class Token: + type: str + value: Any + + +@dataclass +class Operation: + function: str + type: str + value: Any + + +@dataclass +class StackItem: + type: str + value: Any + + +@dataclass +class RuntimeError: + message: str + + +@dataclass +class TestCase: + name: str + code: str + tokens: List[Dict[str, Any]] + operations: Optional[List[Dict[str, Any]]] = None + stack_final: Optional[List[Dict[str, Any]]] = None + runtime_error: Optional[Dict[str, str]] = None + + +def to_dict(obj): + """Convert dataclass to dict, removing None values.""" + if obj is None: + return None + d = asdict(obj) if hasattr(obj, '__dataclass_fields__') else obj + return {k: v for k, v in d.items() if v is not None}