xref: /aosp_15_r20/external/google-fruit/tests/meta/test_set.py (revision a65addddcf69f38db5b288d787b6b7571a57bb8f)
1*a65addddSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*a65addddSAndroid Build Coastguard Worker#  Copyright 2016 Google Inc. All Rights Reserved.
3*a65addddSAndroid Build Coastguard Worker#
4*a65addddSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*a65addddSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*a65addddSAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*a65addddSAndroid Build Coastguard Worker#
8*a65addddSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
9*a65addddSAndroid Build Coastguard Worker#
10*a65addddSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*a65addddSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS-IS" BASIS,
12*a65addddSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*a65addddSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*a65addddSAndroid Build Coastguard Worker# limitations under the License.
15*a65addddSAndroid Build Coastguard Worker
16*a65addddSAndroid Build Coastguard Workerfrom absl.testing import parameterized
17*a65addddSAndroid Build Coastguard Workerfrom fruit_test_common import *
18*a65addddSAndroid Build Coastguard Worker
19*a65addddSAndroid Build Coastguard WorkerCOMMON_DEFINITIONS = '''
20*a65addddSAndroid Build Coastguard Worker    #define IN_FRUIT_CPP_FILE 1
21*a65addddSAndroid Build Coastguard Worker
22*a65addddSAndroid Build Coastguard Worker    #include "meta/common.h"
23*a65addddSAndroid Build Coastguard Worker    #include <fruit/impl/meta/set.h>
24*a65addddSAndroid Build Coastguard Worker    #include <fruit/impl/meta/metaprogramming.h>
25*a65addddSAndroid Build Coastguard Worker
26*a65addddSAndroid Build Coastguard Worker    struct A1 {};
27*a65addddSAndroid Build Coastguard Worker    struct B1 {};
28*a65addddSAndroid Build Coastguard Worker    struct C1 {};
29*a65addddSAndroid Build Coastguard Worker
30*a65addddSAndroid Build Coastguard Worker    using A = Type<A1>;
31*a65addddSAndroid Build Coastguard Worker    using B = Type<B1>;
32*a65addddSAndroid Build Coastguard Worker    using C = Type<C1>;
33*a65addddSAndroid Build Coastguard Worker
34*a65addddSAndroid Build Coastguard Worker    struct Square {
35*a65addddSAndroid Build Coastguard Worker        template <typename N>
36*a65addddSAndroid Build Coastguard Worker        struct apply {
37*a65addddSAndroid Build Coastguard Worker            using type = Int<N::value * N::value>;
38*a65addddSAndroid Build Coastguard Worker        };
39*a65addddSAndroid Build Coastguard Worker    };
40*a65addddSAndroid Build Coastguard Worker    '''
41*a65addddSAndroid Build Coastguard Worker
42*a65addddSAndroid Build Coastguard Workerclass TestSet(parameterized.TestCase):
43*a65addddSAndroid Build Coastguard Worker    def test_EmptySet(self):
44*a65addddSAndroid Build Coastguard Worker        source = '''
45*a65addddSAndroid Build Coastguard Worker            int main() {
46*a65addddSAndroid Build Coastguard Worker                AssertNot(IsInSet(A, EmptySet));
47*a65addddSAndroid Build Coastguard Worker            }
48*a65addddSAndroid Build Coastguard Worker            '''
49*a65addddSAndroid Build Coastguard Worker        expect_success(
50*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
51*a65addddSAndroid Build Coastguard Worker            source,
52*a65addddSAndroid Build Coastguard Worker            locals())
53*a65addddSAndroid Build Coastguard Worker
54*a65addddSAndroid Build Coastguard Worker    def test_ToSet1(self):
55*a65addddSAndroid Build Coastguard Worker        source = '''
56*a65addddSAndroid Build Coastguard Worker            int main() {
57*a65addddSAndroid Build Coastguard Worker                Assert(IsInSet(A, ToSet1<A>));
58*a65addddSAndroid Build Coastguard Worker                AssertNot(IsInSet(A, ToSet1<B>));
59*a65addddSAndroid Build Coastguard Worker            }
60*a65addddSAndroid Build Coastguard Worker            '''
61*a65addddSAndroid Build Coastguard Worker        expect_success(
62*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
63*a65addddSAndroid Build Coastguard Worker            source,
64*a65addddSAndroid Build Coastguard Worker            locals())
65*a65addddSAndroid Build Coastguard Worker
66*a65addddSAndroid Build Coastguard Worker    def test_ToSet2(self):
67*a65addddSAndroid Build Coastguard Worker        source = '''
68*a65addddSAndroid Build Coastguard Worker            int main() {
69*a65addddSAndroid Build Coastguard Worker                Assert(IsInSet(A, ToSet2<A, B>));
70*a65addddSAndroid Build Coastguard Worker                Assert(IsInSet(B, ToSet2<A, B>));
71*a65addddSAndroid Build Coastguard Worker                AssertNot(IsInSet(C, ToSet2<A, B>));
72*a65addddSAndroid Build Coastguard Worker            }
73*a65addddSAndroid Build Coastguard Worker            '''
74*a65addddSAndroid Build Coastguard Worker        expect_success(
75*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
76*a65addddSAndroid Build Coastguard Worker            source,
77*a65addddSAndroid Build Coastguard Worker            locals())
78*a65addddSAndroid Build Coastguard Worker
79*a65addddSAndroid Build Coastguard Worker    def test_IsSameSet(self):
80*a65addddSAndroid Build Coastguard Worker        source = '''
81*a65addddSAndroid Build Coastguard Worker            int main() {
82*a65addddSAndroid Build Coastguard Worker                AssertSameSet(EmptySet, EmptySet);
83*a65addddSAndroid Build Coastguard Worker                AssertSameSet(ToSet<A, B>, ToSet<B, A>);
84*a65addddSAndroid Build Coastguard Worker            }
85*a65addddSAndroid Build Coastguard Worker            '''
86*a65addddSAndroid Build Coastguard Worker        expect_success(
87*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
88*a65addddSAndroid Build Coastguard Worker            source,
89*a65addddSAndroid Build Coastguard Worker            locals())
90*a65addddSAndroid Build Coastguard Worker
91*a65addddSAndroid Build Coastguard Worker    def test_FoldSet(self):
92*a65addddSAndroid Build Coastguard Worker        source = '''
93*a65addddSAndroid Build Coastguard Worker            int main() {
94*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<FoldSet(ToSet<>, Sum, Int<3>)>, Int<3>);
95*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<FoldSet(ToSet<Int<2>>, Sum, Int<3>)>, Int<5>);
96*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<FoldSet(ToSet<Int<3>, Int<2>, Int<5>, Int<9>, Int<13>>, Sum, Int<7>)>, Int<39>);
97*a65addddSAndroid Build Coastguard Worker            }
98*a65addddSAndroid Build Coastguard Worker            '''
99*a65addddSAndroid Build Coastguard Worker        expect_success(
100*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
101*a65addddSAndroid Build Coastguard Worker            source,
102*a65addddSAndroid Build Coastguard Worker            locals())
103*a65addddSAndroid Build Coastguard Worker
104*a65addddSAndroid Build Coastguard Worker    def test_FoldSetWithCombine(self):
105*a65addddSAndroid Build Coastguard Worker        source = '''
106*a65addddSAndroid Build Coastguard Worker            int main() {
107*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<FoldSetWithCombine(ToSet<>, Square, Sum, Int<0>)>, Int<0>);
108*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<FoldSetWithCombine(ToSet<Int<2>>, Square, Sum, Int<0>)>, Int<4>);
109*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<FoldSetWithCombine(ToSet<Int<3>, Int<2>, Int<5>, Int<9>, Int<13>>, Square, Sum, Int<0>)>, Int<288>);
110*a65addddSAndroid Build Coastguard Worker            }
111*a65addddSAndroid Build Coastguard Worker            '''
112*a65addddSAndroid Build Coastguard Worker        expect_success(
113*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
114*a65addddSAndroid Build Coastguard Worker            source,
115*a65addddSAndroid Build Coastguard Worker            locals())
116*a65addddSAndroid Build Coastguard Worker
117*a65addddSAndroid Build Coastguard Worker    def test_AddToSet(self):
118*a65addddSAndroid Build Coastguard Worker        source = '''
119*a65addddSAndroid Build Coastguard Worker            int main() {
120*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<AddToSet(EmptySet, A)>, ToSet<A>);
121*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<AddToSet(ToSet<A, B>, A)>, ToSet<A, B>);
122*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<AddToSet(ToSet<C, B>, A)>, ToSet<A, C, B>);
123*a65addddSAndroid Build Coastguard Worker            }
124*a65addddSAndroid Build Coastguard Worker            '''
125*a65addddSAndroid Build Coastguard Worker        expect_success(
126*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
127*a65addddSAndroid Build Coastguard Worker            source,
128*a65addddSAndroid Build Coastguard Worker            locals())
129*a65addddSAndroid Build Coastguard Worker
130*a65addddSAndroid Build Coastguard Worker    def test_TransformSet(self):
131*a65addddSAndroid Build Coastguard Worker        source = '''
132*a65addddSAndroid Build Coastguard Worker            int main() {
133*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<TransformSet(ToSet<>, Square)>, ToSet<>);
134*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<TransformSet(ToSet<Int<2>>, Square)>, ToSet<Int<4>>);
135*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<TransformSet(ToSet<Int<3>, Int<2>, Int<5>, Int<9>, Int<13>>, Square)>, ToSet<Int<9>, Int<4>, Int<25>, Int<81>, Int<169>>);
136*a65addddSAndroid Build Coastguard Worker            }
137*a65addddSAndroid Build Coastguard Worker            '''
138*a65addddSAndroid Build Coastguard Worker        expect_success(
139*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
140*a65addddSAndroid Build Coastguard Worker            source,
141*a65addddSAndroid Build Coastguard Worker            locals())
142*a65addddSAndroid Build Coastguard Worker
143*a65addddSAndroid Build Coastguard Worker    def test_SetSize(self):
144*a65addddSAndroid Build Coastguard Worker        source = '''
145*a65addddSAndroid Build Coastguard Worker            int main() {
146*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<SetSize(ToSet<>)>, Int<0>);
147*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<SetSize(ToSet<Int<2>>)>, Int<1>);
148*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<SetSize(ToSet<Int<3>, Int<2>, Int<5>, Int<9>, Int<13>>)>, Int<5>);
149*a65addddSAndroid Build Coastguard Worker            }
150*a65addddSAndroid Build Coastguard Worker            '''
151*a65addddSAndroid Build Coastguard Worker        expect_success(
152*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
153*a65addddSAndroid Build Coastguard Worker            source,
154*a65addddSAndroid Build Coastguard Worker            locals())
155*a65addddSAndroid Build Coastguard Worker
156*a65addddSAndroid Build Coastguard Worker    def test_IsEmptySet(self):
157*a65addddSAndroid Build Coastguard Worker        source = '''
158*a65addddSAndroid Build Coastguard Worker            int main() {
159*a65addddSAndroid Build Coastguard Worker                Assert(IsEmptySet(ToSet<>));
160*a65addddSAndroid Build Coastguard Worker                AssertNot(IsEmptySet(ToSet<Int<2>>));
161*a65addddSAndroid Build Coastguard Worker                AssertNot(IsEmptySet(ToSet<Int<3>, Int<2>, Int<5>, Int<9>, Int<13>>));
162*a65addddSAndroid Build Coastguard Worker            }
163*a65addddSAndroid Build Coastguard Worker            '''
164*a65addddSAndroid Build Coastguard Worker        expect_success(
165*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
166*a65addddSAndroid Build Coastguard Worker            source,
167*a65addddSAndroid Build Coastguard Worker            locals())
168*a65addddSAndroid Build Coastguard Worker
169*a65addddSAndroid Build Coastguard Worker    def test_SetDifference(self):
170*a65addddSAndroid Build Coastguard Worker        source = '''
171*a65addddSAndroid Build Coastguard Worker            int main() {
172*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<>, ToSet<>)>, ToSet<>);
173*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<>, ToSet<A>)>, ToSet<>);
174*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<>, ToSet<A, B>)>, ToSet<>);
175*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<>, ToSet<A, B, C>)>, ToSet<>);
176*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<A>, ToSet<>)>, ToSet<A>);
177*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<A>, ToSet<A>)>, ToSet<>);
178*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<A>, ToSet<A, B>)>, ToSet<>);
179*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<A>, ToSet<A, B, C>)>, ToSet<>);
180*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<B>, ToSet<>)>, ToSet<B>);
181*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<B>, ToSet<A>)>, ToSet<B>);
182*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<B>, ToSet<A, B>)>, ToSet<>);
183*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<B>, ToSet<A, B, C>)>, ToSet<>);
184*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<B, C>, ToSet<>)>, ToSet<B, C>);
185*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<B, C>, ToSet<A>)>, ToSet<B, C>);
186*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<B, C>, ToSet<A, B>)>, ToSet<C>);
187*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<B, C>, ToSet<A, B, C>)>, ToSet<>);
188*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<A, B>, ToSet<A, B>)>, ToSet<>);
189*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<A>, ToSet<A, B>)>, EmptySet);
190*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<A, B, C>, ToSet<A>)>, ToSet<B, C>);
191*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<A, B, C>, ToSet<B>)>, ToSet<A, C>);
192*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetDifference(ToSet<A, B, C>, ToSet<C>)>, ToSet<A, B>);
193*a65addddSAndroid Build Coastguard Worker            }
194*a65addddSAndroid Build Coastguard Worker            '''
195*a65addddSAndroid Build Coastguard Worker        expect_success(
196*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
197*a65addddSAndroid Build Coastguard Worker            source,
198*a65addddSAndroid Build Coastguard Worker            locals())
199*a65addddSAndroid Build Coastguard Worker
200*a65addddSAndroid Build Coastguard Worker    def test_SetIntersection(self):
201*a65addddSAndroid Build Coastguard Worker        source = '''
202*a65addddSAndroid Build Coastguard Worker            int main() {
203*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetIntersection(ToSet<A, B>, ToSet<A, B>)>, ToSet<A, B>);
204*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetIntersection(ToSet<A>, ToSet<A, B>)>, ToSet<A>);
205*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetIntersection(ToSet<A, B>, ToSet<A>)>, ToSet<A>);
206*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetIntersection(ToSet<A>, ToSet<B>)>, ToSet<>);
207*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetIntersection(ToSet<>, ToSet<A, B>)>, ToSet<>);
208*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetIntersection(ToSet<C>, ToSet<A, B>)>, ToSet<>);
209*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetIntersection(ToSet<A, B>, ToSet<>)>, ToSet<>);
210*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetIntersection(ToSet<A, B>, ToSet<C>)>, ToSet<>);
211*a65addddSAndroid Build Coastguard Worker            }
212*a65addddSAndroid Build Coastguard Worker            '''
213*a65addddSAndroid Build Coastguard Worker        expect_success(
214*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
215*a65addddSAndroid Build Coastguard Worker            source,
216*a65addddSAndroid Build Coastguard Worker            locals())
217*a65addddSAndroid Build Coastguard Worker
218*a65addddSAndroid Build Coastguard Worker    def test_IsContained(self):
219*a65addddSAndroid Build Coastguard Worker        source = '''
220*a65addddSAndroid Build Coastguard Worker            int main() {
221*a65addddSAndroid Build Coastguard Worker                Assert(IsContained(ToSet<>, ToSet<>));
222*a65addddSAndroid Build Coastguard Worker                Assert(IsContained(ToSet<>, ToSet<A>));
223*a65addddSAndroid Build Coastguard Worker                Assert(IsContained(ToSet<A, B>, ToSet<A, B>));
224*a65addddSAndroid Build Coastguard Worker                Assert(IsContained(ToSet<A, B>, ToSet<B, A>));
225*a65addddSAndroid Build Coastguard Worker                Assert(IsContained(ToSet<A>, ToSet<A, B, C>));
226*a65addddSAndroid Build Coastguard Worker                Assert(IsContained(ToSet<B>, ToSet<A, B, C>));
227*a65addddSAndroid Build Coastguard Worker                Assert(IsContained(ToSet<C>, ToSet<A, B, C>));
228*a65addddSAndroid Build Coastguard Worker                AssertNot(IsContained(ToSet<A, B, C>, ToSet<A, B>));
229*a65addddSAndroid Build Coastguard Worker                AssertNot(IsContained(ToSet<A, B, C>, ToSet<A, C>));
230*a65addddSAndroid Build Coastguard Worker                AssertNot(IsContained(ToSet<A, B, C>, ToSet<B, C>));
231*a65addddSAndroid Build Coastguard Worker            }
232*a65addddSAndroid Build Coastguard Worker            '''
233*a65addddSAndroid Build Coastguard Worker        expect_success(
234*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
235*a65addddSAndroid Build Coastguard Worker            source,
236*a65addddSAndroid Build Coastguard Worker            locals())
237*a65addddSAndroid Build Coastguard Worker
238*a65addddSAndroid Build Coastguard Worker    def test_IsDisjoint(self):
239*a65addddSAndroid Build Coastguard Worker        source = '''
240*a65addddSAndroid Build Coastguard Worker            int main() {
241*a65addddSAndroid Build Coastguard Worker                AssertNot(IsDisjoint(ToSet<A, B>, ToSet<A, B>));
242*a65addddSAndroid Build Coastguard Worker                AssertNot(IsDisjoint(ToSet<A>, ToSet<A, B>));
243*a65addddSAndroid Build Coastguard Worker                AssertNot(IsDisjoint(ToSet<A, B>, ToSet<A>));
244*a65addddSAndroid Build Coastguard Worker                Assert(IsDisjoint(ToSet<A>, ToSet<B>));
245*a65addddSAndroid Build Coastguard Worker                Assert(IsDisjoint(ToSet<>, ToSet<A, B>));
246*a65addddSAndroid Build Coastguard Worker                Assert(IsDisjoint(ToSet<C>, ToSet<A, B>));
247*a65addddSAndroid Build Coastguard Worker                Assert(IsDisjoint(ToSet<A, B>, ToSet<>));
248*a65addddSAndroid Build Coastguard Worker                Assert(IsDisjoint(ToSet<A, B>, ToSet<C>));
249*a65addddSAndroid Build Coastguard Worker            }
250*a65addddSAndroid Build Coastguard Worker            '''
251*a65addddSAndroid Build Coastguard Worker        expect_success(
252*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
253*a65addddSAndroid Build Coastguard Worker            source,
254*a65addddSAndroid Build Coastguard Worker            locals())
255*a65addddSAndroid Build Coastguard Worker
256*a65addddSAndroid Build Coastguard Worker    def test_SetUnion(self):
257*a65addddSAndroid Build Coastguard Worker        source = '''
258*a65addddSAndroid Build Coastguard Worker            int main() {
259*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetUnion(ToSet<A, B>, ToSet<A, B>)>, ToSet<A, B>);
260*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetUnion(ToSet<A>, ToSet<A, B>)>, ToSet<A, B>);
261*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetUnion(ToSet<A, B>, ToSet<A>)>, ToSet<A, B>);
262*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetUnion(ToSet<A>, ToSet<B>)>, ToSet<A, B>);
263*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetUnion(ToSet<>, ToSet<A, B>)>, ToSet<A, B>);
264*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetUnion(ToSet<C>, ToSet<A, B>)>, ToSet<A, B, C>);
265*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetUnion(ToSet<A, B>, ToSet<>)>, ToSet<A, B>);
266*a65addddSAndroid Build Coastguard Worker                AssertSameSet(Id<SetUnion(ToSet<A, B>, ToSet<C>)>, ToSet<A, B, C>);
267*a65addddSAndroid Build Coastguard Worker            }
268*a65addddSAndroid Build Coastguard Worker            '''
269*a65addddSAndroid Build Coastguard Worker        expect_success(
270*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
271*a65addddSAndroid Build Coastguard Worker            source,
272*a65addddSAndroid Build Coastguard Worker            locals())
273*a65addddSAndroid Build Coastguard Worker
274*a65addddSAndroid Build Coastguard Workerif __name__ == '__main__':
275*a65addddSAndroid Build Coastguard Worker    absltest.main()
276