// tests.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <ddraw.h>
#include <dxfile.h>
#include <d3dx8.h>

inline void
display_error(const rt::hr_message &bang)
{
    std::tcout << bang.message() << std::endl;
}

static void
test_errors(const HRESULT *codes, UINT num_codes)
{
    int i;
    for (i = 0; i < num_codes; i++)
    {
        try
        {
            THR(codes[i]);
        }
        catch (rt::hr_message &bang)
        {
            display_error(bang);
        }
    }
}

static const HRESULT draw_codes[] =
{
    DDERR_ALREADYINITIALIZED,
    DDERR_CANNOTATTACHSURFACE,
    DDERR_CANNOTDETACHSURFACE,
    DDERR_CURRENTLYNOTAVAIL,
    DDERR_EXCEPTION,
    DDERR_HEIGHTALIGN,
    DDERR_INCOMPATIBLEPRIMARY,
    DDERR_INVALIDCAPS,
    DDERR_INVALIDCLIPLIST,
    DDERR_INVALIDMODE,
    DDERR_INVALIDOBJECT,
    DDERR_INVALIDPIXELFORMAT,
    DDERR_INVALIDRECT,
    DDERR_LOCKEDSURFACES,
    DDERR_NO3D,
    DDERR_NOALPHAHW,
    DDERR_NOSTEREOHARDWARE,
    DDERR_NOSURFACELEFT,
    DDERR_NOCLIPLIST,
    DDERR_NOCOLORCONVHW,
    DDERR_NOCOOPERATIVELEVELSET,
    DDERR_NOCOLORKEY,
    DDERR_NOCOLORKEYHW,
    DDERR_NODIRECTDRAWSUPPORT,
    DDERR_NOEXCLUSIVEMODE,
    DDERR_NOFLIPHW,
    DDERR_NOGDI,
    DDERR_NOMIRRORHW,
    DDERR_NOTFOUND,
    DDERR_NOOVERLAYHW,
    DDERR_OVERLAPPINGRECTS,
    DDERR_NORASTEROPHW,
    DDERR_NOROTATIONHW,
    DDERR_NOSTRETCHHW,
    DDERR_NOT4BITCOLOR,
    DDERR_NOT4BITCOLORINDEX,
    DDERR_NOT8BITCOLOR,
    DDERR_NOTEXTUREHW,
    DDERR_NOVSYNCHW,
    DDERR_NOZBUFFERHW,
    DDERR_NOZOVERLAYHW,
    DDERR_OUTOFCAPS,
    DDERR_OUTOFVIDEOMEMORY,
    DDERR_OVERLAYCANTCLIP,
    DDERR_OVERLAYCOLORKEYONLYONEACTIVE,
    DDERR_PALETTEBUSY,
    DDERR_COLORKEYNOTSET,
    DDERR_SURFACEALREADYATTACHED,
    DDERR_SURFACEALREADYDEPENDENT,
    DDERR_SURFACEBUSY,
    DDERR_CANTLOCKSURFACE,
    DDERR_SURFACEISOBSCURED,
    DDERR_SURFACELOST,
    DDERR_SURFACENOTATTACHED,
    DDERR_TOOBIGHEIGHT,
    DDERR_TOOBIGSIZE,
    DDERR_TOOBIGWIDTH,
    DDERR_UNSUPPORTEDFORMAT,
    DDERR_UNSUPPORTEDMASK,
    DDERR_INVALIDSTREAM,
    DDERR_VERTICALBLANKINPROGRESS,
    DDERR_WASSTILLDRAWING,
    DDERR_DDSCAPSCOMPLEXREQUIRED,
    DDERR_XALIGN,
    DDERR_INVALIDDIRECTDRAWGUID,
    DDERR_DIRECTDRAWALREADYCREATED,
    DDERR_NODIRECTDRAWHW,
    DDERR_PRIMARYSURFACEALREADYEXISTS,
    DDERR_NOEMULATION,
    DDERR_REGIONTOOSMALL,
    DDERR_CLIPPERISUSINGHWND,
    DDERR_NOCLIPPERATTACHED,
    DDERR_NOHWND,
    DDERR_HWNDSUBCLASSED,
    DDERR_HWNDALREADYSET,
    DDERR_NOPALETTEATTACHED,
    DDERR_NOPALETTEHW,
    DDERR_BLTFASTCANTCLIP,
    DDERR_NOBLTHW,
    DDERR_NODDROPSHW,
    DDERR_OVERLAYNOTVISIBLE,
    DDERR_NOOVERLAYDEST,
    DDERR_INVALIDPOSITION,
    DDERR_NOTAOVERLAYSURFACE,
    DDERR_EXCLUSIVEMODEALREADYSET,
    DDERR_NOTFLIPPABLE,
    DDERR_CANTDUPLICATE,
    DDERR_NOTLOCKED,
    DDERR_CANTCREATEDC,
    DDERR_NODC,
    DDERR_WRONGMODE,
    DDERR_IMPLICITLYCREATED,
    DDERR_NOTPALETTIZED,
    DDERR_UNSUPPORTEDMODE,
    DDERR_NOMIPMAPHW,
    DDERR_INVALIDSURFACETYPE,
    DDERR_NOOPTIMIZEHW,
    DDERR_NOTLOADED,
    DDERR_NOFOCUSWINDOW,
    DDERR_NOTONMIPMAPSUBLEVEL,
    DDERR_DCALREADYCREATED,
    DDERR_NONONLOCALVIDMEM,
    DDERR_CANTPAGELOCK,
    DDERR_CANTPAGEUNLOCK,
    DDERR_NOTPAGELOCKED,
    DDERR_MOREDATA,
    DDERR_EXPIRED,
    DDERR_TESTFINISHED,
    DDERR_NEWMODE,
    DDERR_D3DNOTINITIALIZED,
    DDERR_VIDEONOTACTIVE,
    DDERR_NOMONITORINFORMATION,
    DDERR_NODRIVERSUPPORT,
    DDERR_DEVICEDOESNTOWNSURFACE
};

