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

Jose Fonseca jfonseca at vmware.com
Wed Feb 18 09:04:21 PST 2015


On 18/02/15 16:21, Martin Peres wrote:
> Hey Jose,
>
> On 18/02/15 17:10, Jose Fonseca wrote:
>> FYI, you'll need to rebase on top of
>> https://urldefense.proofpoint.com/v2/url?u=http-3A__cgit.freedesktop.org_piglit_commit_-3Fid-3D83bc6862386b2d465879bcd372d61ec754534970&d=AwICaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=zfmBZnnVGHeYde45pMKNnVyzeaZbdIqVLprmZCM2zzE&m=sVUvrnV7t1PNeIQxUMSOqpqrBVurla-YZBTVE6zrfak&s=Ab2Wxn8llpFWmmedbauWhqjyxSffQWMDqv8amVB9WcI&e=
>> , 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.

No prob. Thanks.

>
>>
>>
>> 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
> https://urldefense.proofpoint.com/v2/url?u=http-3A__cgit.freedesktop.org_-7Emperes_piglit_commit_-3Fh-3Ddsa-26id-3Dc08558659f7967410ab68f39c3d768e41e35bc6d&d=AwICaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=zfmBZnnVGHeYde45pMKNnVyzeaZbdIqVLprmZCM2zzE&m=sVUvrnV7t1PNeIQxUMSOqpqrBVurla-YZBTVE6zrfak&s=eN7ni-8KESSon5ovNFgLvaqSxs_IHB9Wp20IEwtz5YU&e=

Right. I did misunderstood how this was supposed to be used.  I saw 
piglit_report_subtest_result callers that had many partial sub-conditions.

But I now see that there's the test pass/fail, and then the subtest 
pass/fail, and each can be aggregated of multiple sub-conditions, and 
test writers usually need to do "foo = foo && condition" at both levels. 
  You macros target the case where each subtest is one condition/error 
exactly.


> 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.

Right.


 > I'm not a fan of the global variable
> too as what will happen if we have interleaved tests?

True.  But maybe the benefit of not having to keep track of overall 
pass/fail would trump over the inability to write 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?

Devs are certainly free to stick with their style.  And I'm not active 
enough in piglit to oppose anything.


So I just wondered if it wouldn't be worthwhile to devise some scheme 
that would completely eliminate the need for test writers to keep track 
of these aggregated pass/fail variables.

Jose


More information about the Piglit mailing list