xref: /aosp_15_r20/external/igt-gpu-tools/lib/tests/igt_subtest_group.c (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1 /*
2  * Copyright © 2016 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  *
23  */
24 
25 #include "igt_core.h"
26 
27 #include "igt_tests_common.h"
28 
29 igt_main
30 {
31 	/*
32 	 * local variables have to be volatile here otherwise they end up being
33 	 * undefined when modified in igt_subtest, fixture, etc. because of
34 	 * longjmps
35 	 */
36 	volatile bool t1 = false;
37 	volatile int t2 = 0;
38 
39 	igt_subtest_group {
40 		igt_fixture {
41 			igt_require(true);
42 		}
43 
44 		igt_subtest_group {
45 			igt_fixture {
46 				igt_require(false);
47 			}
48 
49 			igt_subtest("not-run") {
50 				internal_assert(0);
51 			}
52 
53 			igt_subtest_group {
54 				/* need to make sure we don't accidentally
55 				 * restore to "run testcases" when an outer
56 				 * group is already in SKIP state. */
57 				igt_subtest("still-not-run") {
58 					internal_assert(0);
59 				}
60 			}
61 		}
62 
63 		igt_subtest("run") {
64 			t1 = true;
65 			internal_assert(1);
66 		}
67 	}
68 
69 	igt_subtest_group {
70 		igt_fixture {
71 			internal_assert(t2 == 0);
72 			t2 = 1;
73 		}
74 
75 		igt_subtest("run-again") {
76 			internal_assert(t2 == 1);
77 			t2 = 2;
78 		}
79 
80 		igt_fixture {
81 			internal_assert(t2 == 2);
82 			t2 = 3;
83 
84 		}
85 	}
86 
87 	internal_assert(t1);
88 	internal_assert(t2 == 3);
89 }
90