static const HRESULT x_file_codes[] =
{
    DXFILEERR_BADOBJECT,
    DXFILEERR_BADVALUE,
    DXFILEERR_BADTYPE,
    DXFILEERR_BADSTREAMHANDLE,
    DXFILEERR_BADALLOC,
    DXFILEERR_NOTFOUND,
    DXFILEERR_NOTDONEYET,
    DXFILEERR_FILENOTFOUND,
    DXFILEERR_RESOURCENOTFOUND,
    DXFILEERR_URLNOTFOUND,
    DXFILEERR_BADRESOURCE,
    DXFILEERR_BADFILETYPE,
    DXFILEERR_BADFILEVERSION,
    DXFILEERR_BADFILEFLOATSIZE,
    DXFILEERR_BADFILECOMPRESSIONTYPE,
    DXFILEERR_BADFILE,
    DXFILEERR_PARSEERROR,
    DXFILEERR_NOTEMPLATE,
    DXFILEERR_BADARRAYSIZE,
    DXFILEERR_BADDATAREFERENCE,
    DXFILEERR_NOMOREOBJECTS,
    DXFILEERR_NOMOREDATA,
    DXFILEERR_BADCACHEFILE,
    DXFILEERR_NOINTERNET
};

static const HRESULT d3d_codes[] =
{
    D3DERR_WRONGTEXTUREFORMAT,
    D3DERR_UNSUPPORTEDCOLOROPERATION,
    D3DERR_UNSUPPORTEDCOLORARG,
    D3DERR_UNSUPPORTEDALPHAOPERATION,
    D3DERR_UNSUPPORTEDALPHAARG,
    D3DERR_TOOMANYOPERATIONS,
    D3DERR_CONFLICTINGTEXTUREFILTER,
    D3DERR_UNSUPPORTEDFACTORVALUE,
    D3DERR_CONFLICTINGRENDERSTATE,
    D3DERR_UNSUPPORTEDTEXTUREFILTER,
    D3DERR_CONFLICTINGTEXTUREPALETTE,
    D3DERR_DRIVERINTERNALERROR,
    D3DERR_NOTFOUND,
    D3DERR_MOREDATA,
    D3DERR_DEVICELOST,
    D3DERR_DEVICENOTRESET,
    D3DERR_NOTAVAILABLE,
    D3DERR_INVALIDDEVICE,
    D3DERR_INVALIDCALL,
    D3DERR_DRIVERINVALIDCALL
};

static const HRESULT d3dx_codes[] =
{
    D3DXERR_CANNOTMODIFYINDEXBUFFER,
    D3DXERR_INVALIDMESH,
    D3DXERR_CANNOTATTRSORT,
    D3DXERR_SKINNINGNOTSUPPORTED,
    D3DXERR_TOOMANYINFLUENCES,
    D3DXERR_INVALIDDATA
};

static const HRESULT com_codes[] =
{
    E_FAIL,
    E_OUTOFMEMORY,
    E_NOINTERFACE,
    E_POINTER
};

int
main(int argc, char* argv[])
{
#define TEST(ary_) test_errors(ary_, NUM_OF(ary_))
    TEST(com_codes);
    TEST(x_file_codes);
    TEST(draw_codes);
    TEST(d3d_codes);
    TEST(d3dx_codes);
#undef TEST

    return 0;
}
