Broke up test case generation
This commit is contained in:
parent
a62008a3e0
commit
2c550c4662
|
|
@ -1 +1,2 @@
|
||||||
.vscode/
|
.vscode/
|
||||||
|
__pycache__/
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
|
|
@ -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))
|
|
||||||
|
|
@ -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}
|
||||||
Loading…
Reference in New Issue