[Piglit] [PATCH] util: migrate the SUBTEST* macros to piglit-util.sh

Martin Peres martin.peres at linux.intel.com
Wed Feb 18 08:21:36 PST 2015


Hey Jose,

On 18/02/15 17:10, Jose Fonseca wrote:
> FYI, you'll need to rebase on top of 
> http://cgit.freedesktop.org/piglit/commit/?id=83bc6862386b2d465879bcd372d61ec754534970 
> , so that we use the standard C99 syntax for variadic macros.  You 
> might need to manually update the moved code, as git might just mark 
> it as a conflict.

Sorry for breaking the windows build...  No probs, I'll rebase it.

>
>
> Concerning the actual change, just a general remark:  these macros 
> save typing but they make the test code harder to understand
>
>
> I think there are other approaches that achieve the same amount of 
> type-saving, without compromising readbility.
>
> For example, we could have a
>
>
>   // global contaning the current substest result
>   // TODO: Make it a enum piglit_result
>   bool current_subtest_result;
>   char current_subtest_message[4096];
>
>   piglit_subtest_begin() {
>     current_subtest_result = true;
>     current_subtest_message[0] = 0;
>   }
>
>   void
>   piglit_subtest_check(bool condition, format, ...) {
>     bool pass = piglit_check_gl_error((error));
>     if (!pass) {
>         // FIXME: append format+va_args to current_subtest_message.
>     }
>     current_subtest_result = current_subtest_result && pass;
>   }
>
>   void
>   piglit_subtest_check_gl_error(error) {
>      ...
>   }
>
>  piglit_subtest_end()
>    piglit_report_subtest_result(current_subtest_result ? PIGLIT_PASS : 
> PIGLIT_FAIL, current_subtest_message);
>   }
>
>
> And the test would do
>
>     piglit_subtest_begin();
>     piglit_subtest_check_gl_error(error, etc);
>     piglit_subtest_check_gl_error(error, etc);
>     piglit_subtest_check(cond, etc);
>     piglit_subtest_end();

Not sure this form saves anything since one sub-test would be one line 
in my case instead of 3 in this case.
Have a look at 
http://cgit.freedesktop.org/~mperes/piglit/commit/?h=dsa&id=c08558659f7967410ab68f39c3d768e41e35bc6d

What you proposed is a good idea for the whole test though. 
piglit_test_begin() would set current_test_result
to keep track of the state and the other functions would follow the 
state. I'm not a fan of the global variable
too as what will happen if we have interleaved tests?

In any case, I'm sure some tests will not work with this model. So, 
instead of sharing those function and making them
very confusing, I would argue that outside of trivial cases (like the 
macros I proposed), you should re-write your own
way of checking. As for the "confusing" argument, not sure how much 
simpler can this code be (*no side effect*). It is
also less prone to copy/paste errors.

In my opinion, we won't reach an agreement that would work in every case 
or, if we do, people will not use the code
added because it will be too complex. Instead, let's just let devs 
handle their test code as it pleases them. If there are
some trivial cases common-enough, then we can add them to 
piglit-util.sh. I guess the question now is, are those
common-enough outside of DSA?

Martin


More information about the Piglit mailing list