Author: mjansen
Date: Thu Aug  4 19:15:21 2016
New Revision: 72110

URL: http://svn.reactos.org/svn/reactos?rev=72110&view=rev
Log:
[ATL][ATL_APITEST] Add implementation + tests for most functions from CPoint, 
CSize, CRect. CORE-11747 #resolve
Not all functions are implemented, the ones that are not implemented are left 
in a comment in the header.

Added:
    trunk/reactos/sdk/lib/atl/atltypes.h   (with props)
    trunk/rostests/apitests/atl/atltypes.cpp   (with props)
Modified:
    trunk/rostests/apitests/atl/CMakeLists.txt
    trunk/rostests/apitests/atl/testlist.c

Added: trunk/reactos/sdk/lib/atl/atltypes.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/atl/atltypes.h?rev=72110
==============================================================================
--- trunk/reactos/sdk/lib/atl/atltypes.h        (added)
+++ trunk/reactos/sdk/lib/atl/atltypes.h        [iso-8859-1] Thu Aug  4 
19:15:21 2016
@@ -0,0 +1,566 @@
+/*
+ * ReactOS ATL
+ *
+ * Copyright 2016 Mark Jansen
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  
USA
+ */
+
+#pragma once
+
+
+class CSize;
+class CRect;
+
+
+class CPoint : public tagPOINT
+{
+public:
+
+    CPoint() throw()
+    {
+        x = y = 0;
+    }
+
+    CPoint(int initX, int initY) throw()
+    {
+        x = initX;
+        y = initY;
+    }
+
+    CPoint(POINT initPt) throw()
+    {
+        *((POINT*)this) = initPt;
+    }
+
+    CPoint(SIZE initSize) throw()
+    {
+        *((SIZE*)this) = initSize;
+    }
+
+    CPoint(LPARAM dwPoint) throw()
+    {
+        x = LOWORD(dwPoint);
+        y = HIWORD(dwPoint);
+    }
+
+    void Offset(int xOffset, int yOffset) throw()
+    {
+        x += xOffset;
+        y += yOffset;
+    }
+
+    void Offset(POINT point) throw()
+    {
+        Offset(point.x, point.y);
+    }
+
+    void Offset(SIZE size) throw()
+    {
+        Offset(size.cx, size.cy);
+    }
+
+    BOOL operator==(POINT point) const throw()
+    {
+        return (x == point.x && y == point.y);
+    }
+
+    BOOL operator!=(POINT point) const throw()
+    {
+        return !(*this == point);
+    }
+
+    void operator+=(SIZE size) throw()
+    {
+        Offset(size);
+    }
+
+    void operator+=(POINT point) throw()
+    {
+        Offset(point);
+    }
+
+    void operator-=(SIZE size) throw()
+    {
+        Offset(-size.cx, -size.cy);
+    }
+
+    void operator-=(POINT point) throw()
+    {
+        Offset(-point.x, -point.y);
+    }
+
+    CPoint operator+(SIZE size) const throw()
+    {
+        return CPoint(x + size.cx, y + size.cy);
+    }
+
+    CPoint operator+(POINT point) const throw()
+    {
+        return CPoint(x + point.x, y + point.y);
+    }
+
+    CRect operator+(const RECT* lpRect) const throw();
+
+    CSize operator-(POINT point) const throw();
+
+    CPoint operator-(SIZE size) const throw()
+    {
+        return CPoint(x - size.cx, y - size.cy);
+    }
+
+    CRect operator-(const RECT* lpRect) const throw();
+
+    CPoint operator-() const throw()
+    {
+        return CPoint(-x, -y);
+    }
+};
+
+class CSize : public tagSIZE
+{
+public:
+    CSize() throw()
+    {
+        cx = cy = 0;
+    }
+
+    CSize(int initCX, int initCY) throw()
+    {
+        cx = initCX;
+        cy = initCY;
+    }
+
+    CSize(SIZE initSize) throw()
+    {
+        *((SIZE*)this) = initSize;
+    }
+
+    CSize(POINT initPt) throw()
+    {
+        *((POINT*)this) = initPt;
+    }
+
+    CSize(DWORD dwSize) throw()
+    {
+        cx = LOWORD(dwSize);
+        cy = HIWORD(dwSize);
+    }
+
+    BOOL operator==(SIZE size) const throw()
+    {
+        return (size.cx == cx && size.cy == cy);
+    }
+
+    BOOL operator!=(SIZE size) const throw()
+    {
+        return !(*this == size);
+    }
+
+    void operator+=(SIZE size) throw()
+    {
+        cx += size.cx;
+        cy += size.cy;
+    }
+
+    void operator-=(SIZE size) throw()
+    {
+        cx -= size.cx;
+        cy -= size.cy;
+    }
+
+    CSize operator+(SIZE size) const throw()
+    {
+        return CSize(cx + size.cx, cy + size.cy);
+    }
+
+    CPoint operator+(POINT point) const throw()
+    {
+        return CPoint(cx + point.x, cy + point.y);
+    }
+
+    CRect operator+(const RECT* lpRect) const throw();
+
+    CSize operator-(SIZE size) const throw()
+    {
+        return CSize(cx - size.cx, cy - size.cy);
+    }
+
+    CPoint operator-(POINT point) const throw()
+    {
+        return CPoint(cx - point.x, cy - point.y);
+    }
+
+    CRect operator-(const RECT* lpRect) const throw();
+
+    CSize operator-() const throw()
+    {
+        return CSize(-cx, -cy);
+    }
+};
+
+
+CSize CPoint::operator-(POINT point) const throw()
+{
+    return CSize(x - point.x, y - point.y);
+}
+
+
+class CRect : public tagRECT
+{
+public:
+    CRect() throw()
+    {
+        left = top = right = bottom = 0;
+    }
+
+    CRect(int l, int t, int r, int b) throw()
+    {
+        left = l;
+        top = t;
+        right = r;
+        bottom = b;
+    }
+
+    CRect(const RECT& srcRect) throw()
+    {
+        left = srcRect.left;
+        top = srcRect.top;
+        right = srcRect.right;
+        bottom = srcRect.bottom;
+    }
+
+    CRect(LPCRECT lpSrcRect) throw()
+    {
+        left = lpSrcRect->left;
+        top = lpSrcRect->top;
+        right = lpSrcRect->right;
+        bottom = lpSrcRect->bottom;
+    }
+
+    CRect(POINT point, SIZE size) throw()
+    {
+        left = point.x;
+        top = point.y;
+        right = point.x + size.cx;
+        bottom = point.y + size.cy;
+    }
+
+    CRect(POINT topLeft, POINT bottomRight) throw()
+    {
+        left = topLeft.x;
+        top = topLeft.y;
+        right = bottomRight.x;
+        bottom = bottomRight.y;
+    }
+
+    CPoint& BottomRight() throw()
+    {
+        return ((CPoint*)this)[1];
+    }
+
+    const CPoint& BottomRight() const throw()
+    {
+        return ((const CPoint*)this)[1];
+    }
+
+    CPoint CenterPoint() const throw()
+    {
+        return CPoint(left + (Width() >> 1), top + (Height() >> 1));
+    }
+
+    void CopyRect(LPCRECT lpSrcRect) throw()
+    {
+        ::CopyRect(this, lpSrcRect);
+    }
+
+    void DeflateRect(int x, int y) throw()
+    {
+        ::InflateRect(this, -x, -y);
+    }
+
+    void DeflateRect(SIZE size) throw()
+    {
+        ::InflateRect(this, -size.cx, -size.cy);
+    }
+
+    void DeflateRect(LPCRECT lpRect) throw()
+    {
+        DeflateRect(lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
+    }
+
+    void DeflateRect(int l, int t, int r, int b) throw()
+    {
+        left += l;
+        top += t;
+        right -= r;
+        bottom -= b;
+    }
+
+    BOOL EqualRect(LPCRECT lpRect) const throw()
+    {
+        return ::EqualRect(this, lpRect);
+    }
+
+
+    int Height() const throw()
+    {
+        return bottom - top;
+    }
+
+    void InflateRect(int x, int y) throw()
+    {
+        ::InflateRect(this, x, y);
+    }
+
+    void InflateRect(SIZE size) throw()
+    {
+        ::InflateRect(this, size.cx, size.cy);
+    }
+
+    void InflateRect(LPCRECT lpRect) throw()
+    {
+        InflateRect(lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
+    }
+
+    void InflateRect(int l, int t, int r, int b) throw()
+    {
+        left -= l;
+        top -= t;
+        right += r;
+        bottom += b;
+    }
+
+    BOOL IntersectRect(LPCRECT lpRect1, LPCRECT lpRect2) throw()
+    {
+        return ::IntersectRect(this, lpRect1, lpRect2);
+    }
+
+    BOOL IsRectEmpty() const throw()
+    {
+        return ::IsRectEmpty(this);
+    }
+
+    BOOL IsRectNull() const throw()
+    {
+        return (left == 0 && right == 0 &&
+            top == 0 && bottom == 0);
+    }
+
+    //void MoveToX(int x) throw()
+    //void MoveToXY(int x, int y) throw()
+    //void MoveToXY(POINT point) throw()
+    //void MoveToY(int y) throw()
+    //void NormalizeRect() throw()
+
+    void OffsetRect(int x, int y) throw()
+    {
+        ::OffsetRect(this, x, y);
+    }
+
+    void OffsetRect(POINT point) throw()
+    {
+        ::OffsetRect(this, point.x, point.y);
+    }
+
+    void OffsetRect(SIZE size) throw()
+    {
+        ::OffsetRect(this, size.cx, size.cy);
+    }
+
+    //BOOL PtInRect(POINT point) const throw()
+    //void SetRect(int x1, int y1, int x2, int y2) throw()
+    //void SetRectEmpty() throw()
+    //CSize Size() const throw()
+    //BOOL SubtractRect(LPCRECT lpRectSrc1, LPCRECT lpRectSrc2) throw()
+
+    CPoint& TopLeft() throw()
+    {
+        return ((CPoint*)this)[0];
+    }
+
+    const CPoint& TopLeft() const throw()
+    {
+        return ((const CPoint*)this)[0];
+    }
+
+    BOOL UnionRect(LPCRECT lpRect1, LPCRECT lpRect2) throw()
+    {
+        return ::UnionRect(this, lpRect1, lpRect2);
+    }
+
+    int Width() const throw()
+    {
+        return right - left;
+    }
+
+
+    BOOL operator==(const RECT& rect) const throw()
+    {
+        return (left == rect.left &&
+            top == rect.top &&
+            right == rect.right &&
+            bottom == rect.bottom);
+    }
+
+    BOOL operator!=(const RECT& rect) const throw()
+    {
+        return !(*this == rect);
+    }
+
+    void operator=(const RECT& srcRect) throw()
+    {
+        left = srcRect.left;
+        top = srcRect.top;
+        right = srcRect.right;
+        bottom = srcRect.bottom;
+    }
+
+    void operator+=(POINT point) throw()
+    {
+        OffsetRect(point);
+    }
+
+    void operator+=(SIZE size) throw()
+    {
+        OffsetRect(size);
+    }
+
+    void operator+=(LPCRECT lpRect) throw()
+    {
+        InflateRect(lpRect);
+    }
+
+    void operator-=(POINT point) throw()
+    {
+        OffsetRect(-point.x, -point.y);
+    }
+
+    void operator-=(SIZE size) throw()
+    {
+        OffsetRect(-size.cx, -size.cy);
+    }
+
+    void operator-=(LPCRECT lpRect) throw()
+    {
+        DeflateRect(lpRect);
+    }
+
+
+    CRect operator+(POINT point) const throw()
+    {
+        CRect r(this);
+        r.OffsetRect(point);
+        return r;
+    }
+
+    CRect operator+(LPCRECT lpRect) const throw()
+    {
+        CRect r(this);
+        r.InflateRect(lpRect);
+        return r;
+    }
+
+    CRect operator+(SIZE size) const throw()
+    {
+        CRect r(this);
+        r.OffsetRect(size);
+        return r;
+    }
+
+    CRect operator-(POINT point) const throw()
+    {
+        CRect r(this);
+        r.OffsetRect(-point.x, -point.y);
+        return r;
+    }
+
+    CRect operator-(SIZE size) const throw()
+    {
+        CRect r(this);
+        r.OffsetRect(-size.cx, -size.cy);
+        return r;
+    }
+
+    CRect operator-(LPCRECT lpRect) const throw()
+    {
+        CRect r(this);
+        r.DeflateRect(lpRect);
+        return r;
+    }
+
+    void operator&=(const RECT& rect) throw()
+    {
+        IntersectRect(this, &rect);
+    }
+
+    CRect operator&(const RECT& rect2) const throw()
+    {
+        CRect r;
+        r.IntersectRect(this, &rect2);
+        return r;
+    }
+
+    void operator|=(const RECT& rect) throw()
+    {
+        UnionRect(this, &rect);
+    }
+
+    CRect operator|(const RECT& rect2) const throw()
+    {
+        CRect r;
+        r.UnionRect(this, &rect2);
+        return r;
+    }
+
+    operator LPRECT() throw()
+    {
+        return this;
+    }
+
+    operator LPCRECT() const throw()
+    {
+        return this;
+    }
+};
+
+CRect CPoint::operator+(const RECT* lpRect) const throw()
+{
+    CRect r(lpRect);
+    r += *this;
+    return r;
+}
+
+CRect CPoint::operator-(const RECT* lpRect) const throw()
+{
+    CRect r(lpRect);
+    r -= *this;
+    return r;
+}
+
+CRect CSize::operator+(const RECT* lpRect) const throw()
+{
+    CRect r(lpRect);
+    r += *this;
+    return r;
+}
+
+CRect CSize::operator-(const RECT* lpRect) const throw()
+{
+    CRect r(lpRect);
+    r -= *this;
+    return r;
+}
+

Propchange: trunk/reactos/sdk/lib/atl/atltypes.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/rostests/apitests/atl/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/atl/CMakeLists.txt?rev=72110&r1=72109&r2=72110&view=diff
==============================================================================
--- trunk/rostests/apitests/atl/CMakeLists.txt  [iso-8859-1] (original)
+++ trunk/rostests/apitests/atl/CMakeLists.txt  [iso-8859-1] Thu Aug  4 
19:15:21 2016
@@ -4,6 +4,7 @@
 include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/atl)
 
 add_executable(atl_apitest
+    atltypes.cpp
     CComBSTR.cpp
     CComHeapPtr.cpp
     CString.cpp

Added: trunk/rostests/apitests/atl/atltypes.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/atl/atltypes.cpp?rev=72110
==============================================================================
--- trunk/rostests/apitests/atl/atltypes.cpp    (added)
+++ trunk/rostests/apitests/atl/atltypes.cpp    [iso-8859-1] Thu Aug  4 
19:15:21 2016
@@ -0,0 +1,538 @@
+/*
+ * PROJECT:         ReactOS api tests
+ * LICENSE:         LGPLv2.1+ - See COPYING.LIB in the top level directory
+ * PURPOSE:         Test for CPoint, CSize, CRect
+ * PROGRAMMER:      Mark Jansen
+ *
+ *                  Code based on MSDN samples regarding CPoint, CSize, CRect
+ */
+
+#include <apitest.h>
+#include <windows.h>
+#include <atltypes.h>
+
+
+#define ok_size(x, y) \
+    ok(x == y, "Wrong size, expected '%s' to equal '%s'\n", 
wine_dbgstr_size(&x), wine_dbgstr_size(&y))
+
+#define ok_point(x, y) \
+    ok(x == y, "Wrong point, expected '%s' to equal '%s'\n", 
wine_dbgstr_point(&x), wine_dbgstr_point(&y))
+#define nok_point(x, y) \
+    ok(x != y, "Wrong point, expected '%s' NOT to equal '%s'\n", 
wine_dbgstr_point(&x), wine_dbgstr_point(&y))
+
+#define ok_rect(x, y) \
+    ok(x == y, "Wrong rect, expected '%s' to equal '%s'\n", 
wine_dbgstr_rect(&x), wine_dbgstr_rect(&y))
+#define nok_rect(x, y) \
+    ok(x != y, "Wrong rect, expected '%s' to NOT equal '%s'\n", 
wine_dbgstr_rect(&x), wine_dbgstr_rect(&y))
+
+
+static void test_CSize()
+{
+    CSize empty;
+    ok(empty.cx == 0, "Expected cx to be 0, was %ld\n", empty.cx);
+    ok(empty.cy == 0, "Expected cy to be 0, was %ld\n", empty.cy);
+
+    CSize szPointA(10, 25);
+
+    SIZE sz;
+    sz.cx = 10;
+    sz.cy = 25;
+    CSize szPointB(sz);
+
+    POINT pt;
+    pt.x = 10;
+    pt.y = 25;
+    CSize szPointC(pt);
+
+    CPoint ptObject(10, 25);
+    CSize szPointD(ptObject);
+
+    DWORD dw = MAKELONG(10, 25);
+    CSize szPointE(dw);
+
+    ok_size(szPointA, szPointB);
+    ok_size(szPointB, szPointC);
+    ok_size(szPointC, szPointD);
+    ok_size(szPointD, szPointE);
+
+    ptObject = szPointA + pt;
+    CPoint res(20,50);
+    ok_point(ptObject, res);
+
+    ptObject = szPointA - pt;
+    res = CPoint(0, 0);
+    ok_point(ptObject, res);
+
+    CSize sz1(135, 135);
+    CSize sz2(135, 135);
+    ok_size(sz1, sz2);
+
+    sz1 = CSize(222, 222);
+    sz2 = CSize(111, 111);
+    ok(sz1 != sz2, "Wrong size, expected '%s' NOT to equal '%s'\n", 
wine_dbgstr_size(&sz1), wine_dbgstr_size(&sz2));
+
+    sz1 = CSize(100, 100);
+    sz2 = CSize(50, 25);
+    sz1 += sz2;
+
+    CSize szResult(150, 125);
+    ok_size(sz1, szResult);
+
+    sz1 = CSize(100, 100);
+    SIZE sz3;
+    sz3.cx = 50;
+    sz3.cy = 25;
+
+    sz1 += sz3;
+    ok_size(sz1, szResult);
+
+    sz1 = CSize(100, 100);
+    sz1 -= sz2;
+
+    szResult = CSize(50, 75);
+    ok_size(sz1, szResult);
+
+    sz3.cx = 50;
+    sz3.cy = 25;
+
+    sz1 = CSize(100, 100);
+    sz1 -= sz3;
+    ok_size(sz1, szResult);
+
+    sz1 = CSize(100, 100);
+    CSize szOut;
+    szOut = sz1 + sz2;
+
+    szResult = CSize(150, 125);
+    ok_size(szOut, szResult);
+
+    sz3.cx = 50;
+    sz3.cy = 25;
+
+    szOut = sz1 + sz3;
+    ok_size(szOut, szResult);
+
+    szOut = sz1 - sz2;
+
+    szResult = CSize(50, 75);
+    ok_size(szOut, szResult);
+
+    sz3.cx = 50;
+    sz3.cy = 25;
+
+    szOut = sz1 - sz3;
+    ok_size(szOut, szResult);
+
+    szResult = CSize(-50, -75);
+
+    szOut = -szOut;
+    ok_size(szOut, szResult);
+
+    RECT rc = { 1, 2, 3, 4 };
+
+    CRect rcres = sz1 + &rc;
+    CRect rcexp(101, 102, 103, 104);
+    ok_rect(rcexp, rcres);
+
+    rcres = sz1 - &rc;
+    rcexp = CRect(-99, -98, -97, -96);
+    ok_rect(rcexp, rcres);
+}
+
+
+static void test_CPoint()
+{
+    CPoint empty;
+
+    ok(empty.x == 0, "Expected x to be 0, was %ld\n", empty.x);
+    ok(empty.y == 0, "Expected y to be 0, was %ld\n", empty.y);
+
+    CPoint ptTopLeft(0, 0);
+    POINT ptHere;
+    ptHere.x = 35;
+    ptHere.y = 95;
+
+    CPoint ptMFCHere(ptHere);
+
+    SIZE sHowBig;
+    sHowBig.cx = 300;
+    sHowBig.cy = 10;
+
+    CPoint ptMFCBig(sHowBig);
+    DWORD dwSize;
+    dwSize = MAKELONG(35, 95);
+
+    CPoint ptFromDouble(dwSize);
+    ok_point(ptFromDouble, ptMFCHere);
+
+    CPoint ptStart(100, 100);
+    ptStart.Offset(35, 35);
+
+    CPoint ptResult(135, 135);
+    ok_point(ptStart, ptResult);
+
+    ptStart = CPoint(100, 100);
+    POINT pt;
+
+    pt.x = 35;
+    pt.y = 35;
+
+    ptStart.Offset(pt);
+    ok_point(ptStart, ptResult);
+
+    ptStart = CPoint(100, 100);
+    SIZE size;
+
+    size.cx = 35;
+    size.cy = 35;
+
+    ptStart.Offset(size);
+    ok_point(ptStart, ptResult);
+
+    CPoint ptFirst(256, 128);
+    CPoint ptTest(256, 128);
+    ok_point(ptFirst, ptTest);
+
+    pt.x = 256;
+    pt.y = 128;
+    ok_point(ptTest, pt);
+
+    ptTest = CPoint(111, 333);
+    nok_point(ptFirst, ptTest);
+
+    pt.x = 333;
+    pt.y = 111;
+    nok_point(ptTest, pt);
+
+    ptStart = CPoint(100, 100);
+    CSize szOffset(35, 35);
+
+    ptStart += szOffset;
+
+    ok_point(ptResult, ptStart);
+
+    ptStart = CPoint(100, 100);
+
+    ptStart += size;
+    ok_point(ptResult, ptStart);
+
+    ptStart = CPoint(100, 100);
+
+    ptStart -= szOffset;
+
+    ptResult = CPoint(65, 65);
+    ok_point(ptResult, ptStart);
+
+
+    ptStart = CPoint(100, 100);
+
+    ptStart -= size;
+    ok_point(ptResult, ptStart);
+
+    ptStart = CPoint(100, 100);
+    CPoint ptEnd;
+
+    ptEnd = ptStart + szOffset;
+
+    ptResult = CPoint(135, 135);
+    ok_point(ptResult, ptEnd);
+
+    ptEnd = ptStart + size;
+    ok_point(ptResult, ptEnd);
+
+    ptEnd = ptStart + pt;
+    ptResult = CPoint(433, 211);
+    ok_point(ptResult, ptEnd);
+
+    ptEnd = ptStart - szOffset;
+    ptResult = CPoint(65, 65);
+    ok_point(ptResult, ptEnd);
+
+    ptEnd = ptStart - size;
+    ok_point(ptResult, ptEnd);
+
+    szOffset = ptStart - pt;
+    CSize expected(-233, -11);
+    ok_size(szOffset, expected);
+
+    ptStart += pt;
+    ptResult = CPoint(433, 211);
+    ok_point(ptResult, ptStart);
+
+    ptStart -= pt;
+    ptResult = CPoint(100, 100);
+    ok_point(ptResult, ptStart);
+
+    ptTest = CPoint(35, 35);
+    ptTest = -ptTest;
+
+    CPoint ptNeg(-35, -35);
+    ok_point(ptTest, ptNeg);
+
+    RECT rc = { 1, 2, 3, 4 };
+
+    CRect rcres = ptStart + &rc;
+    CRect rcexp(101, 102, 103, 104);
+    ok_rect(rcexp, rcres);
+
+    rcres = ptStart - &rc;
+    rcexp = CRect(-99, -98, -97, -96);
+    ok_rect(rcexp, rcres);
+}
+
+
+static void test_CRect()
+{
+    CRect empty;
+    ok(empty.left == 0, "Expected left to be 0, was %ld\n", empty.left);
+    ok(empty.top == 0, "Expected top to be 0, was %ld\n", empty.top);
+    ok(empty.Width() == 0, "Expected Width to be 0, was %i\n", empty.Width());
+    ok(empty.Height() == 0, "Expected Height to be 0, was %i\n", 
empty.Height());
+
+    CRect rect(0, 0, 100, 50);
+    ok(rect.Width() == 100, "Expected Width to be 100, was %i\n", 
rect.Width());
+    ok(rect.Height() == 50, "Expected Height to be 50, was %i\n", 
rect.Height());
+
+    RECT sdkRect;
+    sdkRect.left = 0;
+    sdkRect.top = 0;
+    sdkRect.right = 100;
+    sdkRect.bottom = 50;
+
+    CRect rect2(sdkRect);
+    CRect rect3(&sdkRect);
+    ok_rect(rect2, rect);
+    ok_rect(rect3, rect);
+
+    CPoint pt(0, 0);
+    CSize sz(100, 50);
+    CRect rect4(pt, sz);
+    ok_rect(rect4, rect2);
+
+    CPoint ptBottomRight(100, 50);
+    CRect rect5(pt, ptBottomRight);
+    ok_rect(rect5, rect4);
+
+    rect = CRect(210, 150, 350, 900);
+    CPoint ptDown;
+
+    ptDown = rect.BottomRight();
+
+    pt = CPoint(350, 900);
+    ok_point(ptDown, pt);
+
+    rect2 = CRect(10, 10, 350, 350);
+    CPoint ptLow(180, 180);
+
+    rect2.BottomRight() = ptLow;
+
+    rect = CRect(10, 10, 180, 180);
+    ok_rect(rect2, rect);
+
+    pt = CPoint(95, 95);
+    CPoint pt2 = rect2.CenterPoint();
+    ok_point(pt2, pt);
+
+    pt2 = rect2.BottomRight();
+    pt = CPoint(180, 180);
+    ok_point(pt2, pt);
+
+    pt2 = rect2.TopLeft();
+    pt = CPoint(10, 10);
+    ok_point(pt2, pt);
+
+    rect2.TopLeft().Offset(3, 3);
+    rect3 = CRect(13, 13, 180, 180);
+    ok_rect(rect3, rect2);
+
+    CRect rectSource(35, 10, 125, 10);
+    CRect rectDest;
+
+    rectDest.CopyRect(&rectSource);
+
+    RECT rectSource2;
+    rectSource2.left = 0;
+    rectSource2.top = 0;
+    rectSource2.bottom = 480;
+    rectSource2.right = 640;
+
+    rectDest.CopyRect(&rectSource2);
+
+    rect = CRect(10, 10, 50, 50);
+
+    rect.DeflateRect(1, 2);
+
+    rect2 = CRect(11, 12, 49, 48);
+    ok_rect(rect2, rect);
+
+    rect2 = CRect(10, 10, 50, 50);
+    CRect rectDeflate(1, 2, 3, 4);
+
+    rect2.DeflateRect(&rectDeflate);
+    rect = CRect(11, 12, 47, 46);
+    ok_rect(rect2, rect);
+
+    rect2.DeflateRect(sz);
+    rect = CRect(111, 62, -53, -4);
+    ok_rect(rect2, rect);
+
+    rect2.OffsetRect(sz);
+    rect = CRect(211, 112, 47, 46);
+    ok_rect(rect2, rect);
+
+    CRect rect1(35, 150, 10, 25);
+    rect2 = CRect(35, 150, 10, 25);
+    rect3 = CRect(98, 999, 6, 3);
+
+    ok(rect1.EqualRect(rect2), "Expected EqualRect to return TRUE for %s, 
%s\n", wine_dbgstr_rect(&rect1), wine_dbgstr_rect(&rect2));
+    ok(!rect1.EqualRect(rect3), "Expected EqualRect to return FALSE for %s, 
%s\n", wine_dbgstr_rect(&rect1), wine_dbgstr_rect(&rect3));
+
+    RECT test;
+    test.left = 35;
+    test.top = 150;
+    test.right = 10;
+    test.bottom = 25;
+
+    ok(rect1.EqualRect(&test), "Expected EqualRect to return TRUE for %s, 
%s\n", wine_dbgstr_rect(&rect1), wine_dbgstr_rect(&test));
+
+    rect = test;
+    rect2 = CRect(35, 150, 10, 25);
+    ok_rect(rect, rect2);
+
+    rect = CRect(0, 0, 300, 300);
+    rect.InflateRect(50, 200);
+
+    rect2 = CRect(-50, -200, 350, 500);
+    ok_rect(rect, rect2);
+
+    rect.InflateRect(sz);
+    rect2 = CRect(-150, -250, 450, 550);
+    ok_rect(rect, rect2);
+
+    rect = CRect(20, 30, 80, 70);
+
+    int nHt = rect.Height();
+
+    ok(nHt == 40, "Expected nHt to be 40, was %i\n", nHt);
+
+    CRect rectOne(125, 0, 150, 200);
+    CRect rectTwo(0, 75, 350, 95);
+    CRect rectInter;
+
+    rectInter.IntersectRect(rectOne, rectTwo);
+
+    rect = CRect(125, 75, 150, 95);
+    ok_rect(rectInter, rect);
+
+    CRect rectInter2 = rectOne;
+    rectInter2 &= rectTwo;
+    rect = CRect(125, 75, 150, 95);
+    ok_rect(rectInter2, rect);
+
+    CRect rectNone(0, 0, 0, 0);
+    CRect rectSome(35, 50, 135, 150);
+
+    ok(rectNone.IsRectEmpty(), "Expected IsRectEmpty to return TRUE for %s\n", 
wine_dbgstr_rect(&rectNone));
+    ok(!rectSome.IsRectEmpty(), "Expected IsRectEmpty to return FALSE for 
%s\n", wine_dbgstr_rect(&rectSome));
+
+    CRect rectEmpty(35, 35, 35, 35);
+    ok(rectEmpty.IsRectEmpty(), "Expected IsRectEmpty to return TRUE for 
%s\n", wine_dbgstr_rect(&rectEmpty));
+
+    ok(rectNone.IsRectNull(), "Expected IsRectNull to return TRUE for %s\n", 
wine_dbgstr_rect(&rectNone));
+    ok(!rectSome.IsRectNull(), "Expected IsRectNull to return FALSE for %s\n", 
wine_dbgstr_rect(&rectSome));
+
+    CRect rectNotNull(0, 0, 35, 50);
+    ok(!rectNotNull.IsRectNull(), "Expected IsRectNull to return FALSE for 
%s\n", wine_dbgstr_rect(&rectNotNull));
+
+    rect1 = CRect(35, 150, 10, 25);
+    rect2 = CRect(35, 150, 10, 25);
+    rect3 = CRect(98, 999, 6, 3);
+
+    ok_rect(rect1, rect2);
+
+    test.left = 35;
+    test.top = 150;
+    test.right = 10;
+    test.bottom = 25;
+
+    ok_rect(rect1, test);
+
+    nok_rect(rect1, rect3);
+    nok_rect(rect3, test);
+
+    rect1 = CRect(100, 235, 200, 335);
+    pt = CPoint(35, 65);
+    rect2 = CRect(135, 300, 235, 400);
+
+    rect1 += pt;
+
+    ok_rect(rect1, rect2);
+
+    rect1 = CRect(100, 235, 200, 335);
+    rect2 = rect1 + pt;
+    CRect rectResult(135, 300, 235, 400);
+    ok_rect(rectResult, rect2);
+
+    rect2 = rect1 + &test;
+    rectResult = CRect(65, 85, 210, 360);
+    ok_rect(rectResult, rect2);
+
+    rect2 = rect1 - (LPCRECT)&test;
+    rectResult = CRect(135, 385, 190, 310);
+    ok_rect(rectResult, rect2);
+
+    rect2 = rect1 - pt;
+    rectResult = CRect(65, 170, 165, 270);
+
+    ok_rect(rect2, rectResult);
+
+    rect1 -= pt;
+    ok_rect(rect1, rectResult);
+
+    rect1 = CRect(100, 0, 200, 300);
+    rect2 = CRect(0, 100, 300, 200);
+
+    rect3 = rect1 & rect2;
+
+    rectResult = CRect(100, 100, 200, 200);
+    ok_rect(rectResult, rect3);
+
+    rect3 = rect1 | rect2;
+    rectResult = CRect(0, 0, 300, 300);
+    ok_rect(rectResult, rect3);
+
+    rect1 |= rect2;
+    ok_rect(rectResult, rect1);
+
+    rect1 += sz;
+    rectResult = CRect(100, 50, 400, 350);
+    ok_rect(rectResult, rect1);
+
+    rect1 += &test;
+    rectResult = CRect(65, -100, 410, 375);
+    ok_rect(rectResult, rect1);
+
+    rect1 -= sz;
+    rectResult = CRect(-35, -150, 310, 325);
+    ok_rect(rectResult, rect1);
+
+    rect1 -= &test;
+    rectResult = CRect(0, 0, 300, 300);
+    ok_rect(rectResult, rect1);
+
+    rect2 = rect1 + sz;
+    rectResult = CRect(100, 50, 400, 350);
+    ok_rect(rectResult, rect2);
+
+    rect2 = rect1 - sz;
+    rectResult = CRect(-100, -50, 200, 250);
+    ok_rect(rectResult, rect2);
+}
+
+
+START_TEST(atltypes)
+{
+    test_CSize();
+    test_CPoint();
+    test_CRect();
+}

Propchange: trunk/rostests/apitests/atl/atltypes.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/rostests/apitests/atl/testlist.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/atl/testlist.c?rev=72110&r1=72109&r2=72110&view=diff
==============================================================================
--- trunk/rostests/apitests/atl/testlist.c      [iso-8859-1] (original)
+++ trunk/rostests/apitests/atl/testlist.c      [iso-8859-1] Thu Aug  4 
19:15:21 2016
@@ -1,12 +1,14 @@
 #define STANDALONE
 #include <apitest.h>
 
+extern void func_atltypes(void);
 extern void func_CComBSTR(void);
 extern void func_CComHeapPtr(void);
 extern void func_CString(void);
 
 const struct test winetest_testlist[] =
 {
+    { "atltypes", func_atltypes },
     { "CComBSTR", func_CComBSTR },
     { "CComHeapPtr", func_CComHeapPtr },
     { "CString", func_CString },


Reply via email to