xref: /aosp_15_r20/external/google-fruit/tests/meta/test_vector.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/vector.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 = A1;
31*a65addddSAndroid Build Coastguard Worker    using B = B1;
32*a65addddSAndroid Build Coastguard Worker    using C = C1;
33*a65addddSAndroid Build Coastguard Worker    '''
34*a65addddSAndroid Build Coastguard Worker
35*a65addddSAndroid Build Coastguard Workerclass TestVector(parameterized.TestCase):
36*a65addddSAndroid Build Coastguard Worker    def test_IsInVector(self):
37*a65addddSAndroid Build Coastguard Worker        source = '''
38*a65addddSAndroid Build Coastguard Worker            int main() {
39*a65addddSAndroid Build Coastguard Worker                AssertNot(IsInVector(A, Vector<>));
40*a65addddSAndroid Build Coastguard Worker                AssertNot(IsInVector(A, Vector<B>));
41*a65addddSAndroid Build Coastguard Worker                Assert(IsInVector(A, Vector<A>));
42*a65addddSAndroid Build Coastguard Worker            }
43*a65addddSAndroid Build Coastguard Worker            '''
44*a65addddSAndroid Build Coastguard Worker        expect_success(
45*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
46*a65addddSAndroid Build Coastguard Worker            source,
47*a65addddSAndroid Build Coastguard Worker            locals())
48*a65addddSAndroid Build Coastguard Worker
49*a65addddSAndroid Build Coastguard Worker    def test_IsSameVector(self):
50*a65addddSAndroid Build Coastguard Worker        source = '''
51*a65addddSAndroid Build Coastguard Worker            int main() {
52*a65addddSAndroid Build Coastguard Worker                AssertNotSameType(Vector<A, B>, Vector<B, A>);
53*a65addddSAndroid Build Coastguard Worker                AssertNotSameType(Vector<A>, Vector<>);
54*a65addddSAndroid Build Coastguard Worker                AssertNotSameType(Vector<>, Vector<A>);
55*a65addddSAndroid Build Coastguard Worker            }
56*a65addddSAndroid Build Coastguard Worker            '''
57*a65addddSAndroid Build Coastguard Worker        expect_success(
58*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
59*a65addddSAndroid Build Coastguard Worker            source,
60*a65addddSAndroid Build Coastguard Worker            locals())
61*a65addddSAndroid Build Coastguard Worker
62*a65addddSAndroid Build Coastguard Worker    def test_VectorSize(self):
63*a65addddSAndroid Build Coastguard Worker        source = '''
64*a65addddSAndroid Build Coastguard Worker            int main() {
65*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<VectorSize(Vector<>)>, Int<0>);
66*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<VectorSize(Vector<A>)>, Int<1>);
67*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<VectorSize(Vector<A, B>)>, Int<2>);
68*a65addddSAndroid Build Coastguard Worker            }
69*a65addddSAndroid Build Coastguard Worker            '''
70*a65addddSAndroid Build Coastguard Worker        expect_success(
71*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
72*a65addddSAndroid Build Coastguard Worker            source,
73*a65addddSAndroid Build Coastguard Worker            locals())
74*a65addddSAndroid Build Coastguard Worker
75*a65addddSAndroid Build Coastguard Worker    def test_ConcatVectors(self):
76*a65addddSAndroid Build Coastguard Worker        source = '''
77*a65addddSAndroid Build Coastguard Worker            int main() {
78*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<ConcatVectors(Vector<>, Vector<>)>, Vector<>);
79*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<ConcatVectors(Vector<>, Vector<A, B>)>, Vector<A, B>);
80*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<ConcatVectors(Vector<A, B>, Vector<>)>, Vector<A, B>);
81*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<ConcatVectors(Vector<A>, Vector<A, B>)>, Vector<A, A, B>);
82*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<ConcatVectors(Vector<A, B>, Vector<A, C>)>, Vector<A, B, A, C>);
83*a65addddSAndroid Build Coastguard Worker            }
84*a65addddSAndroid Build Coastguard Worker            '''
85*a65addddSAndroid Build Coastguard Worker        expect_success(
86*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
87*a65addddSAndroid Build Coastguard Worker            source,
88*a65addddSAndroid Build Coastguard Worker            locals())
89*a65addddSAndroid Build Coastguard Worker
90*a65addddSAndroid Build Coastguard Worker    def test_VectorEndsWith(self):
91*a65addddSAndroid Build Coastguard Worker        source = '''
92*a65addddSAndroid Build Coastguard Worker            int main() {
93*a65addddSAndroid Build Coastguard Worker                Assert(VectorEndsWith(Vector<A, B>, B));
94*a65addddSAndroid Build Coastguard Worker                AssertNot(VectorEndsWith(Vector<A, B>, A));
95*a65addddSAndroid Build Coastguard Worker                AssertNot(VectorEndsWith(Vector<>, A));
96*a65addddSAndroid Build Coastguard Worker            }
97*a65addddSAndroid Build Coastguard Worker            '''
98*a65addddSAndroid Build Coastguard Worker        expect_success(
99*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
100*a65addddSAndroid Build Coastguard Worker            source,
101*a65addddSAndroid Build Coastguard Worker            locals())
102*a65addddSAndroid Build Coastguard Worker
103*a65addddSAndroid Build Coastguard Worker    def test_VectorRemoveFirstN(self):
104*a65addddSAndroid Build Coastguard Worker        source = '''
105*a65addddSAndroid Build Coastguard Worker            int main() {
106*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<VectorRemoveFirstN(Vector<>, Int<0>)>, Vector<>);
107*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<VectorRemoveFirstN(Vector<A>, Int<0>)>, Vector<A>);
108*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<VectorRemoveFirstN(Vector<A>, Int<1>)>, Vector<>);
109*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<VectorRemoveFirstN(Vector<A, B, C>, Int<0>)>, Vector<A, B, C>);
110*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<VectorRemoveFirstN(Vector<A, B, C>, Int<1>)>, Vector<B, C>);
111*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<VectorRemoveFirstN(Vector<A, B, C>, Int<2>)>, Vector<C>);
112*a65addddSAndroid Build Coastguard Worker                AssertSameType(Id<VectorRemoveFirstN(Vector<A, B, C>, Int<3>)>, Vector<>);
113*a65addddSAndroid Build Coastguard Worker            }
114*a65addddSAndroid Build Coastguard Worker            '''
115*a65addddSAndroid Build Coastguard Worker        expect_success(
116*a65addddSAndroid Build Coastguard Worker            COMMON_DEFINITIONS,
117*a65addddSAndroid Build Coastguard Worker            source,
118*a65addddSAndroid Build Coastguard Worker            locals())
119*a65addddSAndroid Build Coastguard Worker
120*a65addddSAndroid Build Coastguard Workerif __name__ == '__main__':
121*a65addddSAndroid Build Coastguard Worker    absltest.main()
122