2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for CreatePen
5 * PROGRAMMERS: Timo Kreuzer
12 #include <reactos/win32k/ntgdityp.h>
13 #include <reactos/win32k/ntgdihdl.h>
15 #define ok_int(x, y) ok(x == y, "Wrong value for " #x ", expected " #y ", got %ld\n", (long)x);
16 #define ok_flt(x, y) ok(x == y, "Wrong value for " #x ", expected " #y ", got %f\n", (double)x);
18 #define ok_xform(xform, m11, m12, m21, m22, dx, dy) \
19 ok_flt(xform.eM11, m11); \
20 ok_flt(xform.eM12, m12); \
21 ok_flt(xform.eM21, m21); \
22 ok_flt(xform.eM22, m22); \
23 ok_flt(xform.eDx, dx); \
24 ok_flt(xform.eDy, dy);
26 void Test_CombineTransform()
28 XFORM xform1
, xform2
, xform3
;
31 /* Test NULL paramters */
32 SetLastError(ERROR_SUCCESS
);
33 ret
= CombineTransform(&xform3
, &xform1
, NULL
);
35 ret
= CombineTransform(&xform3
, NULL
, &xform2
);
37 ret
= CombineTransform(NULL
, &xform1
, &xform2
);
39 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
41 ok_int(GetLastError(), ERROR_SUCCESS
);
43 /* 2 Identity matrices */
51 SetLastError(ERROR_SUCCESS
);
52 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
54 ok_xform(xform3
, 1.0, 0., 0., 1.0, 0., 0.);
55 ok_int(GetLastError(), ERROR_SUCCESS
);
57 /* 2 Identity matrices with offsets */
60 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
62 ok_xform(xform3
, 1.0, 0., 0., 1.0, 20.0, -100.0);
66 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
68 ok_flt(xform3
.eDx
, -40.0);
69 ok_flt(xform3
.eDy
, -120.0);
71 /* add some stretching */
74 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
76 ok_xform(xform3
, 2.0, 0., 0., 4.0, -20.0, -420.0);
78 /* add some more stretching */
81 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
83 ok_xform(xform3
, -5.0, 0., 0., 2.0, -20.0, -420.0);
87 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
89 ok_xform(xform3
, -5.0, 8.0, -1.0, 2.0, -20.0, -420.0);
93 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
95 ok_xform(xform3
, 8.0, -2.0, 2.25, 0.0, -670.0, -340.0);
105 xform1
.eDx
= 4294967167.999999761;
106 ok(xform1
.eDx
== 4294967040.0, "float rounding error.\n");
107 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
108 ok(ret
== 1, "expected ret = 1, got %d\n", ret
);
110 xform1
.eDx
= 4294967167.999999762;
111 ok(xform1
.eDx
== 4294967296.0, "float rounding error.\n");
112 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
114 ok_int(GetLastError(), ERROR_SUCCESS
);
116 xform1
.eDx
= -4294967167.999999761;
117 ok(xform1
.eDx
== -4294967040.0, "float rounding error.\n");
118 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
121 xform1
.eDx
= -4294967167.999999762;
122 ok(xform1
.eDx
== -4294967296.0, "float rounding error.\n");
123 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
125 ok_int(GetLastError(), ERROR_SUCCESS
);
128 xform1
.eDy
= 4294967167.999999761;
129 ok(xform1
.eDy
== 4294967040.0, "float rounding error.\n");
130 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
134 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
137 xform1
.eDy
= 4294967167.999999762;
138 ok(xform1
.eDy
== 4294967296.0, "float rounding error.\n");
139 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
141 ok_int(GetLastError(), ERROR_SUCCESS
);
143 xform1
.eDy
= -4294967167.999999761;
144 ok(xform1
.eDy
== -4294967040.0, "float rounding error.\n");
145 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
148 xform1
.eDy
= -4294967167.999999762;
149 ok(xform1
.eDy
== -4294967296.0, "float rounding error.\n");
150 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
152 ok_int(GetLastError(), ERROR_SUCCESS
);
155 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
158 xform1
.eDx
= -4294967167.999999762;
159 xform1
.eM11
= 1000.0;
160 xform2
.eM11
= 1000.0;
161 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
163 ok_int(GetLastError(), ERROR_SUCCESS
);
165 xform1
.eDx
= 100000.0;
166 xform2
.eM11
= 100000.0;
167 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
169 ok_int(GetLastError(), ERROR_SUCCESS
);
171 /* Some undefined values */
172 *(DWORD
*)&xform1
.eM11
= 0xffc00000; // (0.0F/0.0F)
175 *(DWORD
*)&xform1
.eM22
= 0x7f800000; // (1.0F/0.0F)
179 SetLastError(ERROR_SUCCESS
);
180 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
182 ok(*(DWORD
*)&xform3
.eM11
== 0xffc00000, "eM11: Expected 0xffc00000, got 0x%lx\n", *(DWORD
*)&xform3
.eM11
);
183 ok(xform3
.eM12
== 0, "eM12: Expected 0, got %f\n", xform3
.eM12
);
184 ok(xform3
.eM21
== 0, "eM21: Expected 0, got %f\n", xform3
.eM21
);
185 ok(*(DWORD
*)&xform3
.eM22
== 0x7f800000, "eM22: Expected 0x7f800000, got 0x%lx\n", *(DWORD
*)&xform3
.eM22
);
186 ok(xform3
.eDx
== 0, "eDx: Expected 0, got %f\n", xform3
.eDx
);
187 ok(xform3
.eDy
== 0, "eDy: Expected 0, got %f\n", xform3
.eDy
);
188 ok_int(GetLastError(), ERROR_SUCCESS
);
190 /* Some undefined values */
195 ret
= CombineTransform(&xform3
, &xform1
, &xform2
);
198 ok_int(*(DWORD
*)&xform3
.eM11
, 0xffc00000);
199 ok_int(*(DWORD
*)&xform3
.eM12
, 0xffc00000);
200 ok_int(*(DWORD
*)&xform3
.eM21
, 0x7f800000);
201 ok_int(*(DWORD
*)&xform3
.eM22
, 0x7f800000);
202 ok(xform3
.eDx
== 0, "eDx: Expected 0, got %f\n", xform3
.eDx
);
203 ok(xform3
.eDy
== 0, "eDy: Expected 0, got %f\n", xform3
.eDy
);
204 ok_int(GetLastError(), ERROR_SUCCESS
);
208 START_TEST(CombineTransform
)
210 Test_CombineTransform();