@@ -173,4 +173,41 @@ StatsModels.apply_schema(mt::MultiTerm, sch::StatsModels.Schema, Mod::Type) =
173
173
174
174
end
175
175
176
+ @testset " Tuple terms" begin
177
+ using StatsModels: TermOrTerms, TupleTerm, Term
178
+ a, b, c = Term .((:a , :b , :c ))
179
+
180
+ # TermOrTerms - one or more AbstractTerms (if more, a tuple)
181
+ # empty tuples are never terms
182
+ @test ! (() isa TermOrTerms)
183
+ @test (a, ) isa TermOrTerms
184
+ @test (a, b) isa TermOrTerms
185
+ @test (a, b, a& b) isa TermOrTerms
186
+ @test ! (((), a) isa TermOrTerms)
187
+ # can't contain further tuples
188
+ @test ! ((a, (a,), b) isa TermOrTerms)
189
+
190
+ # a tuple of AbstractTerms OR Tuples of one or more terms
191
+ # empty tuples are never terms
192
+ @test ! (() isa TupleTerm)
193
+ @test (a, ) isa TupleTerm
194
+ @test (a, b) isa TupleTerm
195
+ @test (a, b, a& b) isa TupleTerm
196
+ @test ! (((), a) isa TupleTerm)
197
+ @test (((a,), a) isa TupleTerm)
198
+
199
+ # no methods for operators on term and empty tuple (=no type piracy)
200
+ @test_throws MethodError a + ()
201
+ @test_throws MethodError () + a
202
+ @test_throws MethodError a & ()
203
+ @test_throws MethodError () & a
204
+ @test_throws MethodError a ~ ()
205
+ @test_throws MethodError () ~ a
206
+
207
+ # show methods of empty tuples preserved
208
+ @test " $(()) " == " ()"
209
+ @test " $((a,b)) " == " a + b"
210
+ @test " $((a, ())) " == " (a, ())"
211
+ end
212
+
176
213
end
0 commit comments