[PATCH 4/4] d3drm/tests: Add vtable comparison tests in test_frame_qi

Aaryaman Vasishta jem456.vasishta at gmail.com
Fri Apr 3 07:46:30 CDT 2015


I realized that it might not be as easy as it seems to implement that
approach - as including the todo's there is complicated. I've added another
field called vtable_todo in the test, and done something like this, similar
to how I did in the test_d3drm_qi tests:

if (tables[i].vtable_todo || tables[j].vtable_todo)
    todo_wine ok(...);
else
    ok(...);

The problem with this approach is that if the tests fail on wine no matter
what boolean combination I use. It's because we can't explicitly set which
vtable should have a todo against another vtable in this case. If the
vtable_todo is set to true for an entry, it'll do a todo_wine for every
other interface it is checked against, which is undesirable and causes the
fails or successful todo_wine(s).

On Fri, Apr 3, 2015 at 2:41 AM, Aaryaman Vasishta <jem456.vasishta at gmail.com
> wrote:

>
>
> On Fri, Apr 3, 2015 at 2:10 AM, Stefan Dösinger <stefandoesinger at gmail.com
> > wrote:
>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Am 2015-04-02 um 18:36 schrieb Aaryaman Vasishta:
>> >      REFIID iid;
>> >      REFIID refcount_iid;
>> > +    REFIID vtable_iid;
>> >      HRESULT hr;
>> >      BOOL refcount_todo;
>> > +    BOOL vtable_equal;
>> > +    BOOL vtable_todo;
>> >  };
>> I think this is more complicated than it needs to be. All you should
>> need is the vtable_iid field. Then, in the inner loop do something like
>>
>> if (IsEqualGUID(tests[i].vtable_iid, tests[j].vtable_iid))
>>     ok(iface1 == iface2, ...);
>> else
>>     ok(iface1 != iface2, ...);
>>
>> I may be missing something though.
>>
> I've tried this and it works too. I'll use this on the patch try, and
> along with it also keep vtable_todo as some tests won't work on wine until
> they're fixed.
>
>
>>
>> If you want to compare two Win32 BOOLs for equality you have to be
>> careful:
>>
>> BOOL a = 1;
>> BOOL b = 2;
>> if (a)
>>    printf("this is true.\n");
>> if (b)
>>    printf("this is also true.\n");
>> if (a == b)
>>    printf("oops, this is false.\n");
>>
>> For something like that you can use
>> if (!a == !b)
>>     printf("yay, this is true!\n");
>>
>> IsEqualGUID(a, b) is defined as !memcmp(a, b, sizeof(GUID)), so
>> IsEqualGUID() == (ptr1 == ptr2) should be OK though.
>>
>> I'll keep this in mind the next time I come across it. Thank You!
>
> jam
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20150403/0ee4ead4/attachment-0001.html>


More information about the wine-devel mailing list