1fd4e5da5Sopenharmony_ci# Copyright (c) 2019 Google LLC
2fd4e5da5Sopenharmony_ci#
3fd4e5da5Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
4fd4e5da5Sopenharmony_ci# you may not use this file except in compliance with the License.
5fd4e5da5Sopenharmony_ci# You may obtain a copy of the License at
6fd4e5da5Sopenharmony_ci#
7fd4e5da5Sopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
8fd4e5da5Sopenharmony_ci#
9fd4e5da5Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
10fd4e5da5Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
11fd4e5da5Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12fd4e5da5Sopenharmony_ci# See the License for the specific language governing permissions and
13fd4e5da5Sopenharmony_ci# limitations under the License.
14fd4e5da5Sopenharmony_ci"""Tests for the spirv test framework module."""
15fd4e5da5Sopenharmony_ci
16fd4e5da5Sopenharmony_cifrom spirv_test_framework import get_all_test_methods, get_all_superclasses
17fd4e5da5Sopenharmony_ciimport unittest
18fd4e5da5Sopenharmony_ci
19fd4e5da5Sopenharmony_ci# Classes to be used in testing get_all_{superclasses|test_methods}()
20fd4e5da5Sopenharmony_ci
21fd4e5da5Sopenharmony_ci
22fd4e5da5Sopenharmony_ciclass Root:
23fd4e5da5Sopenharmony_ci
24fd4e5da5Sopenharmony_ci    def check_root(self):
25fd4e5da5Sopenharmony_ci        pass
26fd4e5da5Sopenharmony_ci
27fd4e5da5Sopenharmony_ci
28fd4e5da5Sopenharmony_ciclass A(Root):
29fd4e5da5Sopenharmony_ci
30fd4e5da5Sopenharmony_ci    def check_a(self):
31fd4e5da5Sopenharmony_ci        pass
32fd4e5da5Sopenharmony_ci
33fd4e5da5Sopenharmony_ci
34fd4e5da5Sopenharmony_ciclass B(Root):
35fd4e5da5Sopenharmony_ci
36fd4e5da5Sopenharmony_ci    def check_b(self):
37fd4e5da5Sopenharmony_ci        pass
38fd4e5da5Sopenharmony_ci
39fd4e5da5Sopenharmony_ci
40fd4e5da5Sopenharmony_ciclass C(Root):
41fd4e5da5Sopenharmony_ci
42fd4e5da5Sopenharmony_ci    def check_c(self):
43fd4e5da5Sopenharmony_ci        pass
44fd4e5da5Sopenharmony_ci
45fd4e5da5Sopenharmony_ci
46fd4e5da5Sopenharmony_ciclass D(Root):
47fd4e5da5Sopenharmony_ci
48fd4e5da5Sopenharmony_ci    def check_d(self):
49fd4e5da5Sopenharmony_ci        pass
50fd4e5da5Sopenharmony_ci
51fd4e5da5Sopenharmony_ci
52fd4e5da5Sopenharmony_ciclass E(Root):
53fd4e5da5Sopenharmony_ci
54fd4e5da5Sopenharmony_ci    def check_e(self):
55fd4e5da5Sopenharmony_ci        pass
56fd4e5da5Sopenharmony_ci
57fd4e5da5Sopenharmony_ci
58fd4e5da5Sopenharmony_ciclass H(B, C, D):
59fd4e5da5Sopenharmony_ci
60fd4e5da5Sopenharmony_ci    def check_h(self):
61fd4e5da5Sopenharmony_ci        pass
62fd4e5da5Sopenharmony_ci
63fd4e5da5Sopenharmony_ci
64fd4e5da5Sopenharmony_ciclass I(E):
65fd4e5da5Sopenharmony_ci
66fd4e5da5Sopenharmony_ci    def check_i(self):
67fd4e5da5Sopenharmony_ci        pass
68fd4e5da5Sopenharmony_ci
69fd4e5da5Sopenharmony_ci
70fd4e5da5Sopenharmony_ciclass O(H, I):
71fd4e5da5Sopenharmony_ci
72fd4e5da5Sopenharmony_ci    def check_o(self):
73fd4e5da5Sopenharmony_ci        pass
74fd4e5da5Sopenharmony_ci
75fd4e5da5Sopenharmony_ci
76fd4e5da5Sopenharmony_ciclass U(A, O):
77fd4e5da5Sopenharmony_ci
78fd4e5da5Sopenharmony_ci    def check_u(self):
79fd4e5da5Sopenharmony_ci        pass
80fd4e5da5Sopenharmony_ci
81fd4e5da5Sopenharmony_ci
82fd4e5da5Sopenharmony_ciclass X(U, A):
83fd4e5da5Sopenharmony_ci
84fd4e5da5Sopenharmony_ci    def check_x(self):
85fd4e5da5Sopenharmony_ci        pass
86fd4e5da5Sopenharmony_ci
87fd4e5da5Sopenharmony_ci
88fd4e5da5Sopenharmony_ciclass R1:
89fd4e5da5Sopenharmony_ci
90fd4e5da5Sopenharmony_ci    def check_r1(self):
91fd4e5da5Sopenharmony_ci        pass
92fd4e5da5Sopenharmony_ci
93fd4e5da5Sopenharmony_ci
94fd4e5da5Sopenharmony_ciclass R2:
95fd4e5da5Sopenharmony_ci
96fd4e5da5Sopenharmony_ci    def check_r2(self):
97fd4e5da5Sopenharmony_ci        pass
98fd4e5da5Sopenharmony_ci
99fd4e5da5Sopenharmony_ci
100fd4e5da5Sopenharmony_ciclass Multi(R1, R2):
101fd4e5da5Sopenharmony_ci
102fd4e5da5Sopenharmony_ci    def check_multi(self):
103fd4e5da5Sopenharmony_ci        pass
104fd4e5da5Sopenharmony_ci
105fd4e5da5Sopenharmony_ci
106fd4e5da5Sopenharmony_ciclass TestSpirvTestFramework(unittest.TestCase):
107fd4e5da5Sopenharmony_ci    def test_get_all_superclasses(self):
108fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(A), [Root])
109fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(B), [Root])
110fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(C), [Root])
111fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(D), [Root])
112fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(E), [Root])
113fd4e5da5Sopenharmony_ci
114fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(H), [Root, B, C, D])
115fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(I), [Root, E])
116fd4e5da5Sopenharmony_ci
117fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(O), [Root, B, C, D, E, H, I])
118fd4e5da5Sopenharmony_ci
119fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(
120fd4e5da5Sopenharmony_ci            U), [Root, B, C, D, E, H, I, A, O])
121fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(
122fd4e5da5Sopenharmony_ci            X), [Root, B, C, D, E, H, I, A, O, U])
123fd4e5da5Sopenharmony_ci
124fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_superclasses(Multi), [R1, R2])
125fd4e5da5Sopenharmony_ci
126fd4e5da5Sopenharmony_ci    def test_get_all_methods(self):
127fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_test_methods(A), ['check_root', 'check_a'])
128fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_test_methods(B), ['check_root', 'check_b'])
129fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_test_methods(C), ['check_root', 'check_c'])
130fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_test_methods(D), ['check_root', 'check_d'])
131fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_test_methods(E), ['check_root', 'check_e'])
132fd4e5da5Sopenharmony_ci
133fd4e5da5Sopenharmony_ci        self.assertEqual(
134fd4e5da5Sopenharmony_ci            get_all_test_methods(H),
135fd4e5da5Sopenharmony_ci            ['check_root', 'check_b', 'check_c', 'check_d', 'check_h'])
136fd4e5da5Sopenharmony_ci        self.assertEqual(get_all_test_methods(
137fd4e5da5Sopenharmony_ci            I), ['check_root', 'check_e', 'check_i'])
138fd4e5da5Sopenharmony_ci
139fd4e5da5Sopenharmony_ci        self.assertEqual(
140fd4e5da5Sopenharmony_ci            get_all_test_methods(O), [
141fd4e5da5Sopenharmony_ci                'check_root', 'check_b', 'check_c', 'check_d', 'check_e', 'check_h',
142fd4e5da5Sopenharmony_ci                'check_i', 'check_o'
143fd4e5da5Sopenharmony_ci            ])
144fd4e5da5Sopenharmony_ci
145fd4e5da5Sopenharmony_ci        self.assertEqual(
146fd4e5da5Sopenharmony_ci            get_all_test_methods(U), [
147fd4e5da5Sopenharmony_ci                'check_root', 'check_b', 'check_c', 'check_d', 'check_e', 'check_h',
148fd4e5da5Sopenharmony_ci                'check_i', 'check_a', 'check_o', 'check_u'
149fd4e5da5Sopenharmony_ci            ])
150fd4e5da5Sopenharmony_ci
151fd4e5da5Sopenharmony_ci        self.assertEqual(
152fd4e5da5Sopenharmony_ci            get_all_test_methods(X), [
153fd4e5da5Sopenharmony_ci                'check_root', 'check_b', 'check_c', 'check_d', 'check_e', 'check_h',
154fd4e5da5Sopenharmony_ci                'check_i', 'check_a', 'check_o', 'check_u', 'check_x'
155fd4e5da5Sopenharmony_ci            ])
156fd4e5da5Sopenharmony_ci
157fd4e5da5Sopenharmony_ci        self.assertEqual(
158fd4e5da5Sopenharmony_ci            get_all_test_methods(Multi), ['check_r1', 'check_r2', 'check_multi'])
159