[GDI32_APITEST] Rewrite LPtoDP testcase (#1508)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Mon, 22 Apr 2019 04:48:14 +0000 (13:48 +0900)
committerGitHub <noreply@github.com>
Mon, 22 Apr 2019 04:48:14 +0000 (13:48 +0900)
Sorry, I had to rewrite gdi32!LPtoDP testcase. ROSTESTS-319

modules/rostests/apitests/gdi32/LPtoDP.c

index e92c0a4..caa1e29 100644 (file)
 /*
  * PROJECT:         ReactOS api tests
  * LICENSE:         GPL - See COPYING in the top level directory
- * PURPOSE:         Test for ...
+ * PURPOSE:         Test for LPtoDP
  * PROGRAMMERS:     Katayama Hirofumi MZ
  */
 
 #include "precomp.h"
 
 #define INVALID_POINTER ((PVOID)(ULONG_PTR)0xdeadbeefdeadbeefULL)
+#define IGNORE 0xFACECAFE
+#define CALC_VALUE_1 0xBADACE01
+#define CALC_VALUE_2 0xFEEDF00D
+#define CALC_VALUE_3 0xDEADCAD1
+#define DISPLAY_SIZE 0xDEADBEEF
+#define NEGA_DISPLAY_SIZE 0xBEEFDEAD
+
+typedef struct PRESET
+{
+    LONG xWnd;
+    LONG yWnd;
+    LONG cxWnd;
+    LONG cyWnd;
+
+    LONG xView;
+    LONG yView;
+    LONG cxView;
+    LONG cyView;
+} PRESET;
+
+typedef struct TEST_ENTRY
+{
+    INT lineno;
+    BOOL ret;
+    DWORD error;
+
+    BOOL bWndExt;
+    INT nMapMode;
+
+    PRESET preset;
+
+    LONG xWndOut;
+    LONG yWndOut;
+    LONG cxWndOut;
+    LONG cyWndOut;
+
+    LONG xViewOut;
+    LONG yViewOut;
+    LONG cxViewOut;
+    LONG cyViewOut;
+
+    POINT ptSrc;
+    POINT ptDest;
+} TEST_ENTRY;
+
+#define PRESET0     { 0,  0,   0,   0,   0,   0,  0,    0   }
+#define PRESET1     { 0,  0,   1,   1,   0,   0,  1,    1   }
+#define PRESET2     { 75, 0,   1,   1,   0,   0,  10,   10  }
+#define PRESET3     { 0,  180, 1,   1,   120, 0,  1,    1   }
+#define PRESET4     { 0,  0,   200, 1,   50,  0,  1,    1   }
+#define PRESET5     { 0,  0,   1,   200, 0,   0,  -100, 1   }
+#define PRESET6     { 50, 0,   1,   200, 10,  0,  100,  200 }
+
+static const TEST_ENTRY s_entries[] =
+{
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET0, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { 100, 150 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET1, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { 100, 150 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET2, 75, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { 25, 150 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET3, 0, 180, 1, 1, 120, 0, 1, 1, { 100, 150 }, { 220, -30 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET4, 0, 0, 1, 1, 50, 0, 1, 1, { 100, 150 }, { 150, 150 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET5, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { 100, 150 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET6, 50, 0, 1, 1, 10, 0, 1, 1, { 100, 150 }, { 60, 150 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, FALSE, MM_ANISOTROPIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, IGNORE, IGNORE, { 100, 150 }, { IGNORE, IGNORE } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET1, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { 100, 150 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET2, 75, 0, 1, 1, 0, 0, 10, 10, { 100, 150 }, { 250, 1500 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET3, 0, 180, 1, 1, 120, 0, 1, 1, { 100, 150 }, { 220, -30 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET4, 0, 0, 200, 1, 50, 0, 1, 1, { 100, 150 }, { 51, 150 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET5, 0, 0, 1, 200, 0, 0, -100, 1, { 100, 150 }, { -10000, 1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET6, 50, 0, 1, 200, 10, 0, 100, 200, { 100, 150 }, { 5010, 150 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, FALSE, MM_ISOTROPIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, IGNORE, IGNORE, { 100, 150 }, { IGNORE, IGNORE } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET1, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { 100, 150 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET2, 75, 0, 1, 1, 0, 0, 10, 10, { 100, 150 }, { 250, 1500 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET3, 0, 180, 1, 1, 120, 0, 1, 1, { 100, 150 }, { 220, -30 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET4, 0, 0, 200, 1, 50, 0, 1, 0, { 100, 150 }, { 51, 0 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET5, 0, 0, 1, 200, 0, 0, 0, 1, { 100, 150 }, { 0, 0 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET6, 50, 0, 1, 200, 10, 0, 1, 200, { 100, 150 }, { 60, 150 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_1 , CALC_VALUE_1 } },
+};
+static const size_t s_entries_count = _countof(s_entries);
+
+static const TEST_ENTRY s_shifted_entries[] =
+{
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET0, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET1, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET2, 75, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET3, 0, 180, 1, 1, 120, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET4, 0, 0, 1, 1, 50, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET5, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET6, 50, 0, 1, 1, 10, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, FALSE, MM_ANISOTROPIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, IGNORE, IGNORE, { 100, 150 }, { IGNORE, IGNORE } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET1, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET2, 75, 0, 1, 1, 0, 0, 10, 10, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET3, 0, 180, 1, 1, 120, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET4, 0, 0, 200, 1, 50, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET5, 0, 0, 1, 200, 0, 0, -100, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET6, 50, 0, 1, 200, 10, 0, 100, 200, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, FALSE, MM_ISOTROPIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, IGNORE, IGNORE, { 100, 150 }, { IGNORE, IGNORE } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET1, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET2, 75, 0, 1, 1, 0, 0, 10, 10, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET3, 0, 180, 1, 1, 120, 0, 1, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET4, 0, 0, 200, 1, 50, 0, 1, 0, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET5, 0, 0, 1, 200, 0, 0, 0, 1, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET6, 50, 0, 1, 200, 10, 0, 1, 200, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } }, 
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_2, CALC_VALUE_2 } },
+};
+static const size_t s_shifted_entries_count = _countof(s_shifted_entries);
+
+static const TEST_ENTRY s_transformed_entries[] =
+{
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET0, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET1, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET2, 75, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET3, 0, 180, 1, 1, 120, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET4, 0, 0, 1, 1, 50, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET5, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TEXT, PRESET6, 50, 0, 1, 1, 10, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, FALSE, MM_ANISOTROPIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, IGNORE, IGNORE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET1, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET2, 75, 0, 1, 1, 0, 0, 10, 10, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET3, 0, 180, 1, 1, 120, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET4, 0, 0, 200, 1, 50, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET5, 0, 0, 1, 200, 0, 0, -100, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ANISOTROPIC, PRESET6, 50, 0, 1, 200, 10, 0, 100, 200, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, FALSE, MM_ISOTROPIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, IGNORE, IGNORE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET1, 0, 0, 1, 1, 0, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET2, 75, 0, 1, 1, 0, 0, 10, 10, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET3, 0, 180, 1, 1, 120, 0, 1, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET4, 0, 0, 200, 1, 50, 0, 1, 0, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET5, 0, 0, 1, 200, 0, 0, 0, 1, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_ISOTROPIC, PRESET6, 50, 0, 1, 200, 10, 0, 1, 200, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOMETRIC, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIMETRIC, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_LOENGLISH, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_HIENGLISH, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET0, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET1, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET2, 75, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET3, 0, 180, IGNORE, IGNORE, 120, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET4, 0, 0, IGNORE, IGNORE, 50, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET5, 0, 0, IGNORE, IGNORE, 0, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+    { __LINE__, TRUE, 0xDEADBEEF, TRUE, MM_TWIPS, PRESET6, 50, 0, IGNORE, IGNORE, 10, 0, DISPLAY_SIZE, NEGA_DISPLAY_SIZE, { 100, 150 }, { CALC_VALUE_3, CALC_VALUE_3 } },
+};
+static const size_t s_transformed_entries_count = _countof(s_transformed_entries);
+
+static void SetXForm1(XFORM *pxform)
+{
+    pxform->eM11 = 1;
+    pxform->eM12 = 0;
+    pxform->eM21 = 0;
+    pxform->eM22 = 1;
+    pxform->eDx = 314;
+    pxform->eDy = -99;
+}
+
+static void SetXForm2(XFORM *pxform)
+{
+    pxform->eM11 = 2;
+    pxform->eM12 = 0;
+    pxform->eM21 = 0;
+    pxform->eM22 = 3;
+    pxform->eDx = 0;
+    pxform->eDy = 0;
+}
+
+static void DoTestEntry(HDC hDC, const TEST_ENTRY *entry)
+{
+    POINT pt, ptWnd, ptView;
+    SIZE siz, sizWnd, sizView;
+    INT ret;
+
+    SetMapMode(hDC, entry->nMapMode);
+
+    ret = SetWindowOrgEx(hDC, entry->preset.xWnd, entry->preset.yWnd, NULL);
+    ok(ret == TRUE, "Line %d: SetWindowOrgEx failed\n", entry->lineno);
+
+    ret = SetWindowExtEx(hDC, entry->preset.cxWnd, entry->preset.cyWnd, NULL);
+    ok(ret == entry->bWndExt, "Line %d: SetWindowExtEx() expected %d, was %d\n", entry->lineno, entry->bWndExt, ret);
+
+    ret = SetViewportOrgEx(hDC, entry->preset.xView, entry->preset.yView, NULL);
+    ok(ret == TRUE, "Line %d: SetViewportOrgEx failed\n", entry->lineno);
+
+    ret = SetViewportExtEx(hDC, entry->preset.cxView, entry->preset.cyView, NULL);
+    ok(ret == TRUE, "Line %d: SetViewportExtEx failed\n", entry->lineno);
+
+    ok(GetWindowOrgEx(hDC, &pt) == TRUE, "Line %d: GetWindowOrgEx failed\n", entry->lineno);
+    ptWnd = pt;
+    ok(GetWindowExtEx(hDC, &siz) == TRUE, "Line %d: GetWindowExtEx failed\n", entry->lineno);
+    sizWnd = siz;
+
+    ok(pt.x == entry->xWndOut && pt.y == entry->yWndOut,
+       "Line %d: Window org expected (%ld, %ld), was (%ld, %ld)\n",
+        entry->lineno, entry->xWndOut, entry->yWndOut, pt.x, pt.y);
+
+    if (entry->cxWndOut == DISPLAY_SIZE || entry->cxWndOut == NEGA_DISPLAY_SIZE)
+    {
+        LONG cx = GetDeviceCaps(hDC, HORZRES);
+        LONG cy = GetDeviceCaps(hDC, VERTRES);
+        if (entry->cxWndOut == NEGA_DISPLAY_SIZE)
+            cx = -cx;
+        if (entry->cyWndOut == NEGA_DISPLAY_SIZE)
+            cy = -cy;
+        ok(siz.cx == cx && siz.cy == cy,
+           "Line %d: Window ext expected display size (%ld, %ld), was (%ld, %ld)\n",
+            entry->lineno, cx, cy, siz.cx, siz.cy);
+    }
+    else if (entry->cxWndOut != IGNORE)
+    {
+        ok(siz.cx == entry->cxWndOut && siz.cy == entry->cyWndOut,
+           "Line %d: Window ext expected (%ld, %ld), was (%ld, %ld)\n",
+            entry->lineno, entry->cxWndOut, entry->cyWndOut, siz.cx, siz.cy);
+    }
+
+    ok(GetViewportOrgEx(hDC, &pt) == TRUE, "Line %d: GetViewportOrgEx failed\n", entry->lineno);
+    ptView = pt;
+    ok(GetViewportExtEx(hDC, &siz) == TRUE, "Line %d: GetViewportExtEx failed\n", entry->lineno);
+    sizView = siz;
+
+    ok(pt.x == entry->xViewOut && pt.y == entry->yViewOut,
+       "Line %d: Viewport org expected (%ld, %ld), was (%ld, %ld)\n",
+        entry->lineno, entry->xViewOut , entry->yViewOut, pt.x, pt.y);
+
+    if (entry->cxViewOut == DISPLAY_SIZE || entry->cxViewOut == NEGA_DISPLAY_SIZE)
+    {
+        LONG cx = GetDeviceCaps(hDC, HORZRES);
+        LONG cy = GetDeviceCaps(hDC, VERTRES);
+        if (entry->cxViewOut == NEGA_DISPLAY_SIZE)
+            cx = -cx;
+        if (entry->cyViewOut == NEGA_DISPLAY_SIZE)
+            cy = -cy;
+        ok(siz.cx == cx && siz.cy == cy,
+           "Line %d: Viewport ext expected display size (%ld, %ld), was (%ld, %ld)\n",
+            entry->lineno, cx, cy, siz.cx, siz.cy);
+    }
+    else if (entry->cxViewOut != IGNORE)
+    {
+        ok(siz.cx == entry->cxViewOut && siz.cy == entry->cyViewOut,
+           "Line %d: Viewport ext expected (%ld, %ld), was (%ld, %ld)\n",
+            entry->lineno, entry->cxViewOut, entry->cyViewOut, siz.cx, siz.cy);
+    }
+
+    pt = entry->ptSrc;
+
+    SetLastError(0xDEADBEEF);
+    ret = LPtoDP(hDC, &pt, 1);
+    ok(ret == entry->ret, "Line %d: LPtoDP() expected %d, was %d\n", entry->lineno, entry->ret, ret);
+
+    ok(GetLastError() == entry->error, "Line %d: GetLastError() expected %ld, was %ld\n",
+       entry->lineno, entry->error, GetLastError());
+
+    if (entry->ptDest.x == CALC_VALUE_1)
+    {
+        LONG x = MulDiv(entry->ptSrc.x - ptWnd.x, sizView.cx, sizWnd.cx) + ptView.x;
+        LONG y = MulDiv(entry->ptSrc.y - ptWnd.y, sizView.cy, sizWnd.cy) + ptView.y;
+        // TODO: make more accurate
+        ok(labs(pt.x - x) <= 1 && labs(pt.y - y) <= 1,
+           "Line %d: Dest expected (%ld, %ld), was (%ld, %ld)\n",
+           entry->lineno, x, y, pt.x, pt.y);
+    }
+    else if (entry->ptDest.x == CALC_VALUE_2)
+    {
+        XFORM xform;
+        LONG x, y;
+        SetXForm1(&xform);
+        x = (LONG)((xform.eM11 * entry->ptSrc.x + xform.eM12 * entry->ptSrc.y) + xform.eDx);
+        y = (LONG)((xform.eM21 * entry->ptSrc.x + xform.eM22 * entry->ptSrc.y) + xform.eDy);
+        x = MulDiv(x - ptWnd.x, sizView.cx, sizWnd.cx) + ptView.x;
+        y = MulDiv(y - ptWnd.y, sizView.cy, sizWnd.cy) + ptView.y;
+        // TODO: make more accurate
+        ok(labs(pt.x - x) <= 1 && labs(pt.y - y) <= 1,
+           "Line %d: Dest expected (%ld, %ld), was (%ld, %ld)\n",
+           entry->lineno, x, y, pt.x, pt.y);
+    }
+    else if (entry->ptDest.x == CALC_VALUE_3)
+    {
+        XFORM xform;
+        LONG x, y;
+        SetXForm2(&xform);
+        x = (LONG)((xform.eM11 * entry->ptSrc.x + xform.eM12 * entry->ptSrc.y) + xform.eDx);
+        y = (LONG)((xform.eM21 * entry->ptSrc.x + xform.eM22 * entry->ptSrc.y) + xform.eDy);
+        x = MulDiv(x - ptWnd.x, sizView.cx, sizWnd.cx) + ptView.x;
+        y = MulDiv(y - ptWnd.y, sizView.cy, sizWnd.cy) + ptView.y;
+        // TODO: make more accurate
+        ok(labs(pt.x - x) <= 2 && labs(pt.y - y) <= 2,
+           "Line %d: Dest expected (%ld, %ld), was (%ld, %ld)\n",
+           entry->lineno, x, y, pt.x, pt.y);
+    }
+    else if (entry->ptDest.x != IGNORE)
+    {
+        ok(pt.x == entry->ptDest.x && pt.y == entry->ptDest.y,
+           "Line %d: Dest expected (%ld, %ld), was (%ld, %ld)\n",
+           entry->lineno, entry->ptDest.x, entry->ptDest.y, pt.x, pt.y);
+    }
+}
 
-void Test_LPtoDP_Params()
+START_TEST(LPtoDP)
 {
-    HDC hdc;
+    size_t i;
     POINT apt[2];
+    XFORM xform;
 
-    apt[0].x = 0;
-    apt[0].y = 0;
-    apt[1].x = -1000;
-    apt[1].y = 1000;
+    HDC hDC = CreateCompatibleDC(NULL);
+    ok(hDC != NULL, "hDC is NULL\n");
 
-    SetLastError(ERROR_SUCCESS);
+    SetLastError(0xDEADBEEF);
     ok_int(LPtoDP(NULL, NULL, 0), 1);
-    ok_err(ERROR_SUCCESS);
+    ok_err(0xDEADBEEF);
 
     ok_int(LPtoDP(NULL, NULL, -1), 1);
-    ok_err(ERROR_SUCCESS);
+    ok_err(0xDEADBEEF);
 
     ok_int(LPtoDP(NULL, INVALID_POINTER, -1), 1);
-    ok_err(ERROR_SUCCESS);
+    ok_err(0xDEADBEEF);
 
     ok_int(LPtoDP(NULL, NULL, 2), 0);
     ok_err(ERROR_INVALID_PARAMETER);
 
-    SetLastError(ERROR_SUCCESS);
+    SetLastError(0xDEADBEEF);
     ok_int(LPtoDP(NULL, apt, 2), 0);
     ok_err(ERROR_INVALID_PARAMETER);
 
-    SetLastError(ERROR_SUCCESS);
+    SetLastError(0xDEADBEEF);
     ok_int(LPtoDP(NULL, apt, 0), 1);
-    ok_err(ERROR_SUCCESS);
+    ok_err(0xDEADBEEF);
 
-    SetLastError(ERROR_SUCCESS);
+    SetLastError(0xDEADBEEF);
     ok_int(LPtoDP(NULL, apt, -2), 1);
-    ok_err(ERROR_SUCCESS);
+    ok_err(0xDEADBEEF);
 
-    SetLastError(ERROR_SUCCESS);
+    SetLastError(0xDEADBEEF);
     ok_int(LPtoDP((HDC)-4, apt, -2), 1);
-    ok_err(ERROR_SUCCESS);
-
-    hdc = GetDC(0);
-    SetLastError(ERROR_SUCCESS);
-    ok_int(LPtoDP(hdc, NULL, 2), 1);
-    ok_err(ERROR_SUCCESS);
-
-    hdc = GetDC(0);
-    SetLastError(ERROR_SUCCESS);
-    ok_int(LPtoDP(hdc, INVALID_POINTER, 2), 1);
-    ok_err(ERROR_SUCCESS);
-
-
-    ReleaseDC(0, hdc);
-}
-
-static void GetExtent(HDC hdc, SIZE *psizWnd, SIZE *psizView)
-{
-    GetWindowExtEx(hdc, psizWnd);
-    //trace("*psizWnd: (%ld, %ld)\n", psizWnd->cx, psizWnd->cy);
-
-    GetViewportExtEx(hdc, psizView);
-    //trace("*psizView: (%ld, %ld)\n", psizView->cx, psizView->cy);
-}
-
-void Test_LPtoDP()
-{
-    HDC hdc;
-    POINT apt[2];
-    XFORM xform;
-    LONG lLogPixelsX, lLogPixelsY;
-    SIZE sizWnd, sizView;
-    LONG xLow, yLow, xHigh, yHigh;
-
-    hdc = CreateCompatibleDC(NULL);
-    lLogPixelsX = GetDeviceCaps(hdc, LOGPIXELSX);
-    lLogPixelsY = GetDeviceCaps(hdc, LOGPIXELSY);
-    trace("lLogPixelsX: %ld\n", lLogPixelsX);
-    trace("lLogPixelsY: %ld\n", lLogPixelsY);
-
-//#define MULDIV(a, b, c) (((a) * (b)) / (c))
-#define MULDIV(a, b, c) MulDiv((a), (b), (c))
-
-    // MM_TEXT
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    SetMapMode(hdc, MM_TEXT);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(sizWnd.cx, 1);
-    ok_long(sizWnd.cy, 1);
-    ok_long(sizView.cx, 1);
-    ok_long(sizView.cy, 1);
-    ok_long(apt[0].x, 100);
-    ok_long(apt[0].y, 256);
-    ok_long(apt[1].x, -1000);
-    ok_long(apt[1].y, 1000);
-
-    // MM_LOMETRIC
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    SetMapMode(hdc, MM_LOMETRIC);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx));
-    ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx));
-    ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy));
-    xLow = apt[0].x;
-    yLow = apt[0].y;
-
-    // MM_HIMETRIC
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    SetMapMode(hdc, MM_HIMETRIC);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    //ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx));
-    ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy));
-    //ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx));
-    ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy));
-    xHigh = apt[0].x;
-    yHigh = apt[0].y;
-    ok(labs(xHigh) <= labs(xLow) / 9 && labs(xLow) / 11 <= labs(xHigh), "%ld, %ld\n", xLow, xHigh);
-    ok(labs(yHigh) <= labs(yLow) / 9 && labs(yLow) / 11 <= labs(yHigh), "%ld, %ld\n", yLow, yHigh);
-
-    // MM_LOENGLISH
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    SetMapMode(hdc, MM_LOENGLISH);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx));
-    ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx));
-    ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy));
-    xLow = apt[0].x;
-    yLow = apt[0].y;
-
-    // MM_HIENGLISH
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    SetMapMode(hdc, MM_HIENGLISH);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx));
-    ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx));
-    ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy));
-    xHigh = apt[0].x;
-    yHigh = apt[0].y;
-    ok(labs(xHigh) <= labs(xLow) / 9 && labs(xLow) / 11 <= labs(xHigh), "%ld, %ld\n", xLow, xHigh);
-    ok(labs(yHigh) <= labs(yLow) / 9 && labs(yLow) / 11 <= labs(yHigh), "%ld, %ld\n", yLow, yHigh);
-
-    // MM_TWIPS
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    SetMapMode(hdc, MM_TWIPS);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx));
-    ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx));
-    ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy));
-
-    SetGraphicsMode(hdc, GM_ADVANCED);
-    SetMapMode(hdc, MM_ANISOTROPIC);
-
-    xform.eM11 = 1.;
-    xform.eM12 = 0.;
-    xform.eM21 = 0.;
-    xform.eM22 = 1.;
-    xform.eDx = 2.;
-    xform.eDy = 1.;
-    ok_int(SetWorldTransform(hdc, &xform), 1);
-
-    // eDx == 2, eDy == 1
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, MULDIV(100 + (LONG)xform.eDx, sizView.cx, sizWnd.cx));
-    ok_long(apt[0].y, MULDIV(256 + (LONG)xform.eDy, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].x, MULDIV(-1000 - (LONG)xform.eDx, sizView.cx, sizWnd.cx));
-    ok_long(apt[1].y, MULDIV(1000 + (LONG)xform.eDy, sizView.cy, sizWnd.cy));
-
-    // eM11 == 0.0000001
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    xform.eM11 = 0.0000001;
-    xform.eDx = 0.;
-    xform.eDy = 0.;
-    ok_int(SetWorldTransform(hdc, &xform), 1);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, 0);
-    ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].x, 0);
-    ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy));
-
-    // eM11 == 0.5
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    xform.eM11 = 0.5;
-    xform.eDx = 0.;
-    xform.eDy = 0.;
-    ok_int(SetWorldTransform(hdc, &xform), 1);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx * 2));
-    ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx * 2));
-    ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy));
-
-    // eM11 == 1.164153218404873e-10
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    xform.eM11 = 1.164153218404873e-10;
-    xform.eDx = 0.;
-    xform.eDy = 0.;
-    ok_int(SetWorldTransform(hdc, &xform), 1);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, 0);
-    ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].x, 0);
-    ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy));
-
-    // eM11 == 2.328306437080797e-10
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    xform.eM11 = 2.328306437080797e-10;
-    xform.eM22 = 1.;
-    xform.eDx = 0.;
-    xform.eDy = 0.;
-    ok_int(SetWorldTransform(hdc, &xform), 1);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, 0);
-    ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].x, 0);
-    ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy));
-
-    // eM22 == 2.328306437080797e-10
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    xform.eM11 = 1.;
-    xform.eM22 = 2.328306437080797e-10;
-    xform.eDx = 0.;
-    xform.eDy = 0.;
-    ok_int(SetWorldTransform(hdc, &xform), 1);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    //ok_long(apt[0].x, MULDIV(100, sizView.cy, sizWnd.cy));
-    ok_long(apt[0].y, 0);
-    //ok_long(apt[1].x, MULDIV(-1000, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].y, 0);
-
-    // eM22 == 1.164153218404873e-10
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    xform.eM11 = 1.;
-    xform.eM22 = 1.164153218404873e-10;
-    xform.eDx = 0.;
-    xform.eDy = 0.;
-    ok_int(SetWorldTransform(hdc, &xform), 1);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    //ok_long(apt[0].x, MULDIV(100, sizView.cy, sizWnd.cy));
-    ok_long(apt[0].y, 0);
-    //ok_long(apt[1].x, MULDIV(-1000, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].y, 0);
-
-    // eM11 == 2.328306437080797e-10, eM22 == 2.328306437080797e-10
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    xform.eM11 = 2.328306437080797e-10;
-    xform.eM22 = 2.328306437080797e-10;
-    xform.eDx = 0.;
-    xform.eDy = 0.;
-    ok_int(SetWorldTransform(hdc, &xform), 1);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, 0);
-    ok_long(apt[0].y, 0);
-    ok_long(apt[1].x, 0);
-    ok_long(apt[1].y, 0);
-
-    // eM11 == 1.164153218404873e-10, eM22 == 1.164153218404873e-10
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    xform.eM11 = 1.164153218404873e-10;
-    xform.eM22 = 1.164153218404873e-10;
-    xform.eDx = 0.;
-    xform.eDy = 0.;
-    ok_int(SetWorldTransform(hdc, &xform), 1);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, 0);
-    ok_long(apt[0].y, 0);
-    ok_long(apt[1].x, 0);
-    ok_long(apt[1].y, 0);
-
-    // eM11 == 0.0000001
-    apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
-    xform.eM11 = 0.0000001;
-    xform.eM22 = 1.0;
-    ok_int(SetWorldTransform(hdc, &xform), 1);
-    GetExtent(hdc, &sizWnd, &sizView);
-    ok_int(LPtoDP(hdc, apt, 2), 1);
-    ok_long(apt[0].x, 0);
-    ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy));
-    ok_long(apt[1].x, 0);
-    ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy));
-
-    DeleteDC(hdc);
-}
-
-START_TEST(LPtoDP)
-{
-    Test_LPtoDP_Params();
-    Test_LPtoDP();
+    ok_err(0xDEADBEEF);
+
+    SetLastError(0xDEADBEEF);
+    ok_int(LPtoDP(hDC, NULL, 2), 1);
+    ok_err(0xDEADBEEF);
+
+    SetLastError(0xDEADBEEF);
+    ok_int(LPtoDP(hDC, INVALID_POINTER, 2), 1);
+    ok_err(0xDEADBEEF);
+
+    SetGraphicsMode(hDC, GM_COMPATIBLE);
+    ModifyWorldTransform(hDC, NULL, MWT_IDENTITY);
+
+    for (i = 0; i < s_entries_count; ++i)
+    {
+        DoTestEntry(hDC, &s_entries[i]);
+    }
+
+    SetGraphicsMode(hDC, GM_ADVANCED);
+    ModifyWorldTransform(hDC, NULL, MWT_IDENTITY);
+
+    for (i = 0; i < s_entries_count; ++i)
+    {
+        DoTestEntry(hDC, &s_entries[i]);
+    }
+
+    SetXForm1(&xform);
+    SetGraphicsMode(hDC, GM_ADVANCED);
+    SetWorldTransform(hDC, &xform);
+    for (i = 0; i < s_shifted_entries_count; ++i)
+    {
+        DoTestEntry(hDC, &s_shifted_entries[i]);
+    }
+
+    SetXForm2(&xform);
+    SetGraphicsMode(hDC, GM_ADVANCED);
+    SetWorldTransform(hDC, &xform);
+    for (i = 0; i < s_transformed_entries_count; ++i)
+    {
+        DoTestEntry(hDC, &s_transformed_entries[i]);
+    }
+
+    DeleteDC(hDC);
 }