feat: support bool type variable frontend (#24437)
Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com>
This commit is contained in:
99
test_boolean_factory.py
Normal file
99
test_boolean_factory.py
Normal file
@@ -0,0 +1,99 @@
|
||||
#!/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()
|
Reference in New Issue
Block a user