100 lines
3.7 KiB
Python
100 lines
3.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Simple test script to verify boolean type inference in variable factory.
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
|
|
# Add the api directory to the Python path
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "api"))
|
|
|
|
try:
|
|
from factories.variable_factory import build_segment, segment_to_variable
|
|
from core.variables.segments import BooleanSegment, ArrayBooleanSegment
|
|
from core.variables.variables import BooleanVariable, ArrayBooleanVariable
|
|
from core.variables.types import SegmentType
|
|
|
|
def test_boolean_inference():
|
|
print("Testing boolean type inference...")
|
|
|
|
# Test single boolean values
|
|
true_segment = build_segment(True)
|
|
false_segment = build_segment(False)
|
|
|
|
print(f"True value: {true_segment}")
|
|
print(f"Type: {type(true_segment)}")
|
|
print(f"Value type: {true_segment.value_type}")
|
|
print(f"Is BooleanSegment: {isinstance(true_segment, BooleanSegment)}")
|
|
|
|
print(f"\nFalse value: {false_segment}")
|
|
print(f"Type: {type(false_segment)}")
|
|
print(f"Value type: {false_segment.value_type}")
|
|
print(f"Is BooleanSegment: {isinstance(false_segment, BooleanSegment)}")
|
|
|
|
# Test array of booleans
|
|
bool_array_segment = build_segment([True, False, True])
|
|
print(f"\nBoolean array: {bool_array_segment}")
|
|
print(f"Type: {type(bool_array_segment)}")
|
|
print(f"Value type: {bool_array_segment.value_type}")
|
|
print(
|
|
f"Is ArrayBooleanSegment: {isinstance(bool_array_segment, ArrayBooleanSegment)}"
|
|
)
|
|
|
|
# Test empty boolean array
|
|
empty_bool_array = build_segment([])
|
|
print(f"\nEmpty array: {empty_bool_array}")
|
|
print(f"Type: {type(empty_bool_array)}")
|
|
print(f"Value type: {empty_bool_array.value_type}")
|
|
|
|
# Test segment to variable conversion
|
|
bool_var = segment_to_variable(
|
|
segment=true_segment, selector=["test", "bool_var"], name="test_boolean"
|
|
)
|
|
print(f"\nBoolean variable: {bool_var}")
|
|
print(f"Type: {type(bool_var)}")
|
|
print(f"Is BooleanVariable: {isinstance(bool_var, BooleanVariable)}")
|
|
|
|
array_bool_var = segment_to_variable(
|
|
segment=bool_array_segment,
|
|
selector=["test", "array_bool_var"],
|
|
name="test_array_boolean",
|
|
)
|
|
print(f"\nArray boolean variable: {array_bool_var}")
|
|
print(f"Type: {type(array_bool_var)}")
|
|
print(
|
|
f"Is ArrayBooleanVariable: {isinstance(array_bool_var, ArrayBooleanVariable)}"
|
|
)
|
|
|
|
# Test that bool comes before int (critical ordering)
|
|
print(f"\nTesting bool vs int precedence:")
|
|
print(f"True is instance of bool: {isinstance(True, bool)}")
|
|
print(f"True is instance of int: {isinstance(True, int)}")
|
|
print(f"False is instance of bool: {isinstance(False, bool)}")
|
|
print(f"False is instance of int: {isinstance(False, int)}")
|
|
|
|
# Verify that boolean values are correctly inferred as boolean, not int
|
|
assert true_segment.value_type == SegmentType.BOOLEAN, (
|
|
"True should be inferred as BOOLEAN"
|
|
)
|
|
assert false_segment.value_type == SegmentType.BOOLEAN, (
|
|
"False should be inferred as BOOLEAN"
|
|
)
|
|
assert bool_array_segment.value_type == SegmentType.ARRAY_BOOLEAN, (
|
|
"Boolean array should be inferred as ARRAY_BOOLEAN"
|
|
)
|
|
|
|
print("\n✅ All boolean inference tests passed!")
|
|
|
|
if __name__ == "__main__":
|
|
test_boolean_inference()
|
|
|
|
except ImportError as e:
|
|
print(f"Import error: {e}")
|
|
print("Make sure you're running this from the correct directory")
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
import traceback
|
|
|
|
traceback.print_exc()
|