[3/3] gdiplus: Make GdipInvertMatrix test pass on native

James Hawkins truiken at gmail.com
Sat Jul 12 16:55:39 CDT 2008


On Sat, Jul 12, 2008 at 4:35 PM, Nikolay Sivov <bunglehead at gmail.com> wrote:
> James Hawkins wrote:
>>
>> On Sat, Jul 12, 2008 at 4:12 PM, Nikolay Sivov <bunglehead at gmail.com>
>> wrote:
>>
>>>
>>> Changelog:
>>>   - Make GdipInvertMatrix test pass on native
>>>
>>> ---
>>>  dlls/gdiplus/tests/matrix.c |   23 +++++++++++++++++------
>>>  1 files changed, 17 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/dlls/gdiplus/tests/matrix.c b/dlls/gdiplus/tests/matrix.c
>>> index 16c1517..daf61ea 100644
>>> --- a/dlls/gdiplus/tests/matrix.c
>>> +++ b/dlls/gdiplus/tests/matrix.c
>>> @@ -27,6 +27,19 @@
>>>
>>>  #define expect(expected, got) ok(got == expected, "Expected %.8x, got
>>> %.8x\n", expected, got)
>>>
>>> +/* compare matrix data with some tolerance */
>>> +BOOL m_equalf(REAL *m1, REAL *m2)
>>> +{
>>> +    BOOL ret = TRUE;
>>> +    INT i;
>>> +
>>> +    for(i = 0; i < 6; i++){
>>> +        ret = ret && (fabsf(m1[i] - m2[i]) < 1e-5);
>>> +    }
>>> +
>>> +    return ret;
>>> +}
>>> +
>>>  static void test_constructor_destructor(void)
>>>  {
>>>    GpStatus status;
>>> @@ -119,12 +132,12 @@ static void test_isinvertible(void)
>>>    GdipDeleteMatrix(matrix);
>>>  }
>>>
>>> +static REAL minverted[] = {1.0/9.0, 2.0/9.0, 4.0/9.0, -1.0/9.0, -2.0,
>>> -1.0};
>>>  static void test_invert(void)
>>>  {
>>>    GpStatus status;
>>>    GpMatrix *matrix = NULL;
>>> -    GpMatrix *inverted = NULL;
>>> -    BOOL equal;
>>> +    REAL mdata[6];
>>>
>>>    /* NULL */
>>>    status = GdipInvertMatrix(NULL);
>>> @@ -141,11 +154,9 @@ static void test_invert(void)
>>>    status = GdipInvertMatrix(matrix);
>>>    expect(Ok, status);
>>>
>>> -    GdipCreateMatrix2(1.0/9.0, 2.0/9.0, 4.0/9.0, -1.0/9.0, -2.0, -1.0,
>>> &inverted);
>>> -    GdipIsMatrixEqual(matrix, inverted, &equal);
>>> -    expect(TRUE, equal);
>>> +    GdipGetMatrixElements(matrix, mdata);
>>> +    expect(TRUE, m_equalf(mdata, minverted));
>>>
>>>
>>
>> Why are you creating a new function that allows tolerance when you
>> control the matrix you're comparing it to?  Allowing slop is
>> acceptable in some circumstances, but not in this case, when there is
>> one exact value (or matrix of values) returned.
>
> Of course there's only one value of inverted matrix. GDI+ uses floating
> point values for matrix elements so don't you think the result could be
> slightly different due different calculation algorithms?
>

If you write and test the results in Windows, you won't have to guess
what the results will be.  No I don't think the results will be
slightly different.  Higher-precision arithmetic doesn't mean more
slop.

-- 
James Hawkins



More information about the wine-devel mailing list