| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #!/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()
|