Daniel Vetter | 87042d6 | 2014-06-13 16:23:10 +0200 | [diff] [blame] | 1 | // Semantic patch for common patters and their replacement by igt infrastructure |
| 2 | // and macros. Please run with |
| 3 | // |
| 4 | // spatch --sp-file lib/igt.cocci --in-place tests/*.c |
| 5 | // |
| 6 | // on your new testcase. |
| 7 | |
| 8 | |
Daniel Vetter | 6b73a9a | 2014-06-13 15:32:50 +0200 | [diff] [blame] | 9 | // Replace open-coded augmented igt_assert/skip/require with macro versions |
Daniel Vetter | 66b31b6 | 2014-06-13 11:16:28 +0200 | [diff] [blame] | 10 | @@ |
| 11 | expression Ec; |
| 12 | expression list[n] Ep; |
| 13 | @@ |
| 14 | - if (Ec) { |
Daniel Vetter | bde52d1 | 2014-06-13 15:41:28 +0200 | [diff] [blame] | 15 | ( |
| 16 | - igt_warn( Ep ); |
| 17 | | |
| 18 | - igt_info( Ep ); |
| 19 | | |
| 20 | - igt_debug( Ep ); |
| 21 | ) |
Daniel Vetter | 66b31b6 | 2014-06-13 11:16:28 +0200 | [diff] [blame] | 22 | - igt_fail(...); |
| 23 | - } |
Daniel Vetter | 2347e6d | 2014-06-13 18:01:33 +0200 | [diff] [blame] | 24 | + igt_fail_on_f(Ec, Ep); |
| 25 | @@ |
| 26 | expression Ec; |
| 27 | @@ |
| 28 | - if (Ec) { |
| 29 | - igt_fail(...); |
| 30 | - } |
| 31 | + igt_fail_on(Ec); |
Daniel Vetter | 66b31b6 | 2014-06-13 11:16:28 +0200 | [diff] [blame] | 32 | @@ |
| 33 | expression Ec; |
| 34 | expression list[n] Ep; |
| 35 | @@ |
| 36 | - if (Ec) { |
| 37 | - igt_skip(Ep); |
| 38 | - } |
| 39 | + igt_skip_on_f(Ec, Ep); |
Daniel Vetter | 46811c8 | 2014-06-13 15:45:30 +0200 | [diff] [blame] | 40 | @@ |
| 41 | expression Ec; |
| 42 | expression list[n] Ep; |
| 43 | @@ |
| 44 | - if (Ec) { |
| 45 | - igt_warn(Ep); |
| 46 | - } |
| 47 | + igt_warn_on_f(Ec, Ep); |
Daniel Vetter | bde52d1 | 2014-06-13 15:41:28 +0200 | [diff] [blame] | 48 | |
| 49 | // Enforce use of logging functions |
| 50 | @@ |
| 51 | expression list[n] Ep; |
| 52 | @@ |
| 53 | -fprintf(stderr, Ep); |
| 54 | +igt_warn(Ep); |
| 55 | @@ |
| 56 | expression E; |
| 57 | @@ |
| 58 | -perror(E); |
| 59 | +igt_warn(E); |
| 60 | @@ |
| 61 | expression list[n] Ep; |
| 62 | @@ |
| 63 | -fprintf(stdout, Ep); |
| 64 | +igt_info(Ep); |
| 65 | @@ |
| 66 | expression list[n] Ep; |
| 67 | @@ |
| 68 | -printf(Ep); |
| 69 | +igt_info(Ep); |
Daniel Vetter | 9eb9345 | 2014-06-13 15:45:12 +0200 | [diff] [blame] | 70 | |
| 71 | // No abort for tests, really. Should only be used for internal library checks |
| 72 | // in lib/* |
| 73 | @@ |
| 74 | @@ |
| 75 | -abort(); |
Thomas Wood | b47032e | 2015-04-09 09:24:12 +0100 | [diff] [blame] | 76 | +igt_fail(IGT_EXIT_FAILURE); |
Daniel Vetter | 8bf115e | 2014-07-11 17:41:27 +0200 | [diff] [blame] | 77 | |
| 78 | @@ |
| 79 | iterator name for_each_pipe; |
| 80 | igt_display_t *display; |
| 81 | expression pipe; |
| 82 | @@ |
| 83 | - for (pipe = 0; pipe < igt_display_get_n_pipes(display); pipe++) { |
| 84 | + for_each_pipe (display, pipe) { |
| 85 | ... |
| 86 | } |
Daniel Vetter | 428060c | 2014-07-15 10:21:37 +0200 | [diff] [blame] | 87 | |
| 88 | // Tests really shouldn't use plain assert! |
| 89 | @@ |
| 90 | expression E; |
| 91 | @@ |
| 92 | - assert(E); |
| 93 | + igt_assert(E); |
Ville Syrjälä | e1bdab9 | 2014-11-28 11:11:17 +0200 | [diff] [blame] | 94 | |
Daniel Vetter | 2eca38e | 2015-02-07 12:37:48 +0100 | [diff] [blame] | 95 | // Replace open-coded igt_swap() |
Ville Syrjälä | e1bdab9 | 2014-11-28 11:11:17 +0200 | [diff] [blame] | 96 | @@ |
| 97 | type T; |
| 98 | T a, b, tmp; |
| 99 | @@ |
| 100 | - tmp = a; |
| 101 | - a = b; |
| 102 | - b = tmp; |
Daniel Vetter | 2eca38e | 2015-02-07 12:37:48 +0100 | [diff] [blame] | 103 | + igt_swap(a, b); |
Ville Syrjälä | e1bdab9 | 2014-11-28 11:11:17 +0200 | [diff] [blame] | 104 | |
| 105 | // Replace open-coded min() |
| 106 | @@ |
| 107 | expression a; |
| 108 | expression b; |
| 109 | @@ |
| 110 | ( |
| 111 | - ((a) < (b) ? (a) : (b)) |
| 112 | + min(a, b) |
| 113 | | |
| 114 | - ((a) <= (b) ? (a) : (b)) |
| 115 | + min(a, b) |
| 116 | ) |
| 117 | |
| 118 | // Replace open-coded max() |
| 119 | @@ |
| 120 | expression a; |
| 121 | expression b; |
| 122 | @@ |
| 123 | ( |
| 124 | - ((a) > (b) ? (a) : (b)) |
| 125 | + max(a, b) |
| 126 | | |
| 127 | - ((a) >= (b) ? (a) : (b)) |
| 128 | + max(a, b) |
| 129 | ) |
Thomas Wood | 032f30c | 2015-01-13 13:33:57 +0000 | [diff] [blame] | 130 | |
| 131 | // drm_open_any always returns a valid file descriptor |
| 132 | @@ |
| 133 | expression a; |
| 134 | @@ |
| 135 | a = drm_open_any(); |
| 136 | ( |
| 137 | - igt_assert(a >= 0); |
| 138 | | |
| 139 | - if (a < 0) { |
| 140 | - ... |
| 141 | - return ...; |
| 142 | - } |
| 143 | ) |
Matt Roper | 07be8fe | 2015-03-05 15:01:00 -0800 | [diff] [blame] | 144 | |
| 145 | // Use comparison macros instead of raw igt_assert when possible |
| 146 | @@ |
| 147 | typedef uint32_t; |
| 148 | uint32_t E1, E2; |
| 149 | int E3, E4; |
| 150 | @@ |
| 151 | ( |
| 152 | - igt_assert(E1 == E2); |
| 153 | + igt_assert_eq_u32(E1, E2); |
| 154 | | |
| 155 | - igt_assert(E1 != E2); |
| 156 | + igt_assert_neq_u32(E1, E2); |
| 157 | | |
| 158 | - igt_assert(E1 <= E2); |
| 159 | + igt_assert_lte_u32(E1, E2); |
| 160 | | |
| 161 | - igt_assert(E1 < E2); |
| 162 | + igt_assert_lt_u32(E1, E2); |
| 163 | | |
Daniel Stone | 31821fc | 2015-10-01 13:25:48 +0100 | [diff] [blame] | 164 | - igt_assert(E1 >= E2); |
| 165 | + igt_assert_lte_u32(E2, E1); |
| 166 | | |
| 167 | - igt_assert(E1 > E2); |
| 168 | + igt_assert_lt_u32(E2, E1); |
| 169 | | |
Matt Roper | 07be8fe | 2015-03-05 15:01:00 -0800 | [diff] [blame] | 170 | - igt_assert(E3 == E4); |
| 171 | + igt_assert_eq(E3, E4); |
| 172 | | |
| 173 | - igt_assert(E3 != E4); |
| 174 | + igt_assert_neq(E3, E4); |
| 175 | | |
| 176 | - igt_assert(E3 <= E4); |
| 177 | + igt_assert_lte(E3, E4); |
| 178 | | |
| 179 | - igt_assert(E3 < E4); |
| 180 | + igt_assert_lt(E3, E4); |
Daniel Stone | 31821fc | 2015-10-01 13:25:48 +0100 | [diff] [blame] | 181 | | |
| 182 | - igt_assert(E3 >= E4); |
| 183 | + igt_assert_lte(E4, E3); |
| 184 | | |
| 185 | - igt_assert(E3 > E4); |
| 186 | + igt_assert_lt(E4, E3); |
Matt Roper | 07be8fe | 2015-03-05 15:01:00 -0800 | [diff] [blame] | 187 | ) |
Thomas Wood | 47f6b13 | 2015-03-25 16:42:57 +0000 | [diff] [blame] | 188 | |
| 189 | // avoid unused-result warnings when compiling with _FORTIFY_SOURCE defined |
| 190 | @@ |
| 191 | identifier func =~ "^(read|write)$"; |
| 192 | expression list[2] E; |
| 193 | expression size; |
| 194 | @@ |
| 195 | -func(E, size); |
| 196 | +igt_assert_eq(func(E, size), size); |
| 197 | |
| 198 | @@ |
| 199 | expression ptr, size, nmemb, stream; |
| 200 | @@ |
| 201 | -fread(ptr, size, nmemb, stream); |
| 202 | +igt_assert_eq(fread(ptr, size, nmemb, stream), nmemb); |
| 203 | |
| 204 | @@ |
| 205 | expression list E; |
| 206 | @@ |
| 207 | -fgets(E); |
Thomas Wood | aa6c634 | 2015-05-14 16:24:01 +0100 | [diff] [blame] | 208 | +igt_assert(fgets(E) != NULL); |
Thomas Wood | 47f6b13 | 2015-03-25 16:42:57 +0000 | [diff] [blame] | 209 | |
| 210 | @@ |
| 211 | identifier func =~ "^v?asprintf$"; |
| 212 | expression list E; |
| 213 | @@ |
| 214 | -func(E); |
| 215 | +igt_assert_neq(func(E), -1); |
Daniel Stone | 668c053 | 2015-10-01 14:16:23 +0100 | [diff] [blame] | 216 | |
| 217 | // replace open-coded do_ioctl |
| 218 | @@ |
| 219 | expression a, b, c, e; |
| 220 | @@ |
| 221 | ( |
| 222 | -do_or_die(drmIoctl(a, b, c)); |
| 223 | +do_ioctl(a, b, c); |
| 224 | | |
| 225 | -igt_assert(drmIoctl(a, b, c) == 0); |
| 226 | +do_ioctl(a, b, c); |
| 227 | | |
| 228 | -igt_assert(drmIoctl(a, b, c) == -1 && errno == e); |
| 229 | +do_ioctl_err(a, b, c, e); |
| 230 | | |
| 231 | -igt_assert(drmIoctl(a, b, c) < 0 && errno == e); |
| 232 | +do_ioctl_err(a, b, c, e); |
| 233 | ) |