@@ -506,7 +506,7 @@ final class TypesystemTests: XCTestCase {
506506 }
507507 }
508508 """ )
509- XCTAssertEqual ( type. parameterType, . tuple( [ . union( [ . numberOrVector , . list( . any) ] ) , . number] ) )
509+ XCTAssertEqual ( type. parameterType, . tuple( [ . union( [ . number , . list( . any) ] ) , . number] ) )
510510 XCTAssertEqual ( type. returnType, . void)
511511 }
512512
@@ -521,9 +521,7 @@ final class TypesystemTests: XCTestCase {
521521 }
522522 }
523523 """ )
524- XCTAssertEqual ( type. parameterType, . tuple( [
525- . union( [ . number, . list( . number) , . texture] ) ,
526- ] ) )
524+ XCTAssertEqual ( type. parameterType, . tuple( [ . union( [ . numberOrVector, . texture] ) . simplified ( ) ] ) )
527525 XCTAssertEqual ( type. returnType, . void)
528526 }
529527
@@ -683,7 +681,7 @@ final class TypesystemTests: XCTestCase {
683681 }
684682 """
685683 let type = try blockType ( in: input)
686- XCTAssertEqual ( type. childTypes, . union( [ . mesh, . number , . list ( . number ) ] ) )
684+ XCTAssertEqual ( type. childTypes, . union( [ . mesh, . numberOrVector ] ) . simplified ( ) )
687685 XCTAssertEqual ( type. returnType, . mesh)
688686
689687 // No arguments
@@ -779,6 +777,31 @@ final class TypesystemTests: XCTestCase {
779777 XCTAssertEqual ( type, . any)
780778 }
781779
780+ func testUnionSubtypeSimplification( ) {
781+ XCTAssertEqual ( ValueType . union ( [ . number, . any] ) . simplified ( ) , . any)
782+ XCTAssertEqual ( ValueType . union ( [ . any, . boolean] ) . simplified ( ) , . any)
783+ XCTAssertEqual ( ValueType . union ( [ . list( . any) , . list( . number) ] ) . simplified ( ) , . list( . any) )
784+ }
785+
786+ func testNestedUnionSimplification( ) {
787+ XCTAssertEqual (
788+ ValueType . union ( [ . boolean, . union( [ . number, . string] ) ] ) . simplified ( ) ,
789+ . union( [ . boolean, . number, . string] )
790+ )
791+ XCTAssertEqual (
792+ ValueType . list ( . union( [ . number, . any] ) ) . simplified ( ) ,
793+ . list( . any)
794+ )
795+ XCTAssertEqual (
796+ ValueType . tuple ( [ . union( [ . number, . any] ) , . union( [ . any, . boolean] ) ] ) . simplified ( ) ,
797+ . tuple( [ . any, . any] )
798+ )
799+ XCTAssertEqual (
800+ ValueType . object ( [ " foo " : . union( [ . number, . any] ) , " bar " : . union( [ . any, . boolean] ) ] ) . simplified ( ) ,
801+ . object( [ " foo " : . any, " bar " : . any] )
802+ )
803+ }
804+
782805 // MARK: Type conversion
783806
784807 func testCastNumberToNumberTuple( ) {
0 commit comments