Broke up test case generation

This commit is contained in:
Kyler Olsen 2025-11-12 11:09:13 -07:00
parent a62008a3e0
commit 2c550c4662
4 changed files with 82 additions and 78 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
.vscode/ .vscode/
__pycache__/

View File

@ -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))

View File

@ -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 typing import List, Dict, Any, Optional
from dataclasses import dataclass, asdict from .utils import Token, Operation, StackItem, RuntimeError, TestCase, to_dict
@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}
class IntegerTestGenerator: class IntegerTestGenerator:
"""Generate test cases for integer literals.""" """Generate test cases for integer literals."""
@ -324,32 +276,3 @@ def generate_integer_literal_tests() -> List[Dict[str, Any]]:
""" """
generator = IntegerTestGenerator() generator = IntegerTestGenerator()
return generator.generate_all_tests() 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))

View File

@ -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}