@@ -108,4 +108,109 @@ internal struct LiteralValueTests {
108108 #expect( literal2. contains ( " 2: \" b \" " ) )
109109 #expect( literal2. contains ( " 3: \" c \" " ) )
110110 }
111+
112+ // MARK: - TupleLiteral Tests
113+
114+ @Test internal func testTupleLiteralTypeName( ) {
115+ let tuple1 = TupleLiteral ( [ . int( 1 ) , . int( 2 ) ] )
116+ #expect( tuple1. typeName == " (Int, Int) " )
117+
118+ let tuple2 = TupleLiteral ( [ . string( " hello " ) , . int( 42 ) , . boolean( true ) ] )
119+ #expect( tuple2. typeName == " (String, Int, Bool) " )
120+
121+ let tuple3 = TupleLiteral ( [ . int( 1 ) , nil , . string( " test " ) ] )
122+ #expect( tuple3. typeName == " (Int, Any, String) " )
123+
124+ let tuple4 = TupleLiteral ( [ nil , nil ] )
125+ #expect( tuple4. typeName == " (Any, Any) " )
126+ }
127+
128+ @Test internal func testTupleLiteralString( ) {
129+ let tuple1 = TupleLiteral ( [ . int( 1 ) , . int( 2 ) ] )
130+ #expect( tuple1. literalString == " (1, 2) " )
131+
132+ let tuple2 = TupleLiteral ( [ . string( " hello " ) , . int( 42 ) , . boolean( true ) ] )
133+ #expect( tuple2. literalString == " ( \" hello \" , 42, true) " )
134+
135+ let tuple3 = TupleLiteral ( [ . int( 1 ) , nil , . string( " test " ) ] )
136+ #expect( tuple3. literalString == " (1, _, \" test \" ) " )
137+
138+ let tuple4 = TupleLiteral ( [ nil , nil ] )
139+ #expect( tuple4. literalString == " (_, _) " )
140+
141+ let tuple5 = TupleLiteral ( [ . float( 3.14 ) , . nil ] )
142+ #expect( tuple5. literalString == " (3.14, nil) " )
143+ }
144+
145+ @Test internal func testTupleLiteralWithNestedTuples( ) {
146+ let nestedTuple = TupleLiteral ( [ . int( 1 ) , . tuple( [ . string( " nested " ) , . int( 2 ) ] ) ] )
147+ #expect( nestedTuple. typeName == " (Int, Any) " )
148+ #expect( nestedTuple. literalString == " (1, ( \" nested \" , 2)) " )
149+ }
150+
151+ @Test internal func testTupleLiteralWithRef( ) {
152+ let tuple = TupleLiteral ( [ . ref( " variable " ) , . int( 42 ) ] )
153+ #expect( tuple. typeName == " (Any, Int) " )
154+ #expect( tuple. literalString == " (variable, 42) " )
155+ }
156+
157+ @Test internal func testEmptyTupleLiteral( ) {
158+ let tuple = TupleLiteral ( [ ] )
159+ #expect( tuple. typeName == " () " )
160+ #expect( tuple. literalString == " () " )
161+ }
162+
163+ // MARK: - TupleLiteral Code Generation Tests
164+
165+ @Test internal func testVariableWithTupleLiteral( ) {
166+ let tuple = TupleLiteral ( [ . int( 1 ) , . int( 2 ) ] )
167+ let variable = Variable ( . let, name: " point " , equals: tuple)
168+
169+ let generated = variable. syntax. description
170+ #expect( generated. contains ( " let point = (1, 2) " ) )
171+ #expect( generated. contains ( " point " ) )
172+ }
173+
174+ @Test internal func testVariableWithTupleLiteralWithExplicitType( ) {
175+ let tuple = TupleLiteral ( [ . int( 1 ) , . int( 2 ) ] )
176+ let variable = Variable ( . let, name: " point " , equals: tuple) . withExplicitType ( )
177+
178+ let generated = variable. syntax. description
179+ #expect( generated. contains ( " let point : (Int, Int) = (1, 2) " ) )
180+ #expect( generated. contains ( " point " ) )
181+ }
182+
183+ @Test internal func testVariableWithComplexTupleLiteral( ) {
184+ let tuple = TupleLiteral ( [ . string( " hello " ) , . int( 42 ) , . boolean( true ) ] )
185+ let variable = Variable ( . let, name: " data " , equals: tuple) . withExplicitType ( )
186+
187+ let generated = variable. syntax. description
188+ #expect( generated. contains ( " let data : (String, Int, Bool) = ( \" hello \" , 42, true) " ) )
189+ #expect( generated. contains ( " data " ) )
190+ }
191+
192+ @Test internal func testVariableWithTupleLiteralWithWildcards( ) {
193+ let tuple = TupleLiteral ( [ . int( 1 ) , nil , . string( " test " ) ] )
194+ let variable = Variable ( . let, name: " partial " , equals: tuple) . withExplicitType ( )
195+
196+ let generated = variable. syntax. description
197+ #expect( generated. contains ( " let partial : (Int, Any, String) = (1, _, \" test \" ) " ) )
198+ #expect( generated. contains ( " partial " ) )
199+ }
200+
201+ @Test internal func testLiteralAsTupleLiteralConversion( ) {
202+ let literal = Literal . tuple ( [ . int( 1 ) , . int( 2 ) ] )
203+ let tupleLiteral = literal. asTupleLiteral
204+
205+ #expect( tupleLiteral != nil )
206+ #expect( tupleLiteral? . typeName == " (Int, Int) " )
207+ #expect( tupleLiteral? . literalString == " (1, 2) " )
208+ }
209+
210+ @Test internal func testNonTupleLiteralAsTupleLiteralConversion( ) {
211+ let literal = Literal . int ( 42 )
212+ let tupleLiteral = literal. asTupleLiteral
213+
214+ #expect( tupleLiteral == nil )
215+ }
111216}
0 commit comments