ReactOS 0.4.17-dev-444-g71ee754
vartype.c File Reference
#include "wine/test.h"
#include "oleauto.h"
#include <math.h>
#include <stdio.h>
#include "test_tlb.h"
#include "initguid.h"
Include dependency graph for vartype.c:

Go to the source code of this file.

Classes

struct  tagINTERNAL_BSTR
 
struct  DummyDispatch
 
struct  r4_test
 
struct  r8_test
 

Macros

#define CONST_VTABLE
 
#define COBJMACROS
 
#define HAS_UINT64_TO_FLOAT
 
#define EQ_DOUBLE(a, b)   (fabs((a)-(b)) / (1.0+fabs(a)+fabs(b)) < 1e-14)
 
#define IS_MODERN_VTYPE(vt)
 
#define CONVVARS(typ)   HRESULT hres; CONV_TYPE out; typ in
 
#define _EXPECT_NO_OUT(res)   ok(hres == res, "expected " #res ", got hres=%#08lx\n", hres)
 
#define EXPECT_OVERFLOW   _EXPECT_NO_OUT(DISP_E_OVERFLOW)
 
#define EXPECT_MISMATCH   _EXPECT_NO_OUT(DISP_E_TYPEMISMATCH)
 
#define EXPECT_BADVAR   _EXPECT_NO_OUT(DISP_E_BADVARTYPE)
 
#define EXPECT_INVALID   _EXPECT_NO_OUT(E_INVALIDARG)
 
#define EXPECT_LT   _EXPECT_NO_OUT(VARCMP_LT)
 
#define EXPECT_GT   _EXPECT_NO_OUT(VARCMP_GT)
 
#define EXPECT_EQ   _EXPECT_NO_OUT(VARCMP_EQ)
 
#define _EXPECTRES(res, x, fs)    ok(hres == S_OK && out == (CONV_TYPE)(x), "expected " #x ", got " fs "; hres=%#08lx\n", out, hres)
 
#define EXPECT(x)   EXPECTRES(S_OK, (x))
 
#define EXPECT_DBL(x)    ok(hres == S_OK && EQ_DOUBLE(out, (x)), "expected %.16g, got %.16g; hres=%#08lx\n", (x), out, hres)
 
#define EXPECT_DBL2(new, old)    ok(hres == S_OK && (EQ_DOUBLE(out, (new)) || broken(EQ_DOUBLE(out, (old)))), "expected %.16g or %.16g, got %.16g; hres=%#08lx\n", (new), (old), out, hres)
 
#define CONVERT(func, val)   in = val; hres = func(in, &out)
 
#define CONVERTRANGE(func, start, end)   for (i = start; i < end; i+=1) { CONVERT(func, i); EXPECT(i); };
 
#define OVERFLOWRANGE(func, start, end)   for (i = start; i < end; i+=1) { CONVERT(func, i); EXPECT_OVERFLOW; };
 
#define CY_MULTIPLIER   10000
 
#define DATE_MIN   -657434
 
#define DATE_MAX   2958465
 
#define CONVERT_I8(func, hi, lo)   in = hi; in = (in << 32) | lo; hres = func(in, &out)
 
#define CONVERT_CY(func, val)   in.int64 = (LONGLONG)(val * CY_MULTIPLIER); hres = func(in, &out)
 
#define CONVERT_CY64(func, hi, lo)   in.Hi = hi; in.Lo = lo; in.int64 *= CY_MULTIPLIER; hres = func(in, &out)
 
#define SETDEC(dec, scl, sgn, hi, lo)
 
#define SETDEC64(dec, scl, sgn, hi, mid, lo)
 
#define CONVERT_DEC(func, scl, sgn, hi, lo)   SETDEC(in,scl,sgn,hi,lo); hres = func(&in, &out)
 
#define CONVERT_DEC64(func, scl, sgn, hi, mid, lo)   SETDEC64(in,scl,sgn,hi,mid,lo); hres = func(&in, &out)
 
#define CONVERT_BADDEC(func)
 
#define CONVERT_STR(func, str, flags)
 
#define COPYTEST(val, vt, srcval, dstval, srcref, dstref, fs)
 
#define CHANGETYPEEX(typ)   hres = VariantChangeTypeEx(&vDst, &vSrc, 0, 0, typ)
 
#define TYPETEST(typ, res, fs)
 
#define TYPETESTI8(typ, res)
 
#define BADVAR(typ)   CHANGETYPEEX(typ); EXPECT_BADVAR
 
#define MISMATCH(typ)   CHANGETYPEEX(typ); EXPECT_MISMATCH
 
#define INITIAL_TYPETEST(vt, val, fs)
 
#define NEGATIVE_TYPETEST(vt, val, fs, vtneg, valneg)
 
#define INITIAL_TYPETESTI8(vt, val)
 
#define COMMON_TYPETEST
 
#define DEFINE_EXPECT(func)    static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
 
#define SET_EXPECT(func)    do { called_ ## func = FALSE; expect_ ## func = TRUE; } while(0)
 
#define CHECK_EXPECT2(func)
 
#define CHECK_EXPECT(func)
 
#define CHECK_CALLED(func)
 
#define CONV_TYPE   signed char
 
#define EXPECTRES(res, x)   _EXPECTRES(res, x, "%d")
 
#define CONV_TYPE   BYTE
 
#define EXPECTRES(res, x)   _EXPECTRES(res, x, "%u")
 
#define CONV_TYPE   SHORT
 
#define EXPECTRES(res, x)   _EXPECTRES(res, x, "%d")
 
#define CONV_TYPE   USHORT
 
#define EXPECTRES(res, x)   _EXPECTRES(res, x, "%u")
 
#define CONV_TYPE   LONG
 
#define EXPECTRES(res, x)   _EXPECTRES(res, x, "%ld")
 
#define CONV_TYPE   ULONG
 
#define EXPECTRES(res, x)   _EXPECTRES(res, x, "%lu")
 
#define CONV_TYPE   LONG64
 
#define EXPECTRES(res, x)   _EXPECTRES(res, x, "%I64d")
 
#define CONV_TYPE   ULONG64
 
#define EXPECTRES(res, x)   _EXPECTRES(res, x, "%I64u")
 
#define CONV_TYPE   float
 
#define EXPECTRES(res, x)   _EXPECTRES(res, x, "%15.15f")
 
#define CONV_TYPE   double
 
#define MATHRND(l, r)   left = l; right = r; hres = VarR8Round(left, right, &out)
 
#define CONV_TYPE   DATE
 
#define DFS(str)
 
#define MKRELDATE(day, mth)
 
#define CONV_TYPE   CY
 
#define EXPECTCY(x)
 
#define EXPECTCY64(x, y)
 
#define MATHVARS1   HRESULT hres; double left = 0.0; CY cyLeft, out
 
#define MATHVARS2   MATHVARS1; double right = 0.0; CY cyRight
 
#define MATH1(func, l)   left = (double)l; VarCyFromR8(left, &cyLeft); hres = func(cyLeft, &out)
 
#define MATH2(func, l, r)
 
#define MATHMULI4(l, r)
 
#define MATHMULI8(l, r)
 
#define MATHCMP(l, r)
 
#define MATHCMPR8(l, r)
 
#define MATHRND(l, r)
 
#define MATHFIX(l)
 
#define MATHINT(l)
 
#define CONV_TYPE   DECIMAL
 
#define EXPECTDEC(scl, sgn, hi, lo)
 
#define EXPECTDEC64(scl, sgn, hi, mid, lo)
 
#define EXPECTDECZERO()
 
#define EXPECTDECI   if (i < 0) EXPECTDEC(0, 0x80, 0, -i); else EXPECTDEC(0, 0, 0, i)
 
#define MATHVARS1   HRESULT hres; DECIMAL l, out
 
#define MATHVARS2   MATHVARS1; DECIMAL r
 
#define MATH1(func)   hres = func(&l, &out)
 
#define MATH2(func)   hres = func(&l, &r, &out)
 
#define MATH3(func)   hres = func(&l, r)
 
#define CLEAR(x)   memset(&(x), 0xBB, sizeof(x))
 
#define CONV_TYPE   VARIANT_BOOL
 
#define EXPECTRES(res, x)   _EXPECTRES(res, x, "%d")
 
#define CONVERTRANGE(func, start, end)
 
#define BOOL_STR(flags, str)
 
#define BSTR_DATE(dt, str)   _BSTR_DATE(dt,str,__LINE__)
 
#define BSTR_CY(a, b, str, lcid)   _BSTR_CY(a, b, str, lcid, __LINE__)
 
#define BSTR_DEC(scale, sign, hi, lo, str, lcid)   _BSTR_DEC(scale, sign, hi, 0, lo, str, lcid, __LINE__)
 
#define BSTR_DEC64(scale, sign, hi, mid, lo, str, lcid)   _BSTR_DEC(scale, sign, hi, mid, lo, str, lcid, __LINE__)
 
#define _VARBSTRCMP(left, right, lcid, flags, result)
 
#define VARBSTRCMP(left, right, flags, result)    _VARBSTRCMP(left,right,lcid,flags,result)
 
#define NUM_CUST_ITEMS   16
 

Typedefs

typedef struct tagINTERNAL_BSTR INTERNAL_BSTR
 
typedef struct tagINTERNAL_BSTRLPINTERNAL_BSTR
 

Functions

 DEFINE_GUID (UUID_test_struct, 0x4029f190, 0xca4a, 0x4611, 0xae, 0xb9, 0x67, 0x39, 0x83, 0xcb, 0x96, 0xdd)
 
static void (WINAPI *pSysFreeString)(BSTR)
 
 DEFINE_EXPECT (dispatch_invoke)
 
static DummyDispatchimpl_from_IDispatch (IDispatch *iface)
 
static ULONG WINAPI DummyDispatch_AddRef (IDispatch *iface)
 
static ULONG WINAPI DummyDispatch_Release (IDispatch *iface)
 
static HRESULT WINAPI DummyDispatch_QueryInterface (IDispatch *iface, REFIID riid, void **ppvObject)
 
static HRESULT WINAPI DummyDispatch_GetTypeInfoCount (IDispatch *iface, UINT *pctinfo)
 
static HRESULT WINAPI DummyDispatch_GetTypeInfo (IDispatch *iface, UINT tinfo, LCID lcid, ITypeInfo **ti)
 
static HRESULT WINAPI DummyDispatch_GetIDsOfNames (IDispatch *iface, REFIID riid, LPOLESTR *names, UINT cnames, LCID lcid, DISPID *dispid)
 
static HRESULT WINAPI DummyDispatch_Invoke (IDispatch *iface, DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, UINT *arg_err)
 
static void init_test_dispatch (LONG ref, VARTYPE vt, DummyDispatch *dispatch)
 
static void test_VarI1FromI2 (void)
 
static void test_VarI1FromI4 (void)
 
static void test_VarI1FromI8 (void)
 
static void test_VarI1FromUI1 (void)
 
static void test_VarI1FromUI2 (void)
 
static void test_VarI1FromUI4 (void)
 
static void test_VarI1FromUI8 (void)
 
static void test_VarI1FromBool (void)
 
static void test_VarI1FromR4 (void)
 
static void test_VarI1FromR8 (void)
 
static void test_VarI1FromDate (void)
 
static void test_VarI1FromCy (void)
 
static void test_VarI1FromDec (void)
 
static void test_VarI1FromStr (void)
 
static void test_VarI1Copy (void)
 
static void test_VarI1ChangeTypeEx (void)
 
static void test_VarUI1FromI1 (void)
 
static void test_VarUI1FromI2 (void)
 
static void test_VarUI1FromI4 (void)
 
static void test_VarUI1FromI8 (void)
 
static void test_VarUI1FromUI2 (void)
 
static void test_VarUI1FromUI4 (void)
 
static void test_VarUI1FromUI8 (void)
 
static void test_VarUI1FromBool (void)
 
static void test_VarUI1FromR4 (void)
 
static void test_VarUI1FromR8 (void)
 
static void test_VarUI1FromDate (void)
 
static void test_VarUI1FromCy (void)
 
static void test_VarUI1FromDec (void)
 
static void test_VarUI1FromStr (void)
 
static void test_VarUI1FromDisp (void)
 
static void test_VarUI1Copy (void)
 
static void test_VarUI1ChangeTypeEx (void)
 
static void test_VarI2FromI1 (void)
 
static void test_VarI2FromI4 (void)
 
static void test_VarI2FromI8 (void)
 
static void test_VarI2FromUI1 (void)
 
static void test_VarI2FromUI2 (void)
 
static void test_VarI2FromUI4 (void)
 
static void test_VarI2FromUI8 (void)
 
static void test_VarI2FromBool (void)
 
static void test_VarI2FromR4 (void)
 
static void test_VarI2FromR8 (void)
 
static void test_VarI2FromDate (void)
 
static void test_VarI2FromCy (void)
 
static void test_VarI2FromDec (void)
 
static void test_VarI2FromStr (void)
 
static void test_VarI2Copy (void)
 
static void test_VarI2ChangeTypeEx (void)
 
static void test_VarUI2FromI1 (void)
 
static void test_VarUI2FromI2 (void)
 
static void test_VarUI2FromI4 (void)
 
static void test_VarUI2FromI8 (void)
 
static void test_VarUI2FromUI1 (void)
 
static void test_VarUI2FromUI4 (void)
 
static void test_VarUI2FromUI8 (void)
 
static void test_VarUI2FromBool (void)
 
static void test_VarUI2FromR4 (void)
 
static void test_VarUI2FromR8 (void)
 
static void test_VarUI2FromDate (void)
 
static void test_VarUI2FromCy (void)
 
static void test_VarUI2FromDec (void)
 
static void test_VarUI2FromStr (void)
 
static void test_VarUI2Copy (void)
 
static void test_VarUI2ChangeTypeEx (void)
 
static void test_VarI4FromI1 (void)
 
static void test_VarI4FromI2 (void)
 
static void test_VarI4FromI8 (void)
 
static void test_VarI4FromUI1 (void)
 
static void test_VarI4FromUI2 (void)
 
static void test_VarI4FromUI4 (void)
 
static void test_VarI4FromUI8 (void)
 
static void test_VarI4FromBool (void)
 
static void test_VarI4FromR4 (void)
 
static void test_VarI4FromR8 (void)
 
static void test_VarI4FromDate (void)
 
static void test_VarI4FromCy (void)
 
static void test_VarI4FromDec (void)
 
static void test_VarI4FromStr (void)
 
static void test_VarI4Copy (void)
 
static void test_VarI4ChangeTypeEx (void)
 
static void test_VarUI4FromI1 (void)
 
static void test_VarUI4FromI2 (void)
 
static void test_VarUI4FromUI2 (void)
 
static void test_VarUI4FromI8 (void)
 
static void test_VarUI4FromUI1 (void)
 
static void test_VarUI4FromI4 (void)
 
static void test_VarUI4FromUI8 (void)
 
static void test_VarUI4FromBool (void)
 
static void test_VarUI4FromR4 (void)
 
static void test_VarUI4FromR8 (void)
 
static void test_VarUI4FromDate (void)
 
static void test_VarUI4FromCy (void)
 
static void test_VarUI4FromDec (void)
 
static void test_VarUI4FromStr (void)
 
static void test_VarUI4Copy (void)
 
static void test_VarUI4ChangeTypeEx (void)
 
static void test_VarI8FromI1 (void)
 
static void test_VarI8FromUI1 (void)
 
static void test_VarI8FromI2 (void)
 
static void test_VarI8FromUI2 (void)
 
static void test_VarI8FromUI4 (void)
 
static void test_VarI8FromR4 (void)
 
static void test_VarI8FromR8 (void)
 
static void test_VarI8FromDate (void)
 
static void test_VarI8FromBool (void)
 
static void test_VarI8FromUI8 (void)
 
static void test_VarI8FromCy (void)
 
static void test_VarI8FromDec (void)
 
static void test_VarI8FromStr (void)
 
static void test_VarI8Copy (void)
 
static void test_VarI8ChangeTypeEx (void)
 
static void test_VarUI8FromI1 (void)
 
static void test_VarUI8FromUI1 (void)
 
static void test_VarUI8FromI2 (void)
 
static void test_VarUI8FromUI2 (void)
 
static void test_VarUI8FromUI4 (void)
 
static void test_VarUI8FromR4 (void)
 
static void test_VarUI8FromR8 (void)
 
static void test_VarUI8FromDate (void)
 
static void test_VarUI8FromBool (void)
 
static void test_VarUI8FromI8 (void)
 
static void test_VarUI8FromCy (void)
 
static void test_VarUI8FromDec (void)
 
static void test_VarUI8FromStr (void)
 
static void test_VarUI8Copy (void)
 
static void test_VarUI8ChangeTypeEx (void)
 
static void test_VarR4FromI1 (void)
 
static void test_VarR4FromUI1 (void)
 
static void test_VarR4FromI2 (void)
 
static void test_VarR4FromUI2 (void)
 
static void test_VarR4FromI4 (void)
 
static void test_VarR4FromUI4 (void)
 
static void test_VarR4FromR8 (void)
 
static void test_VarR4FromBool (void)
 
static void test_VarR4FromCy (void)
 
static void test_VarR4FromI8 (void)
 
static void test_VarR4FromUI8 (void)
 
static void test_VarR4FromDec (void)
 
static void test_VarR4FromDate (void)
 
static void test_VarR4FromStr (void)
 
static void test_VarR4Copy (void)
 
static void test_VarR4ChangeTypeEx (void)
 
static void test_VarR8FromI1 (void)
 
static void test_VarR8FromUI1 (void)
 
static void test_VarR8FromI2 (void)
 
static void test_VarR8FromUI2 (void)
 
static void test_VarR8FromI4 (void)
 
static void test_VarR8FromUI4 (void)
 
static void test_VarR8FromR4 (void)
 
static void test_VarR8FromBool (void)
 
static void test_VarR8FromCy (void)
 
static void test_VarR8FromI8 (void)
 
static void test_VarR8FromUI8 (void)
 
static void test_VarR8FromDec (void)
 
static void test_VarR8FromDate (void)
 
static void test_VarR8FromStr (void)
 
static void test_VarR8Copy (void)
 
static void test_VarR8ChangeTypeEx (void)
 
static void test_VarR8Round (void)
 
static void test_VarDateFromI1 (void)
 
static void test_VarDateFromUI1 (void)
 
static void test_VarDateFromI2 (void)
 
static void test_VarDateFromUI2 (void)
 
static void test_VarDateFromI4 (void)
 
static void test_VarDateFromUI4 (void)
 
static void test_VarDateFromR4 (void)
 
static void test_VarDateFromR8 (void)
 
static void test_VarDateFromBool (void)
 
static void test_VarDateFromCy (void)
 
static void test_VarDateFromI8 (void)
 
static void test_VarDateFromUI8 (void)
 
static void test_VarDateFromDec (void)
 
static void test_VarDateFromStr (void)
 
static void test_VarDateCopy (void)
 
static const charwtoascii (LPWSTR lpszIn)
 
static void test_VarDateChangeTypeEx (void)
 
static void test_VarCyFromI1 (void)
 
static void test_VarCyFromUI1 (void)
 
static void test_VarCyFromI2 (void)
 
static void test_VarCyFromUI2 (void)
 
static void test_VarCyFromI4 (void)
 
static void test_VarCyFromUI4 (void)
 
static void test_VarCyFromR4 (void)
 
static void test_VarCyFromR8 (void)
 
static void test_VarCyFromBool (void)
 
static void test_VarCyFromI8 (void)
 
static void test_VarCyFromUI8 (void)
 
static void test_VarCyFromDec (void)
 
static void test_VarCyFromDate (void)
 
static void test_VarCyAdd (void)
 
static void test_VarCyMul (void)
 
static void test_VarCySub (void)
 
static void test_VarCyAbs (void)
 
static void test_VarCyNeg (void)
 
static void test_VarCyMulI4 (void)
 
static void test_VarCyMulI8 (void)
 
static void test_VarCyCmp (void)
 
static void test_VarCyCmpR8 (void)
 
static void test_VarCyRound (void)
 
static void test_VarCyFix (void)
 
static void test_VarCyInt (void)
 
static void test_VarDecFromI1 (void)
 
static void test_VarDecFromI2 (void)
 
static void test_VarDecFromI4 (void)
 
static void test_VarDecFromI8 (void)
 
static void test_VarDecFromUI1 (void)
 
static void test_VarDecFromUI2 (void)
 
static void test_VarDecFromUI4 (void)
 
static void test_VarDecFromUI8 (void)
 
static void test_VarDecFromBool (void)
 
static void test_VarDecFromR4 (void)
 
static void test_VarDecFromR8 (void)
 
static void test_VarDecFromDate (void)
 
static void test_VarDecFromStr (void)
 
static void test_VarDecFromCy (void)
 
static void test_VarDecAbs (void)
 
static void test_VarDecNeg (void)
 
static void test_VarDecAdd (void)
 
static void test_VarDecSub (void)
 
static void test_VarDecMul (void)
 
static void test_VarDecDiv (void)
 
static void test_VarDecCmp (void)
 
static void test_VarDecCmpR8 (void)
 
static void test_VarDecRound (void)
 
static void test_VarBoolFromI1 (void)
 
static void test_VarBoolFromUI1 (void)
 
static void test_VarBoolFromI2 (void)
 
static void test_VarBoolFromUI2 (void)
 
static void test_VarBoolFromI4 (void)
 
static void test_VarBoolFromUI4 (void)
 
static void test_VarBoolFromR4 (void)
 
static void test_VarBoolFromR8 (void)
 
static void test_VarBoolFromCy (void)
 
static void test_VarBoolFromI8 (void)
 
static void test_VarBoolFromUI8 (void)
 
static void test_VarBoolFromDec (void)
 
static void test_VarBoolFromDate (void)
 
static void test_VarBoolFromStr (void)
 
static void test_VarBoolCopy (void)
 
static void test_VarBoolChangeTypeEx (void)
 
static void test_VarBstrFromI4 (void)
 
static void test_VarBstrFromR4 (void)
 
static void test_VarBstrFromR8 (void)
 
static void _BSTR_DATE (DATE dt, const char *str, int line)
 
static void test_VarBstrFromDate (void)
 
static void _BSTR_CY (LONG a, LONG b, const char *str, LCID lcid, int line)
 
static void test_VarBstrFromCy (void)
 
static void _BSTR_DEC (BYTE scale, BYTE sign, ULONG hi, ULONG mid, ULONGLONG lo, const char *str, LCID lcid, int line)
 
static void test_VarBstrFromDec (void)
 
static void test_VarBstrCmp (void)
 
static LPINTERNAL_BSTR Get (const BSTR lpszString)
 
static BSTR GetBSTR (const LPINTERNAL_BSTR bstr)
 
static void test_SysStringLen (void)
 
static void test_SysStringByteLen (void)
 
static void test_SysAllocString (void)
 
static void test_SysAllocStringLen (void)
 
static void test_SysAllocStringByteLen (void)
 
static void test_SysReAllocString (void)
 
static void test_SysReAllocStringLen (void)
 
static void test_BstrCopy (void)
 
static void test_VarBstrCat (void)
 
static void test_IUnknownClear (void)
 
static void test_IUnknownCopy (void)
 
static void test_IUnknownChangeTypeEx (void)
 
static void test_IDispatchClear (void)
 
static void test_IDispatchCopy (void)
 
static void test_IDispatchChangeTypeEx (void)
 
static void test_ErrorChangeTypeEx (void)
 
static void test_EmptyChangeTypeEx (void)
 
static void test_NullChangeTypeEx (void)
 
static void test_UintChangeTypeEx (void)
 
static void test_ClearCustData (void)
 
static void test_NullByRef (void)
 
static void test_ChangeType_keep_dst (void)
 
static void test_bstr_cache (void)
 
static void write_typelib (int res_no, const char *filename)
 
static const charcreate_test_typelib (int res_no)
 
static void test_recinfo (void)
 
 START_TEST (vartype)
 

Variables

static HMODULE hOleaut32
 
static BOOL has_i8
 
static BOOL has_locales
 
static const IDispatchVtbl DummyDispatch_VTable
 
static const char *const BadDateStrings []
 

Macro Definition Documentation

◆ _EXPECT_NO_OUT

#define _EXPECT_NO_OUT (   res)    ok(hres == res, "expected " #res ", got hres=%#08lx\n", hres)

Definition at line 74 of file vartype.c.

◆ _EXPECTRES

#define _EXPECTRES (   res,
  x,
  fs 
)     ok(hres == S_OK && out == (CONV_TYPE)(x), "expected " #x ", got " fs "; hres=%#08lx\n", out, hres)

Definition at line 83 of file vartype.c.

◆ _VARBSTRCMP

#define _VARBSTRCMP (   left,
  right,
  lcid,
  flags,
  result 
)
Value:
ok(hres == result, "VarBstrCmp: expected " #result ", got hres=%#lx\n", hres)
LCID lcid
Definition: locale.c:5660
HRESULT WINAPI VarBstrCmp(BSTR pbstrLeft, BSTR pbstrRight, LCID lcid, DWORD dwFlags)
Definition: vartype.c:7158
GLdouble GLdouble right
Definition: glext.h:10859
GLint left
Definition: glext.h:7726
GLbitfield flags
Definition: glext.h:7161
GLuint64EXT * result
Definition: glext.h:11304
HRESULT hres
Definition: protocol.c:465

Definition at line 4956 of file vartype.c.

◆ BADVAR

#define BADVAR (   typ)    CHANGETYPEEX(typ); EXPECT_BADVAR

Definition at line 153 of file vartype.c.

◆ BOOL_STR

#define BOOL_STR (   flags,
  str 
)
Value:
hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, flags, VT_BSTR); \
ok(hres == S_OK && V_VT(&vDst) == VT_BSTR && \
V_BSTR(&vDst) && !memcmp(V_BSTR(&vDst), str, sizeof(str)), \
"hres=0x%lX, type=%d (should be VT_BSTR), *bstr='%c'\n", \
hres, V_VT(&vDst), V_BSTR(&vDst) ? *V_BSTR(&vDst) : '?'); \
VariantClear(&vDst)
@ VT_BSTR
Definition: compat.h:2303
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
#define S_OK
Definition: intsafe.h:52
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
const WCHAR * str
HRESULT WINAPI VariantChangeTypeEx(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt)
Definition: variant.c:988

Definition at line 4445 of file vartype.c.

◆ BSTR_CY

#define BSTR_CY (   a,
  b,
  str,
  lcid 
)    _BSTR_CY(a, b, str, lcid, __LINE__)

◆ BSTR_DATE

#define BSTR_DATE (   dt,
  str 
)    _BSTR_DATE(dt,str,__LINE__)

◆ BSTR_DEC

#define BSTR_DEC (   scale,
  sign,
  hi,
  lo,
  str,
  lcid 
)    _BSTR_DEC(scale, sign, hi, 0, lo, str, lcid, __LINE__)

◆ BSTR_DEC64

#define BSTR_DEC64 (   scale,
  sign,
  hi,
  mid,
  lo,
  str,
  lcid 
)    _BSTR_DEC(scale, sign, hi, mid, lo, str, lcid, __LINE__)

◆ CHANGETYPEEX

#define CHANGETYPEEX (   typ)    hres = VariantChangeTypeEx(&vDst, &vSrc, 0, 0, typ)

Definition at line 143 of file vartype.c.

◆ CHECK_CALLED

#define CHECK_CALLED (   func)
Value:
do { \
ok(called_ ## func, "expected " #func "\n"); \
expect_ ## func = called_ ## func = FALSE; \
}while(0)
#define FALSE
Definition: types.h:117
GLenum func
Definition: glext.h:6028
#define expect_(expected, got, precision)
Definition: font.c:34

Definition at line 277 of file vartype.c.

◆ CHECK_EXPECT

#define CHECK_EXPECT (   func)
Value:
do { \
CHECK_EXPECT2(func); \
expect_ ## func = FALSE; \
}while(0)

Definition at line 271 of file vartype.c.

◆ CHECK_EXPECT2

#define CHECK_EXPECT2 (   func)
Value:
do { \
ok(expect_ ##func, "unexpected call " #func "\n"); \
called_ ## func = TRUE; \
}while(0)
#define TRUE
Definition: types.h:120

Definition at line 265 of file vartype.c.

◆ CLEAR

#define CLEAR (   x)    memset(&(x), 0xBB, sizeof(x))

Definition at line 4183 of file vartype.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file vartype.c.

◆ COMMON_TYPETEST

#define COMMON_TYPETEST

Definition at line 204 of file vartype.c.

◆ CONST_VTABLE

#define CONST_VTABLE

Definition at line 21 of file vartype.c.

◆ CONV_TYPE [1/14]

#define CONV_TYPE   signed char

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [2/14]

#define CONV_TYPE   BYTE

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [3/14]

#define CONV_TYPE   SHORT

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [4/14]

#define CONV_TYPE   USHORT

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [5/14]

#define CONV_TYPE   LONG

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [6/14]

#define CONV_TYPE   ULONG

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [7/14]

#define CONV_TYPE   LONG64

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [8/14]

#define CONV_TYPE   ULONG64

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [9/14]

#define CONV_TYPE   float

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [10/14]

#define CONV_TYPE   double

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [11/14]

#define CONV_TYPE   DATE

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [12/14]

#define CONV_TYPE   CY

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [13/14]

#define CONV_TYPE   DECIMAL

Definition at line 4219 of file vartype.c.

◆ CONV_TYPE [14/14]

#define CONV_TYPE   VARIANT_BOOL

Definition at line 4219 of file vartype.c.

◆ CONVERT

#define CONVERT (   func,
  val 
)    in = val; hres = func(in, &out)

Definition at line 91 of file vartype.c.

◆ CONVERT_BADDEC

#define CONVERT_BADDEC (   func)
Value:
CONVERT_DEC(func,0,0x1,0,0); EXPECT_INVALID; \
CONVERT_DEC(func,0,0x40,0,0); EXPECT_INVALID; \
CONVERT_DEC(func,0,0x7f,0,0); EXPECT_INVALID;
#define CONVERT_DEC(func, scl, sgn, hi, lo)
Definition: vartype.c:112
#define EXPECT_INVALID
Definition: vartype.c:78

Definition at line 116 of file vartype.c.

◆ CONVERT_CY

#define CONVERT_CY (   func,
  val 
)    in.int64 = (LONGLONG)(val * CY_MULTIPLIER); hres = func(in, &out)

Definition at line 102 of file vartype.c.

◆ CONVERT_CY64

#define CONVERT_CY64 (   func,
  hi,
  lo 
)    in.Hi = hi; in.Lo = lo; in.int64 *= CY_MULTIPLIER; hres = func(in, &out)

Definition at line 104 of file vartype.c.

◆ CONVERT_DEC

#define CONVERT_DEC (   func,
  scl,
  sgn,
  hi,
  lo 
)    SETDEC(in,scl,sgn,hi,lo); hres = func(&in, &out)

Definition at line 112 of file vartype.c.

◆ CONVERT_DEC64

#define CONVERT_DEC64 (   func,
  scl,
  sgn,
  hi,
  mid,
  lo 
)    SETDEC64(in,scl,sgn,hi,mid,lo); hres = func(&in, &out)

Definition at line 114 of file vartype.c.

◆ CONVERT_I8

#define CONVERT_I8 (   func,
  hi,
  lo 
)    in = hi; in = (in << 32) | lo; hres = func(in, &out)

Definition at line 100 of file vartype.c.

◆ CONVERT_STR

#define CONVERT_STR (   func,
  str,
  flags 
)
Value:
#define ARRAY_SIZE(A)
Definition: main.h:20
#define NULL
Definition: types.h:112
#define CP_ACP
Definition: compat.h:109
#define SetLastError(x)
Definition: compat.h:752
#define MultiByteToWideChar
Definition: compat.h:110
GLuint in
Definition: glext.h:9616
static const char *static const char const char DWORD void DWORD *static const char const char DWORD void DWORD *static const char DWORD DWORD void * buff
Definition: shcore.c:41
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Definition at line 122 of file vartype.c.

◆ CONVERTRANGE [1/2]

#define CONVERTRANGE (   func,
  start,
  end 
)    for (i = start; i < end; i+=1) { CONVERT(func, i); EXPECT(i); };

Definition at line 4223 of file vartype.c.

◆ CONVERTRANGE [2/2]

#define CONVERTRANGE (   func,
  start,
  end 
)
Value:
for (i = start; i < end; i++) { \
CONVERT(func, i); if (i) { EXPECT(VARIANT_TRUE); } else { EXPECT(VARIANT_FALSE); } }
GLuint start
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define EXPECT(x)
Definition: vartype.c:85

Definition at line 4223 of file vartype.c.

◆ CONVVARS

#define CONVVARS (   typ)    HRESULT hres; CONV_TYPE out; typ in

Definition at line 72 of file vartype.c.

◆ COPYTEST

#define COPYTEST (   val,
  vt,
  srcval,
  dstval,
  srcref,
  dstref,
  fs 
)
Value:
do { \
HRESULT hres; VARIANTARG vSrc, vDst; CONV_TYPE in = val; \
VariantInit(&vSrc); VariantInit(&vDst); \
V_VT(&vSrc) = vt; srcval = in; \
hres = VariantCopy(&vDst, &vSrc); \
ok(hres == S_OK && V_VT(&vDst) == vt && dstval == in, \
"copy hres %#lX, type %d, value (" fs ") " fs "\n", hres, V_VT(&vDst), val, dstval); \
V_VT(&vSrc) = vt|VT_BYREF; srcref = &in; \
hres = VariantCopy(&vDst, &vSrc); \
ok(hres == S_OK && V_VT(&vDst) == (vt|VT_BYREF) && dstref == &in, \
"ref hres %#lX, type %d, ref (%p) %p\n", hres, V_VT(&vDst), &in, dstref); \
hres = VariantCopyInd(&vDst, &vSrc); \
ok(hres == S_OK && V_VT(&vDst) == vt && dstval == in, \
"ind hres %#lX, type %d, value (" fs ") " fs "\n", hres, V_VT(&vDst), val, dstval); \
} while(0)
@ VT_BYREF
Definition: compat.h:2342
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
GLuint GLfloat * val
Definition: glext.h:7180
#define CONV_TYPE
Definition: vartype.c:4219
Definition: ffs.h:70
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:568
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, VARIANTARG *pvargSrc)
Definition: variant.c:847
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, VARIANTARG *pvargSrc)
Definition: variant.c:748

Definition at line 127 of file vartype.c.

◆ CY_MULTIPLIER

#define CY_MULTIPLIER   10000

Definition at line 95 of file vartype.c.

◆ DATE_MAX

#define DATE_MAX   2958465

Definition at line 98 of file vartype.c.

◆ DATE_MIN

#define DATE_MIN   -657434

Definition at line 97 of file vartype.c.

◆ DEFINE_EXPECT

#define DEFINE_EXPECT (   func)     static BOOL expect_ ## func = FALSE, called_ ## func = FALSE

Definition at line 259 of file vartype.c.

◆ DFS

#define DFS (   str)
Value:
buff[0] = '\0'; out = 0.0; \
HRESULT WINAPI VarDateFromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, DATE *pdateOut)
Definition: vartype.c:7595
#define LOCALE_NOUSEROVERRIDE
Definition: winnls.h:19

Definition at line 2885 of file vartype.c.

◆ EQ_DOUBLE

#define EQ_DOUBLE (   a,
  b 
)    (fabs((a)-(b)) / (1.0+fabs(a)+fabs(b)) < 1e-14)

Definition at line 58 of file vartype.c.

◆ EXPECT

#define EXPECT (   x)    EXPECTRES(S_OK, (x))

Definition at line 85 of file vartype.c.

◆ EXPECT_BADVAR

#define EXPECT_BADVAR   _EXPECT_NO_OUT(DISP_E_BADVARTYPE)

Definition at line 77 of file vartype.c.

◆ EXPECT_DBL

#define EXPECT_DBL (   x)     ok(hres == S_OK && EQ_DOUBLE(out, (x)), "expected %.16g, got %.16g; hres=%#08lx\n", (x), out, hres)

Definition at line 86 of file vartype.c.

◆ EXPECT_DBL2

#define EXPECT_DBL2 (   new,
  old 
)     ok(hres == S_OK && (EQ_DOUBLE(out, (new)) || broken(EQ_DOUBLE(out, (old)))), "expected %.16g or %.16g, got %.16g; hres=%#08lx\n", (new), (old), out, hres)

Definition at line 88 of file vartype.c.

◆ EXPECT_EQ

#define EXPECT_EQ   _EXPECT_NO_OUT(VARCMP_EQ)

Definition at line 81 of file vartype.c.

◆ EXPECT_GT

#define EXPECT_GT   _EXPECT_NO_OUT(VARCMP_GT)

Definition at line 80 of file vartype.c.

◆ EXPECT_INVALID

#define EXPECT_INVALID   _EXPECT_NO_OUT(E_INVALIDARG)

Definition at line 78 of file vartype.c.

◆ EXPECT_LT

#define EXPECT_LT   _EXPECT_NO_OUT(VARCMP_LT)

Definition at line 79 of file vartype.c.

◆ EXPECT_MISMATCH

#define EXPECT_MISMATCH   _EXPECT_NO_OUT(DISP_E_TYPEMISMATCH)

Definition at line 76 of file vartype.c.

◆ EXPECT_OVERFLOW

#define EXPECT_OVERFLOW   _EXPECT_NO_OUT(DISP_E_OVERFLOW)

Definition at line 75 of file vartype.c.

◆ EXPECTCY

#define EXPECTCY (   x)
Value:
ok((hres == S_OK && out.int64 == (LONGLONG)(x*CY_MULTIPLIER)), \
"expected " #x "*CY_MULTIPLIER, got (%8lx %8lx); hres=0x%08lx\n", out.Hi, out.Lo, hres)
#define ok(value,...)
Definition: atltest.h:57
#define CY_MULTIPLIER
Definition: vartype.c:38
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
int64_t LONGLONG
Definition: typedefs.h:68

Definition at line 3152 of file vartype.c.

◆ EXPECTCY64

#define EXPECTCY64 (   x,
  y 
)
Value:
ok(hres == S_OK && out.Hi == (LONG)x && out.Lo == y, \
"expected " #x " " #y " (%lu,%lu), got (%lu,%lu); hres=0x%08lx\n", \
(ULONG)(x), (ULONG)(y), out.Hi, out.Lo, hres)
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
long LONG
Definition: pedump.c:60
uint32_t ULONG
Definition: typedefs.h:59

Definition at line 3156 of file vartype.c.

◆ EXPECTDEC

#define EXPECTDEC (   scl,
  sgn,
  hi,
  lo 
)
Value:
ok(hres == S_OK && \
out.scale == (BYTE)(scl) && out.sign == (BYTE)(sgn) && \
out.Hi32 == (ULONG)(hi) && out.Lo64 == (ULONG64)(lo), \
"expected (%d,%d,%d,%I64x), got (%d,%d,%ld,(%lx %lx)) hres 0x%08lx\n", \
scl, sgn, hi, (LONG64)(lo), out.scale, \
out.sign, out.Hi32, out.Mid32, out.Lo32, hres)
unsigned __int64 ULONG64
Definition: imports.h:198
int64_t LONG64
Definition: typedefs.h:68
long sgn(REAL x)
Definition: varray.cc:48
unsigned char BYTE
Definition: xxhash.c:193

Definition at line 3627 of file vartype.c.

◆ EXPECTDEC64

#define EXPECTDEC64 (   scl,
  sgn,
  hi,
  mid,
  lo 
)
Value:
ok(hres == S_OK && \
out.scale == (BYTE)(scl) && out.sign == (BYTE)(sgn) && \
out.Hi32 == (ULONG)(hi) && out.Mid32 == (ULONG)(mid) && \
out.Lo32 == (ULONG)(lo), \
"expected (%d,%d,%d,(%lx %lx)), got (%d,%d,%ld,(%lx %lx)) hres 0x%08lx\n", \
scl, sgn, hi, (LONG)(mid), (LONG)(lo), out.scale, \
out.sign, out.Hi32, out.Mid32, out.Lo32, hres)

Definition at line 3634 of file vartype.c.

◆ EXPECTDECI

#define EXPECTDECI   if (i < 0) EXPECTDEC(0, 0x80, 0, -i); else EXPECTDEC(0, 0, 0, i)

Definition at line 3648 of file vartype.c.

◆ EXPECTDECZERO

#define EXPECTDECZERO ( )
Value:
ok(hres == S_OK && out.scale == 0 && \
(out.sign == 0 || out.sign == 0x80) && out.Hi32 == 0 && out.Lo64 == 0, \
"expected zero, got (%d,%d,%ld,(%lx %lx)) hres 0x%08lx\n", \
out.scale, out.sign, out.Hi32, out.Mid32, out.Lo32, hres)

Definition at line 3643 of file vartype.c.

◆ EXPECTRES [1/10]

#define EXPECTRES (   res,
  x 
)    _EXPECTRES(res, x, "%d")

Definition at line 4221 of file vartype.c.

◆ EXPECTRES [2/10]

#define EXPECTRES (   res,
  x 
)    _EXPECTRES(res, x, "%u")

Definition at line 4221 of file vartype.c.

◆ EXPECTRES [3/10]

#define EXPECTRES (   res,
  x 
)    _EXPECTRES(res, x, "%d")

Definition at line 4221 of file vartype.c.

◆ EXPECTRES [4/10]

#define EXPECTRES (   res,
  x 
)    _EXPECTRES(res, x, "%u")

Definition at line 4221 of file vartype.c.

◆ EXPECTRES [5/10]

#define EXPECTRES (   res,
  x 
)    _EXPECTRES(res, x, "%ld")

Definition at line 4221 of file vartype.c.

◆ EXPECTRES [6/10]

#define EXPECTRES (   res,
  x 
)    _EXPECTRES(res, x, "%lu")

Definition at line 4221 of file vartype.c.

◆ EXPECTRES [7/10]

#define EXPECTRES (   res,
  x 
)    _EXPECTRES(res, x, "%I64d")

Definition at line 4221 of file vartype.c.

◆ EXPECTRES [8/10]

#define EXPECTRES (   res,
  x 
)    _EXPECTRES(res, x, "%I64u")

Definition at line 4221 of file vartype.c.

◆ EXPECTRES [9/10]

#define EXPECTRES (   res,
  x 
)    _EXPECTRES(res, x, "%15.15f")

Definition at line 4221 of file vartype.c.

◆ EXPECTRES [10/10]

#define EXPECTRES (   res,
  x 
)    _EXPECTRES(res, x, "%d")

Definition at line 4221 of file vartype.c.

◆ HAS_UINT64_TO_FLOAT

#define HAS_UINT64_TO_FLOAT

Definition at line 41 of file vartype.c.

◆ INITIAL_TYPETEST

#define INITIAL_TYPETEST (   vt,
  val,
  fs 
)
Value:
VariantInit(&vSrc); \
VariantInit(&vDst); \
V_VT(&vSrc) = vt; \
(val(&vSrc)) = in; \
TYPETEST(VT_I1, V_I1(&vDst), fs); \
TYPETEST(VT_UI2, V_UI2(&vDst), fs); \
TYPETEST(VT_UI4, V_UI4(&vDst), fs); \
TYPETEST(VT_INT, V_INT(&vDst), fs); \
TYPETEST(VT_UINT, V_UINT(&vDst), fs); \
TYPETEST(VT_UI1, V_UI1(&vDst), fs); \
TYPETEST(VT_I2, V_I2(&vDst), fs); \
TYPETEST(VT_I4, V_I4(&vDst), fs); \
TYPETEST(VT_R4, V_R4(&vDst), fs); \
TYPETEST(VT_R8, V_R8(&vDst), fs); \
TYPETEST(VT_DATE, V_DATE(&vDst), fs); \
if (has_i8) \
{ \
TYPETEST(VT_I8, V_I8(&vDst), fs); \
TYPETEST(VT_UI8, V_UI8(&vDst), fs); \
}
@ VT_UI8
Definition: compat.h:2315
@ VT_INT
Definition: compat.h:2316
@ VT_R4
Definition: compat.h:2299
@ VT_UI2
Definition: compat.h:2312
@ VT_R8
Definition: compat.h:2300
@ VT_I8
Definition: compat.h:2314
@ VT_I1
Definition: compat.h:2310
@ VT_I4
Definition: compat.h:2298
@ VT_DATE
Definition: compat.h:2302
@ VT_I2
Definition: compat.h:2297
@ VT_UI4
Definition: compat.h:2313
@ VT_UINT
Definition: compat.h:2317
@ VT_UI1
Definition: compat.h:2311
static BOOL has_i8
Definition: vartype.c:63
#define V_UI1(A)
Definition: oleauto.h:266
#define V_I8(A)
Definition: oleauto.h:249
#define V_INT(A)
Definition: oleauto.h:251
#define V_UI2(A)
Definition: oleauto.h:268
#define V_I1(A)
Definition: oleauto.h:243
#define V_I4(A)
Definition: oleauto.h:247
#define V_R4(A)
Definition: oleauto.h:260
#define V_UINT(A)
Definition: oleauto.h:264
#define V_UI4(A)
Definition: oleauto.h:270
#define V_R8(A)
Definition: oleauto.h:262
#define V_DATE(A)
Definition: oleauto.h:231
#define V_UI8(A)
Definition: oleauto.h:272
#define V_I2(A)
Definition: oleauto.h:245

Definition at line 156 of file vartype.c.

◆ INITIAL_TYPETESTI8

#define INITIAL_TYPETESTI8 (   vt,
  val 
)
Value:
VariantInit(&vSrc); \
VariantInit(&vDst); \
V_VT(&vSrc) = vt; \
(val(&vSrc)) = in; \
TYPETESTI8(VT_I1, V_I1(&vDst)); \
TYPETESTI8(VT_UI1, V_UI1(&vDst)); \
TYPETESTI8(VT_I2, V_I2(&vDst)); \
TYPETESTI8(VT_UI2, V_UI2(&vDst)); \
TYPETESTI8(VT_I4, V_I4(&vDst)); \
TYPETESTI8(VT_UI4, V_UI4(&vDst)); \
TYPETESTI8(VT_INT, V_INT(&vDst)); \
TYPETESTI8(VT_UINT, V_UINT(&vDst)); \
TYPETESTI8(VT_R4, V_R4(&vDst)); \
TYPETESTI8(VT_R8, V_R8(&vDst)); \
TYPETESTI8(VT_DATE, V_DATE(&vDst)); \
TYPETESTI8(VT_I8, V_I8(&vDst)); \
TYPETESTI8(VT_UI8, V_UI8(&vDst))

Definition at line 185 of file vartype.c.

◆ IS_MODERN_VTYPE

#define IS_MODERN_VTYPE (   vt)
Value:
@ VT_DECIMAL
Definition: compat.h:2309
@ VT_VARIANT
Definition: compat.h:2307

Definition at line 68 of file vartype.c.

◆ MATH1 [1/2]

#define MATH1 (   func)    hres = func(&l, &out)

Definition at line 3826 of file vartype.c.

◆ MATH1 [2/2]

#define MATH1 (   func,
  l 
)    left = (double)l; VarCyFromR8(left, &cyLeft); hres = func(cyLeft, &out)

Definition at line 3826 of file vartype.c.

◆ MATH2 [1/2]

#define MATH2 (   func)    hres = func(&l, &r, &out)

Definition at line 3828 of file vartype.c.

◆ MATH2 [2/2]

#define MATH2 (   func,
  l,
  r 
)
Value:
left = (double)l; right = (double)r; \
VarCyFromR8(left, &cyLeft); VarCyFromR8(right, &cyRight); \
hres = func(cyLeft, cyRight, &out)
r l[0]
Definition: byte_order.h:168
HRESULT WINAPI VarCyFromR8(double dblIn, CY *pCyOut)
Definition: vartype.c:3503
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:91

Definition at line 3828 of file vartype.c.

◆ MATH3

#define MATH3 (   func)    hres = func(&l, r)

Definition at line 3830 of file vartype.c.

◆ MATHCMP

#define MATHCMP (   l,
  r 
)
Value:
left = l; right = r; VarCyFromR8(left, &cyLeft); VarCyFromR8(right, &cyRight); \
hres = VarCyCmp(cyLeft, cyRight)
HRESULT WINAPI VarCyCmp(CY cyLeft, CY cyRight)
Definition: vartype.c:4012

Definition at line 3492 of file vartype.c.

◆ MATHCMPR8

#define MATHCMPR8 (   l,
  r 
)
Value:
left = l; right = r; VarCyFromR8(left, &cyLeft); \
hres = VarCyCmpR8(cyLeft, right);
HRESULT WINAPI VarCyCmpR8(CY cyLeft, double dblRight)
Definition: vartype.c:4046

Definition at line 3514 of file vartype.c.

◆ MATHFIX

#define MATHFIX (   l)
Value:
left = l; VarCyFromR8(left, &cyLeft); \
hres = VarCyFix(cyLeft, &out)
HRESULT WINAPI VarCyFix(CY cyIn, CY *pCyOut)
Definition: vartype.c:3902

Definition at line 3570 of file vartype.c.

◆ MATHINT

#define MATHINT (   l)
Value:
left = l; VarCyFromR8(left, &cyLeft); \
hres = VarCyInt(cyLeft, &out)
HRESULT WINAPI VarCyInt(CY cyIn, CY *pCyOut)
Definition: vartype.c:3926

Definition at line 3595 of file vartype.c.

◆ MATHMULI4

#define MATHMULI4 (   l,
  r 
)
Value:
left = l; right = r; VarCyFromR8(left, &cyLeft); \
hres = VarCyMulI4(cyLeft, right, &out)
HRESULT WINAPI VarCyMulI4(CY cyLeft, LONG lRight, CY *pCyOut)
Definition: vartype.c:3831

Definition at line 3462 of file vartype.c.

◆ MATHMULI8

#define MATHMULI8 (   l,
  r 
)
Value:
left = l; right = r; VarCyFromR8(left, &cyLeft); \
hres = VarCyMulI8(cyLeft, right, &out)
HRESULT WINAPI VarCyMulI8(CY cyLeft, LONG64 llRight, CY *pCyOut)
Definition: vartype.c:4073

Definition at line 3477 of file vartype.c.

◆ MATHRND [1/2]

#define MATHRND (   l,
  r 
)    left = l; right = r; hres = VarR8Round(left, right, &out)

Definition at line 3538 of file vartype.c.

◆ MATHRND [2/2]

#define MATHRND (   l,
  r 
)
Value:
left = l; right = r; VarCyFromR8(left, &cyLeft); \
hres = VarCyRound(cyLeft, right, &out)
HRESULT WINAPI VarCyRound(CY cyIn, int cDecimals, CY *pCyOut)
Definition: vartype.c:3974

Definition at line 3538 of file vartype.c.

◆ MATHVARS1 [1/2]

#define MATHVARS1   HRESULT hres; double left = 0.0; CY cyLeft, out

Definition at line 3822 of file vartype.c.

◆ MATHVARS1 [2/2]

#define MATHVARS1   HRESULT hres; DECIMAL l, out

Definition at line 3822 of file vartype.c.

◆ MATHVARS2 [1/2]

#define MATHVARS2   MATHVARS1; double right = 0.0; CY cyRight

Definition at line 3824 of file vartype.c.

◆ MATHVARS2 [2/2]

#define MATHVARS2   MATHVARS1; DECIMAL r

Definition at line 3824 of file vartype.c.

◆ MISMATCH

#define MISMATCH (   typ)    CHANGETYPEEX(typ); EXPECT_MISMATCH

Definition at line 154 of file vartype.c.

◆ MKRELDATE

#define MKRELDATE (   day,
  mth 
)
Value:
st.wMonth = mth; st.wDay = day; \
SystemTimeToVariantTime(&st,&relative)
static DOUBLE day(DOUBLE time)
Definition: date.c:75

Definition at line 2890 of file vartype.c.

◆ NEGATIVE_TYPETEST

#define NEGATIVE_TYPETEST (   vt,
  val,
  fs,
  vtneg,
  valneg 
)
Value:
in = -in; \
VariantInit(&vSrc); \
VariantInit(&vDst); \
V_VT(&vSrc) = vt; \
(val(&vSrc)) = in; \
TYPETEST(vtneg, valneg(&vDst), fs);

Definition at line 177 of file vartype.c.

◆ NUM_CUST_ITEMS

#define NUM_CUST_ITEMS   16

Definition at line 5971 of file vartype.c.

◆ OVERFLOWRANGE

#define OVERFLOWRANGE (   func,
  start,
  end 
)    for (i = start; i < end; i+=1) { CONVERT(func, i); EXPECT_OVERFLOW; };

Definition at line 93 of file vartype.c.

◆ SET_EXPECT

#define SET_EXPECT (   func)     do { called_ ## func = FALSE; expect_ ## func = TRUE; } while(0)

Definition at line 262 of file vartype.c.

◆ SETDEC

#define SETDEC (   dec,
  scl,
  sgn,
  hi,
  lo 
)
Value:
dec.scale = (BYTE)scl; dec.sign = (BYTE)sgn; \
dec.Hi32 = (ULONG)hi; dec.Lo64 = (ULONG64)lo
ios_base &_STLP_CALL dec(ios_base &__s)
Definition: _ios_base.h:321

Definition at line 106 of file vartype.c.

◆ SETDEC64

#define SETDEC64 (   dec,
  scl,
  sgn,
  hi,
  mid,
  lo 
)
Value:
dec.scale = (BYTE)scl; dec.sign = (BYTE)sgn; \
dec.Hi32 = (ULONG)hi; dec.Mid32 = mid; dec.Lo32 = lo;

Definition at line 109 of file vartype.c.

◆ TYPETEST

#define TYPETEST (   typ,
  res,
  fs 
)
Value:
CHANGETYPEEX(typ); \
ok(hres == S_OK && V_VT(&vDst) == typ && (CONV_TYPE)res == in, \
"hres=%#lX, type=%d (should be %d(" #typ ")), value=" fs " (should be " fs ")\n", \
hres, V_VT(&vDst), typ, (CONV_TYPE)res, in);
GLuint res
Definition: glext.h:9613
#define CHANGETYPEEX(typ)
Definition: vartype.c:143

Definition at line 145 of file vartype.c.

◆ TYPETESTI8

#define TYPETESTI8 (   typ,
  res 
)
Value:
CHANGETYPEEX(typ); \
ok(hres == S_OK && V_VT(&vDst) == typ && (CONV_TYPE)res == in, \
"hres=%#lX, type=%d (should be %d(" #typ ")), value=%d (should be 1)\n", \
hres, V_VT(&vDst), typ, (int)res);

Definition at line 149 of file vartype.c.

◆ VARBSTRCMP

#define VARBSTRCMP (   left,
  right,
  flags,
  result 
)     _VARBSTRCMP(left,right,lcid,flags,result)

Definition at line 4959 of file vartype.c.

Typedef Documentation

◆ INTERNAL_BSTR

◆ LPINTERNAL_BSTR

Function Documentation

◆ _BSTR_CY()

static void _BSTR_CY ( LONG  a,
LONG  b,
const char str,
LCID  lcid,
int  line 
)
static

Definition at line 4823 of file vartype.c.

4824{
4825 HRESULT hr;
4826 BSTR bstr = NULL;
4827 char buff[256];
4828 CY l;
4829
4830 l.Lo = b;
4831 l.Hi = a;
4833 ok(hr == S_OK, "got hr 0x%08lx\n", hr);
4834
4835 if(bstr)
4836 {
4837 WideCharToMultiByte(CP_ACP, 0, bstr, -1, buff, sizeof(buff), 0, 0);
4838 SysFreeString(bstr);
4839 }
4840 else
4841 buff[0] = 0;
4842
4843 if(hr == S_OK)
4844 {
4845 ok_(__FILE__, line)(!strcmp(str, buff), "Expected '%s', got '%s'\n", str, buff);
4846 }
4847}
#define ok_(x1, x2)
Definition: atltest.h:61
HRESULT hr
Definition: delayimp.cpp:582
OLECHAR * BSTR
Definition: compat.h:2293
#define WideCharToMultiByte
Definition: compat.h:111
_ACRTIMP int __cdecl strcmp(const char *, const char *)
Definition: string.c:3324
HRESULT WINAPI VarBstrFromCy(CY cyIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
Definition: vartype.c:6608
#define a
Definition: ke_i.h:78
#define b
Definition: ke_i.h:79
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
Definition: parser.c:49
Definition: compat.h:2255

◆ _BSTR_DATE()

static void _BSTR_DATE ( DATE  dt,
const char str,
int  line 
)
static

Definition at line 4786 of file vartype.c.

4787{
4789 char buff[256];
4790 BSTR bstr = NULL;
4791 HRESULT hres;
4792
4794 if (bstr)
4795 {
4796 WideCharToMultiByte(CP_ACP, 0, bstr, -1, buff, sizeof(buff), 0, 0);
4797 SysFreeString(bstr);
4798 }
4799 else
4800 buff[0] = 0;
4801 ok_(__FILE__, line)(hres == S_OK && !strcmp(str, buff),
4802 "Expected '%s', got '%s', hres = 0x%08lx\n", str, buff, hres);
4803}
HRESULT WINAPI VarBstrFromDate(DATE dateIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
Definition: vartype.c:6778
#define SORT_DEFAULT
#define MAKELCID(lgid, srtid)
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_ENGLISH
Definition: nls.h:52
DWORD LCID
Definition: nls.h:13
#define SUBLANG_ENGLISH_US
Definition: nls.h:222

◆ _BSTR_DEC()

static void _BSTR_DEC ( BYTE  scale,
BYTE  sign,
ULONG  hi,
ULONG  mid,
ULONGLONG  lo,
const char str,
LCID  lcid,
int  line 
)
static

Definition at line 4874 of file vartype.c.

4876{
4877 char buff[256];
4878 HRESULT hr;
4879 BSTR bstr = NULL;
4880 DECIMAL dec;
4881
4882 SETDEC64(dec, scale, sign, hi, mid, lo);
4884 ok_(__FILE__, line)(hr == S_OK, "got hr 0x%08lx\n", hr);
4885
4886 if(bstr)
4887 {
4888 WideCharToMultiByte(CP_ACP, 0, bstr, -1, buff, sizeof(buff), 0, 0);
4889 SysFreeString(bstr);
4890 }
4891 else
4892 buff[0] = 0;
4893
4894 if(hr == S_OK)
4895 {
4896 ok_(__FILE__, line)(!strcmp(str, buff), "Expected '%s', got '%s'\n", str, buff);
4897 }
4898}
HRESULT WINAPI VarBstrFromDec(DECIMAL *pDecIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
Definition: vartype.c:6991
GLenum GLenum GLenum GLenum GLenum scale
Definition: glext.h:9032
#define sign(x)
Definition: mapdesc.cc:613
#define SETDEC64(dec, scl, sgn, hi, mid, lo)
Definition: vartype.c:109

◆ create_test_typelib()

static const char * create_test_typelib ( int  res_no)
static

Definition at line 6117 of file vartype.c.

6118{
6119 static char filename[MAX_PATH];
6120
6121 GetTempFileNameA( ".", "tlb", 0, filename );
6122 write_typelib(res_no, filename);
6123 return filename;
6124}
#define MAX_PATH
Definition: compat.h:34
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
Definition: filename.c:26
const char * filename
Definition: ioapi.h:137
static void write_typelib(int res_no, const char *filename)
Definition: vartype.c:6099

Referenced by test_recinfo().

◆ DEFINE_EXPECT()

DEFINE_EXPECT ( dispatch_invoke  )

◆ DEFINE_GUID()

DEFINE_GUID ( UUID_test_struct  ,
0x4029f190  ,
0xca4a  ,
0x4611  ,
0xae  ,
0xb9  ,
0x67  ,
0x39  ,
0x83  ,
0xcb  ,
0x96  ,
0xdd   
)

◆ DummyDispatch_AddRef()

static ULONG WINAPI DummyDispatch_AddRef ( IDispatch iface)
static

Definition at line 305 of file vartype.c.

306{
308 return InterlockedIncrement(&This->ref);
309}
#define InterlockedIncrement
Definition: armddk.h:53
static DummyDispatch * impl_from_IDispatch(IDispatch *iface)
Definition: vartype.c:300

◆ DummyDispatch_GetIDsOfNames()

static HRESULT WINAPI DummyDispatch_GetIDsOfNames ( IDispatch iface,
REFIID  riid,
LPOLESTR *  names,
UINT  cnames,
LCID  lcid,
DISPID dispid 
)
static

Definition at line 345 of file vartype.c.

347{
348 ok(0, "Unexpected call\n");
349 return E_NOTIMPL;
350}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DummyDispatch_GetTypeInfo()

static HRESULT WINAPI DummyDispatch_GetTypeInfo ( IDispatch iface,
UINT  tinfo,
LCID  lcid,
ITypeInfo **  ti 
)
static

Definition at line 339 of file vartype.c.

340{
341 ok(0, "Unexpected call\n");
342 return E_NOTIMPL;
343}

◆ DummyDispatch_GetTypeInfoCount()

static HRESULT WINAPI DummyDispatch_GetTypeInfoCount ( IDispatch iface,
UINT pctinfo 
)
static

Definition at line 333 of file vartype.c.

334{
335 ok(0, "Unexpected call\n");
336 return E_NOTIMPL;
337}

◆ DummyDispatch_Invoke()

static HRESULT WINAPI DummyDispatch_Invoke ( IDispatch iface,
DISPID  dispid,
REFIID  riid,
LCID  lcid,
WORD  wFlags,
DISPPARAMS *  params,
VARIANT res,
EXCEPINFO *  ei,
UINT arg_err 
)
static

Definition at line 352 of file vartype.c.

359{
361
362 CHECK_EXPECT(dispatch_invoke);
363
364 ok(dispid == DISPID_VALUE, "got dispid %ld\n", dispid);
365 ok(IsEqualIID(riid, &IID_NULL), "go riid %s\n", wine_dbgstr_guid(riid));
366 ok(wFlags == DISPATCH_PROPERTYGET, "Flags wrong\n");
367
368 ok(params->rgvarg == NULL, "got %p\n", params->rgvarg);
369 ok(params->rgdispidNamedArgs == NULL, "got %p\n", params->rgdispidNamedArgs);
370 ok(params->cArgs == 0, "got %d\n", params->cArgs);
371 ok(params->cNamedArgs == 0, "got %d\n", params->cNamedArgs);
372
373 ok(res != NULL, "got %p\n", res);
374 ok(V_VT(res) == VT_EMPTY, "got %d\n", V_VT(res));
375 ok(ei == NULL, "got %p\n", ei);
376 ok(arg_err == NULL, "got %p\n", arg_err);
377
378 if (This->bFailInvoke)
379 return E_OUTOFMEMORY;
380
381 V_VT(res) = This->vt;
382 if (This->vt == VT_UI1)
383 V_UI1(res) = 1;
384 else
385 memset(res, 0, sizeof(*res));
386
387 return S_OK;
388}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
@ VT_EMPTY
Definition: compat.h:2295
GLenum const GLfloat * params
Definition: glext.h:5645
REFIID riid
Definition: atlbase.h:39
#define CHECK_EXPECT(func)
Definition: vartype.c:271
#define DISPATCH_PROPERTYGET
Definition: oleauto.h:1007
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define IID_NULL
Definition: guiddef.h:98
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:171
#define memset(x, y, z)
Definition: compat.h:39
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337

◆ DummyDispatch_QueryInterface()

static HRESULT WINAPI DummyDispatch_QueryInterface ( IDispatch iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 317 of file vartype.c.

320{
321 *ppvObject = NULL;
322
325 {
326 *ppvObject = iface;
327 IDispatch_AddRef(iface);
328 }
329
330 return *ppvObject ? S_OK : E_NOINTERFACE;
331}
const GUID IID_IUnknown
const GUID IID_IDispatch
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ DummyDispatch_Release()

static ULONG WINAPI DummyDispatch_Release ( IDispatch iface)
static

Definition at line 311 of file vartype.c.

312{
314 return InterlockedDecrement(&This->ref);
315}
#define InterlockedDecrement
Definition: armddk.h:52

◆ Get()

static LPINTERNAL_BSTR Get ( const BSTR  lpszString)
inlinestatic

Definition at line 5043 of file vartype.c.

5044{
5045 return lpszString ? (LPINTERNAL_BSTR)((char*)lpszString - sizeof(DWORD)) : NULL;
5046}
struct tagINTERNAL_BSTR * LPINTERNAL_BSTR
#define DWORD
Definition: nt_native.h:44

Referenced by DECLARE_INTERFACE_(), test_BstrCopy(), test_SysAllocString(), test_SysAllocStringByteLen(), test_SysAllocStringLen(), test_SysReAllocString(), and test_SysReAllocStringLen().

◆ GetBSTR()

static BSTR GetBSTR ( const LPINTERNAL_BSTR  bstr)
inlinestatic

Definition at line 5048 of file vartype.c.

5049{
5050 return (BSTR)bstr->szString;
5051}
OLECHAR szString[1]
Definition: vartype.c:289

Referenced by test_SysStringByteLen(), and test_SysStringLen().

◆ impl_from_IDispatch()

static DummyDispatch * impl_from_IDispatch ( IDispatch iface)
inlinestatic

Definition at line 300 of file vartype.c.

301{
302 return CONTAINING_RECORD(iface, DummyDispatch, IDispatch_iface);
303}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by DummyDispatch_AddRef(), DummyDispatch_Invoke(), and DummyDispatch_Release().

◆ init_test_dispatch()

static void init_test_dispatch ( LONG  ref,
VARTYPE  vt,
DummyDispatch dispatch 
)
static

Definition at line 401 of file vartype.c.

402{
403 dispatch->IDispatch_iface.lpVtbl = &DummyDispatch_VTable;
404 dispatch->ref = ref;
405 dispatch->vt = vt;
406 dispatch->bFailInvoke = FALSE;
407}
void dispatch(HANDLE hStopEvent)
Definition: dispatch.c:70
static const IDispatchVtbl DummyDispatch_VTable
Definition: vartype.c:390
Definition: send.c:48

Referenced by test_IDispatchChangeTypeEx(), test_IDispatchClear(), test_IDispatchCopy(), test_IUnknownChangeTypeEx(), test_IUnknownClear(), test_IUnknownCopy(), test_recinfo(), and test_VarUI1FromDisp().

◆ START_TEST()

START_TEST ( vartype  )

Definition at line 6263 of file vartype.c.

6264{
6265 hOleaut32 = GetModuleHandleA("oleaut32.dll");
6266 pSysFreeString = (void *)GetProcAddress(hOleaut32, "SysFreeString");
6267
6268 has_i8 = GetProcAddress(hOleaut32, "VarI8FromI1") != NULL;
6269 has_locales = has_i8 && GetProcAddress(hOleaut32, "GetVarConversionLocaleSetting") != NULL;
6270
6271 trace("LCIDs: System=0x%08lx, User=0x%08lx\n", GetSystemDefaultLCID(),
6273
6275
6293
6310
6327
6344
6361
6378
6394
6410
6427
6445
6462
6476
6477 test_VarCyAdd();
6478 test_VarCyMul();
6479 test_VarCySub();
6480 test_VarCyAbs();
6481 test_VarCyNeg();
6484 test_VarCyCmp();
6487 test_VarCyFix();
6488 test_VarCyInt();
6489
6505
6515
6532
6547 test_BstrCopy();
6549
6553
6557
6562
6564
6567
6568 test_recinfo();
6569}
#define trace
Definition: atltest.h:70
#define GetProcAddress(x, y)
Definition: compat.h:753
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1216
LCID WINAPI GetSystemDefaultLCID(void)
Definition: locale.c:1235
static void test_VarDateFromR8(void)
Definition: vartype.c:2806
static void test_VarUI1FromBool(void)
Definition: vartype.c:722
static void test_VarI1FromStr(void)
Definition: vartype.c:609
static void test_VarBoolChangeTypeEx(void)
Definition: vartype.c:4452
static void test_VarUI8FromR8(void)
Definition: vartype.c:2157
static void test_VarUI2FromDate(void)
Definition: vartype.c:1315
static void test_VarDateFromI8(void)
Definition: vartype.c:2846
static void test_VarUI1Copy(void)
Definition: vartype.c:925
static void test_IDispatchChangeTypeEx(void)
Definition: vartype.c:5713
static void test_VarI1ChangeTypeEx(void)
Definition: vartype.c:638
static void test_VarI2FromI8(void)
Definition: vartype.c:970
static void test_VarR4FromI8(void)
Definition: vartype.c:2408
static void test_VarBoolFromStr(void)
Definition: vartype.c:4369
static void test_VarI1FromBool(void)
Definition: vartype.c:484
static void test_VarUI1FromDec(void)
Definition: vartype.c:825
static void test_VarR8ChangeTypeEx(void)
Definition: vartype.c:2675
static void test_VarI4FromUI8(void)
Definition: vartype.c:1481
static void test_VarI8FromUI4(void)
Definition: vartype.c:1916
static void test_VarDateFromI4(void)
Definition: vartype.c:2767
static void test_VarDateFromBool(void)
Definition: vartype.c:2816
static void test_VarCyAbs(void)
Definition: vartype.c:3442
static void test_VarDateFromDec(void)
Definition: vartype.c:2869
static void test_VarDecCmp(void)
Definition: vartype.c:4050
static void test_VarI4Copy(void)
Definition: vartype.c:1635
static void test_VarBstrFromCy(void)
Definition: vartype.c:4849
static void test_VarR4FromUI2(void)
Definition: vartype.c:2338
static void test_VarI2FromI1(void)
Definition: vartype.c:952
static void test_VarI2FromDate(void)
Definition: vartype.c:1077
static void test_VarBoolFromUI1(void)
Definition: vartype.c:4234
static void test_VarI1FromUI8(void)
Definition: vartype.c:475
static void test_NullByRef(void)
Definition: vartype.c:5986
static void test_VarBoolFromI2(void)
Definition: vartype.c:4242
static void test_VarI8FromUI2(void)
Definition: vartype.c:1908
static void test_VarUI8ChangeTypeEx(void)
Definition: vartype.c:2287
static void test_VarUI4Copy(void)
Definition: vartype.c:1857
static void test_VarI2FromCy(void)
Definition: vartype.c:1100
static void test_VarI1FromUI2(void)
Definition: vartype.c:457
static void test_VarI4FromUI1(void)
Definition: vartype.c:1455
static void test_VarCyFromDec(void)
Definition: vartype.c:3332
static void test_VarI1FromUI1(void)
Definition: vartype.c:448
static void test_VarDecFromUI8(void)
Definition: vartype.c:3727
static void test_VarBoolFromI4(void)
Definition: vartype.c:4258
static void test_VarDecFromI2(void)
Definition: vartype.c:3661
static void test_VarUI2FromR8(void)
Definition: vartype.c:1290
static void test_VarR8FromDec(void)
Definition: vartype.c:2618
static void test_VarI8FromCy(void)
Definition: vartype.c:2003
static void test_VarBstrFromR4(void)
Definition: vartype.c:4534
static void test_VarUI1FromStr(void)
Definition: vartype.c:841
static void test_VarUI8FromUI4(void)
Definition: vartype.c:2130
static void test_VarUI2FromI8(void)
Definition: vartype.c:1219
static void test_VarI8ChangeTypeEx(void)
Definition: vartype.c:2072
static void test_VarI2FromUI4(void)
Definition: vartype.c:997
static void test_VarI4FromCy(void)
Definition: vartype.c:1566
static void test_VarR8FromUI4(void)
Definition: vartype.c:2544
static void test_VarUI2FromI2(void)
Definition: vartype.c:1199
static void test_VarBoolFromUI8(void)
Definition: vartype.c:4332
static void test_VarR4ChangeTypeEx(void)
Definition: vartype.c:2480
static void test_VarI8FromR8(void)
Definition: vartype.c:1945
static void test_VarR4FromBool(void)
Definition: vartype.c:2380
static void test_VarUI4FromBool(void)
Definition: vartype.c:1723
static void test_IDispatchClear(void)
Definition: vartype.c:5638
static void test_VarUI8FromDec(void)
Definition: vartype.c:2231
static void test_VarR4FromUI1(void)
Definition: vartype.c:2322
static void test_VarR8FromCy(void)
Definition: vartype.c:2573
static void test_VarUI1FromR4(void)
Definition: vartype.c:733
static void test_VarDecFromBool(void)
Definition: vartype.c:3738
static void test_IUnknownCopy(void)
Definition: vartype.c:5509
static void test_UintChangeTypeEx(void)
Definition: vartype.c:5953
static HMODULE hOleaut32
Definition: vartype.c:60
static void test_VarUI2FromUI8(void)
Definition: vartype.c:1247
static void test_VarUI4FromDec(void)
Definition: vartype.c:1817
static void test_VarDecFromR4(void)
Definition: vartype.c:3754
static void test_VarBstrCat(void)
Definition: vartype.c:5372
static void test_VarI4FromStr(void)
Definition: vartype.c:1610
static void test_VarDecFromStr(void)
Definition: vartype.c:3793
static void test_VarUI1FromCy(void)
Definition: vartype.c:804
static void test_VarDecFromCy(void)
Definition: vartype.c:3811
static void test_VarR4FromUI8(void)
Definition: vartype.c:2417
static void test_VarBoolFromCy(void)
Definition: vartype.c:4310
static void test_VarBstrFromDec(void)
Definition: vartype.c:4900
static void test_VarI4FromUI2(void)
Definition: vartype.c:1463
static void test_VarI2FromR8(void)
Definition: vartype.c:1050
static void test_VarUI2FromI1(void)
Definition: vartype.c:1190
static void test_VarI8FromUI1(void)
Definition: vartype.c:1892
static void test_VarCyFix(void)
Definition: vartype.c:3573
static void test_VarI8FromR4(void)
Definition: vartype.c:1925
static void test_VarUI4FromI8(void)
Definition: vartype.c:1684
static void test_VarR8FromStr(void)
Definition: vartype.c:2645
static void test_VarCyFromBool(void)
Definition: vartype.c:3296
static void test_VarUI1FromUI8(void)
Definition: vartype.c:713
static void test_SysAllocStringByteLen(void)
Definition: vartype.c:5133
static void test_VarUI4FromI1(void)
Definition: vartype.c:1658
static void test_VarR8FromI4(void)
Definition: vartype.c:2533
static void test_VarUI2FromUI1(void)
Definition: vartype.c:1230
static void test_VarCyMulI4(void)
Definition: vartype.c:3465
static void test_VarUI1FromI8(void)
Definition: vartype.c:685
static void test_VarR8FromI8(void)
Definition: vartype.c:2595
static void test_VarDecFromUI2(void)
Definition: vartype.c:3705
static void test_VarR8FromBool(void)
Definition: vartype.c:2565
static void test_VarBoolFromI1(void)
Definition: vartype.c:4226
static void test_VarCyFromI1(void)
Definition: vartype.c:3161
static void test_VarCyFromUI8(void)
Definition: vartype.c:3320
static void test_VarUI2FromBool(void)
Definition: vartype.c:1256
static void test_VarUI1FromUI2(void)
Definition: vartype.c:695
static void test_VarI8FromDec(void)
Definition: vartype.c:2023
static void test_VarUI8FromUI1(void)
Definition: vartype.c:2105
static void test_VarI8FromI2(void)
Definition: vartype.c:1900
static void test_VarCyFromR8(void)
Definition: vartype.c:3256
static void test_VarR4FromR8(void)
Definition: vartype.c:2368
static void test_VarR4FromCy(void)
Definition: vartype.c:2388
static void test_VarI4FromR8(void)
Definition: vartype.c:1518
static void test_VarDecFromI1(void)
Definition: vartype.c:3650
static void test_VarUI4FromUI1(void)
Definition: vartype.c:1695
static void test_VarR4FromI1(void)
Definition: vartype.c:2314
static void test_VarCyFromI4(void)
Definition: vartype.c:3205
static void test_VarCyFromUI2(void)
Definition: vartype.c:3194
static void test_VarDecFromDate(void)
Definition: vartype.c:3780
static void test_NullChangeTypeEx(void)
Definition: vartype.c:5877
static void test_SysStringByteLen(void)
Definition: vartype.c:5064
static void test_VarR4FromUI4(void)
Definition: vartype.c:2357
static void test_VarUI4FromR8(void)
Definition: vartype.c:1753
static void test_ChangeType_keep_dst(void)
Definition: vartype.c:6017
static void test_VarR8FromUI1(void)
Definition: vartype.c:2509
static void test_VarUI2FromR4(void)
Definition: vartype.c:1265
static void test_VarDecFromR8(void)
Definition: vartype.c:3767
static void test_VarCyFromDate(void)
Definition: vartype.c:3358
static void test_VarR4FromStr(void)
Definition: vartype.c:2453
static void test_VarUI8Copy(void)
Definition: vartype.c:2276
static void test_VarBoolFromR8(void)
Definition: vartype.c:4298
static void test_VarI8FromBool(void)
Definition: vartype.c:1985
static void test_VarCyFromI8(void)
Definition: vartype.c:3307
static void test_SysAllocString(void)
Definition: vartype.c:5075
static void test_VarCyFromR4(void)
Definition: vartype.c:3225
static void test_VarDecAdd(void)
Definition: vartype.c:3861
static void test_VarUI8FromI8(void)
Definition: vartype.c:2203
static void test_VarUI4FromStr(void)
Definition: vartype.c:1833
static void test_VarCyAdd(void)
Definition: vartype.c:3402
static void test_IDispatchCopy(void)
Definition: vartype.c:5666
static void test_VarUI4FromCy(void)
Definition: vartype.c:1797
static void test_VarCyFromUI1(void)
Definition: vartype.c:3172
static void test_VarDecSub(void)
Definition: vartype.c:3941
static void test_VarDecDiv(void)
Definition: vartype.c:4001
static void test_VarUI8FromStr(void)
Definition: vartype.c:2251
static BOOL has_locales
Definition: vartype.c:65
static void test_VarI1FromUI4(void)
Definition: vartype.c:466
static void test_VarR4Copy(void)
Definition: vartype.c:2475
static void test_VarUI4FromUI8(void)
Definition: vartype.c:1713
static void test_VarDateFromUI8(void)
Definition: vartype.c:2859
static void test_VarI2FromBool(void)
Definition: vartype.c:1015
static void test_VarI1FromCy(void)
Definition: vartype.c:569
static void test_VarBstrCmp(void)
Definition: vartype.c:4962
static void test_VarDateFromUI4(void)
Definition: vartype.c:2784
static void test_VarI8FromUI8(void)
Definition: vartype.c:1993
static void test_VarCyMul(void)
Definition: vartype.c:3416
static void test_VarI8Copy(void)
Definition: vartype.c:2061
static void test_ClearCustData(void)
Definition: vartype.c:5973
static void test_VarBstrFromI4(void)
Definition: vartype.c:4494
static void test_VarBoolFromR4(void)
Definition: vartype.c:4278
static void test_IUnknownChangeTypeEx(void)
Definition: vartype.c:5558
static void test_bstr_cache(void)
Definition: vartype.c:6048
static void test_VarDateFromI2(void)
Definition: vartype.c:2751
static void test_VarDecFromI4(void)
Definition: vartype.c:3672
static void test_VarUI4FromI2(void)
Definition: vartype.c:1667
static void test_BstrCopy(void)
Definition: vartype.c:5346
static void test_VarUI1FromDisp(void)
Definition: vartype.c:865
static void test_VarR8FromDate(void)
Definition: vartype.c:2636
static void test_VarDateFromUI2(void)
Definition: vartype.c:2759
static void test_VarUI1FromI1(void)
Definition: vartype.c:656
static void test_VarI4ChangeTypeEx(void)
Definition: vartype.c:1640
static void test_VarI4FromR4(void)
Definition: vartype.c:1499
static void test_VarUI2FromUI4(void)
Definition: vartype.c:1238
static void test_VarCyRound(void)
Definition: vartype.c:3541
static void test_VarI2FromUI2(void)
Definition: vartype.c:988
static void test_VarUI2FromStr(void)
Definition: vartype.c:1374
static void test_VarI2FromUI8(void)
Definition: vartype.c:1006
static void test_VarUI4FromI4(void)
Definition: vartype.c:1703
static void test_VarBoolFromUI4(void)
Definition: vartype.c:4269
static void test_VarUI2FromI4(void)
Definition: vartype.c:1208
static void test_VarI1FromR4(void)
Definition: vartype.c:495
static void test_VarDateFromI1(void)
Definition: vartype.c:2735
static void test_VarUI8FromUI2(void)
Definition: vartype.c:2122
static void test_VarUI1FromUI4(void)
Definition: vartype.c:704
static void test_VarR8FromUI2(void)
Definition: vartype.c:2525
static void test_VarUI2Copy(void)
Definition: vartype.c:1398
static void test_VarI4FromI1(void)
Definition: vartype.c:1425
static void test_VarI2FromDec(void)
Definition: vartype.c:1123
static void test_VarUI2FromDec(void)
Definition: vartype.c:1357
static void test_VarUI1FromR8(void)
Definition: vartype.c:758
static void test_VarR4FromI2(void)
Definition: vartype.c:2330
static void test_VarUI8FromBool(void)
Definition: vartype.c:2195
static void test_VarCyCmpR8(void)
Definition: vartype.c:3517
static void test_VarI2FromI4(void)
Definition: vartype.c:960
static void test_EmptyChangeTypeEx(void)
Definition: vartype.c:5805
static void test_VarUI8FromI1(void)
Definition: vartype.c:2096
static void test_VarUI8FromI2(void)
Definition: vartype.c:2113
static void test_VarUI4FromUI2(void)
Definition: vartype.c:1676
static void test_SysReAllocStringLen(void)
Definition: vartype.c:5262
static void test_VarCyFromUI4(void)
Definition: vartype.c:3216
static void test_VarI4FromDate(void)
Definition: vartype.c:1544
static void test_VarDecMul(void)
Definition: vartype.c:3951
static void test_VarR8FromUI8(void)
Definition: vartype.c:2607
static void test_IUnknownClear(void)
Definition: vartype.c:5481
static void test_VarUI2FromCy(void)
Definition: vartype.c:1336
static void test_VarCyFromI2(void)
Definition: vartype.c:3183
static void test_VarR8Copy(void)
Definition: vartype.c:2670
static void test_VarR4FromDec(void)
Definition: vartype.c:2425
static void test_VarUI8FromR4(void)
Definition: vartype.c:2138
static void test_VarDateFromUI1(void)
Definition: vartype.c:2743
static void test_VarI2FromUI1(void)
Definition: vartype.c:980
static void test_VarI4FromI2(void)
Definition: vartype.c:1433
static void test_VarR8FromI2(void)
Definition: vartype.c:2517
static void test_VarI1FromDate(void)
Definition: vartype.c:547
static void test_VarDecFromUI4(void)
Definition: vartype.c:3716
static void test_VarUI4FromR4(void)
Definition: vartype.c:1731
static void test_VarDecNeg(void)
Definition: vartype.c:3846
static void test_VarI1Copy(void)
Definition: vartype.c:633
static void test_VarI2ChangeTypeEx(void)
Definition: vartype.c:1172
static void test_VarBoolFromDec(void)
Definition: vartype.c:4340
static void test_VarI1FromI4(void)
Definition: vartype.c:428
static void test_VarBoolFromDate(void)
Definition: vartype.c:4360
static void test_VarR8FromI1(void)
Definition: vartype.c:2501
static void test_VarUI1FromDate(void)
Definition: vartype.c:783
static void test_VarCyInt(void)
Definition: vartype.c:3598
static void test_VarDecRound(void)
Definition: vartype.c:4185
static void test_VarDateFromStr(void)
Definition: vartype.c:2925
static void test_VarI8FromStr(void)
Definition: vartype.c:2039
static void test_VarUI1FromI2(void)
Definition: vartype.c:665
static void test_SysAllocStringLen(void)
Definition: vartype.c:5098
static void test_VarUI8FromDate(void)
Definition: vartype.c:2176
static void test_VarDecFromUI1(void)
Definition: vartype.c:3694
static void test_VarBoolFromI8(void)
Definition: vartype.c:4323
static void test_VarI1FromI2(void)
Definition: vartype.c:418
static void test_VarI2Copy(void)
Definition: vartype.c:1167
static void test_VarI4FromDec(void)
Definition: vartype.c:1589
static void test_VarDecAbs(void)
Definition: vartype.c:3832
static void test_SysReAllocString(void)
Definition: vartype.c:5224
static void test_VarI4FromI8(void)
Definition: vartype.c:1441
static void test_SysStringLen(void)
Definition: vartype.c:5053
static void test_VarI8FromDate(void)
Definition: vartype.c:1965
static void test_VarUI2ChangeTypeEx(void)
Definition: vartype.c:1403
static void test_VarUI4FromDate(void)
Definition: vartype.c:1777
static void test_VarCySub(void)
Definition: vartype.c:3428
static void test_VarI4FromBool(void)
Definition: vartype.c:1491
static void test_VarBstrFromDate(void)
Definition: vartype.c:4805
static void test_VarUI1ChangeTypeEx(void)
Definition: vartype.c:930
static void test_VarI1FromI8(void)
Definition: vartype.c:438
static void test_VarCyCmp(void)
Definition: vartype.c:3495
static void test_VarBstrFromR8(void)
Definition: vartype.c:4682
static void test_VarBoolFromUI2(void)
Definition: vartype.c:4250
static void test_VarUI4ChangeTypeEx(void)
Definition: vartype.c:1862
static void test_VarDateFromCy(void)
Definition: vartype.c:2824
static void test_VarI1FromDec(void)
Definition: vartype.c:591
static void test_VarI4FromUI4(void)
Definition: vartype.c:1471
static void test_VarUI8FromCy(void)
Definition: vartype.c:2212
static void test_VarCyNeg(void)
Definition: vartype.c:3452
static void test_VarR8Round(void)
Definition: vartype.c:2691
static void test_ErrorChangeTypeEx(void)
Definition: vartype.c:5764
static void test_VarR8FromR4(void)
Definition: vartype.c:2553
static void test_VarR4FromDate(void)
Definition: vartype.c:2444
static void test_VarR4FromI4(void)
Definition: vartype.c:2346
static void test_VarI1FromR8(void)
Definition: vartype.c:521
static void test_VarUI1FromI4(void)
Definition: vartype.c:675
static void test_VarBoolCopy(void)
Definition: vartype.c:4440
static void test_VarDateChangeTypeEx(void)
Definition: vartype.c:3102
static void test_VarDateFromR4(void)
Definition: vartype.c:2796
static void test_VarI2FromR4(void)
Definition: vartype.c:1023
static void test_VarI2FromStr(void)
Definition: vartype.c:1142
static void test_VarDateCopy(void)
Definition: vartype.c:3089
static void test_VarDecCmpR8(void)
Definition: vartype.c:4155
static void test_recinfo(void)
Definition: vartype.c:6126
static void test_VarDecFromI8(void)
Definition: vartype.c:3683
static void test_VarCyMulI8(void)
Definition: vartype.c:3480
static void test_VarI8FromI1(void)
Definition: vartype.c:1884

◆ test_bstr_cache()

static void test_bstr_cache ( void  )
static

Definition at line 6048 of file vartype.c.

6049{
6050 BSTR str, str2, strs[20];
6051 unsigned i;
6052
6053 static const WCHAR testW[] = {'t','e','s','t',0};
6054
6055 if (GetEnvironmentVariableA("OANOCACHE", NULL, 0)) {
6056 skip("BSTR cache is disabled, some tests will be skipped.\n");
6057 return;
6058 }
6059
6061 /* This should put the string into cache */
6062 pSysFreeString(str);
6063 /* The string is in cache, this won't touch it */
6064 pSysFreeString(str);
6065
6066 ok(SysStringLen(str) == 4, "unexpected len\n");
6067 ok(!lstrcmpW(str, testW), "string changed\n");
6068
6070 ok(str == str2, "str != str2\n");
6072
6073 /* Fill the bucket with cached entries.
6074 We roll our own, to show that the cache doesn't use
6075 the bstr length field to determine bucket allocation. */
6076 for(i=0; i < ARRAY_SIZE(strs); i++)
6077 {
6079 ptr[0] = 0;
6080 strs[i] = (BSTR)(ptr + 1);
6081 }
6082 for(i=0; i < ARRAY_SIZE(strs); i++)
6083 SysFreeString(strs[i]);
6084
6085 /* Following allocation will be made from cache */
6086 str = SysAllocStringLen(NULL, 24);
6087 ok(str == strs[0], "str != strs[0]\n");
6088
6089 /* Smaller buffers may also use larger cached buffers */
6091 ok(str2 == strs[1], "str2 != strs[1]\n");
6092
6093 pSysFreeString(str);
6094 pSysFreeString(str2);
6097}
#define skip(...)
Definition: atltest.h:64
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
#define GetEnvironmentVariableA(x, y, z)
Definition: compat.h:754
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
static PVOID ptr
Definition: dispmode.c:27
static const WCHAR testW[]
Definition: typelib.c:1450
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
UINT WINAPI SysStringLen(BSTR str)
Definition: oleaut.c:196
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
short WCHAR
Definition: pedump.c:58
XML_HIDDEN void xmlParserErrors const char const xmlChar const xmlChar * str2
Definition: parser.h:35
uint32_t DWORD_PTR
Definition: typedefs.h:65

Referenced by START_TEST().

◆ test_BstrCopy()

static void test_BstrCopy ( void  )
static

Definition at line 5346 of file vartype.c.

5347{
5348 const CHAR szTestA[6] = { 'T','e','s','t','\0','?' };
5349 const CHAR szTestTruncA[4] = { 'T','e','s','\0' };
5350 LPINTERNAL_BSTR bstr;
5351 BSTR str;
5352 HRESULT hres;
5353 VARIANT vt1, vt2;
5354
5355 str = SysAllocStringByteLen(szTestA, 3);
5356 ok (str != NULL, "Expected non-NULL\n");
5357 if (str)
5358 {
5359 V_VT(&vt1) = VT_BSTR;
5360 V_BSTR(&vt1) = str;
5361 V_VT(&vt2) = VT_EMPTY;
5362 hres = VariantCopy(&vt2, &vt1);
5363 ok (hres == S_OK,"Failed to copy binary bstring with hres 0x%08lx\n", hres);
5364 bstr = Get(V_BSTR(&vt2));
5365 ok (bstr->dwLen == 3, "Expected 3, got %ld\n", bstr->dwLen);
5366 ok (!lstrcmpA((LPCSTR)bstr->szString, szTestTruncA), "String different\n");
5367 VariantClear(&vt2);
5368 VariantClear(&vt1);
5369 }
5370}
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4104
static LPINTERNAL_BSTR Get(const BSTR lpszString)
Definition: vartype.c:5043
BSTR WINAPI DECLSPEC_HOTPATCH SysAllocStringByteLen(LPCSTR str, UINT len)
Definition: oleaut.c:428
char CHAR
Definition: pedump.c:57
const char * LPCSTR
Definition: typedefs.h:52
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

Referenced by START_TEST().

◆ test_ChangeType_keep_dst()

static void test_ChangeType_keep_dst ( void  )
static

Definition at line 6017 of file vartype.c.

6018{
6019 VARIANT v1, v2;
6020 BSTR bstr;
6021 static const WCHAR testW[] = {'t','e','s','t',0};
6022 HRESULT hres;
6023
6024 bstr = SysAllocString(testW);
6025 VariantInit(&v1);
6026 VariantInit(&v2);
6027 V_VT(&v1) = VT_BSTR;
6028 V_BSTR(&v1) = bstr;
6029 hres = VariantChangeTypeEx(&v1, &v1, 0, 0, VT_INT);
6030 ok(hres == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx returns %08lx\n", hres);
6031 ok(V_VT(&v1) == VT_BSTR && V_BSTR(&v1) == bstr, "VariantChangeTypeEx changed dst variant\n");
6032 V_VT(&v2) = VT_INT;
6033 V_INT(&v2) = 4;
6034 hres = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_INT);
6035 ok(hres == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx returns %08lx\n", hres);
6036 ok(V_VT(&v2) == VT_INT && V_INT(&v2) == 4, "VariantChangeTypeEx changed dst variant\n");
6037 V_VT(&v2) = 0xff; /* incorrect variant type */
6038 hres = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_INT);
6039 ok(hres == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx returns %08lx\n", hres);
6040 ok(V_VT(&v2) == 0xff, "VariantChangeTypeEx changed dst variant\n");
6041 hres = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_BSTR);
6042 ok(hres == DISP_E_BADVARTYPE, "VariantChangeTypeEx returns %08lx\n", hres);
6043 ok(V_VT(&v2) == 0xff, "VariantChangeTypeEx changed dst variant\n");
6044 SysFreeString(bstr);
6045}
GLfloat GLfloat v1
Definition: glext.h:6062
GLfloat GLfloat GLfloat v2
Definition: glext.h:6063
#define DISP_E_BADVARTYPE
Definition: winerror.h:3620
#define DISP_E_TYPEMISMATCH
Definition: winerror.h:3617

Referenced by START_TEST().

◆ test_ClearCustData()

static void test_ClearCustData ( void  )
static

Definition at line 5973 of file vartype.c.

5974{
5975 CUSTDATA ci;
5976 unsigned i;
5977
5978 ci.cCustData = NUM_CUST_ITEMS;
5979 ci.prgCustData = CoTaskMemAlloc( sizeof(CUSTDATAITEM) * NUM_CUST_ITEMS );
5980 for (i = 0; i < NUM_CUST_ITEMS; i++)
5981 VariantInit(&ci.prgCustData[i].varValue);
5982 ClearCustData(&ci);
5983 ok(!ci.cCustData && !ci.prgCustData, "ClearCustData didn't clear fields!\n");
5984}
void WINAPI ClearCustData(CUSTDATA *lpCust)
Definition: typelib.c:11635
#define NUM_CUST_ITEMS
Definition: vartype.c:5971

Referenced by START_TEST().

◆ test_EmptyChangeTypeEx()

static void test_EmptyChangeTypeEx ( void  )
static

Definition at line 5805 of file vartype.c.

5806{
5807 VARTYPE vt;
5808 LCID lcid;
5809
5811
5812 for (vt = VT_EMPTY; vt <= VT_BSTR_BLOB; vt++)
5813 {
5814 HRESULT hExpected, hres;
5815 VARIANTARG vSrc, vDst;
5816
5817 /* skip for undefined types */
5818 if ((vt == 15) || (vt > VT_VERSIONED_STREAM && vt < VT_BSTR_BLOB))
5819 continue;
5820
5821 switch (vt)
5822 {
5823 case VT_I8:
5824 case VT_UI8:
5825 if (has_i8)
5826 hExpected = S_OK;
5827 else
5828 hExpected = DISP_E_BADVARTYPE;
5829 break;
5830 case VT_RECORD:
5831 case VT_VARIANT:
5832 case VT_DISPATCH:
5833 case VT_UNKNOWN:
5834 case VT_ERROR:
5835 hExpected = DISP_E_TYPEMISMATCH;
5836 break;
5837 case VT_EMPTY:
5838 case VT_NULL:
5839 case VT_I2:
5840 case VT_I4:
5841 case VT_R4:
5842 case VT_R8:
5843 case VT_CY:
5844 case VT_DATE:
5845 case VT_BSTR:
5846 case VT_BOOL:
5847 case VT_DECIMAL:
5848 case VT_I1:
5849 case VT_UI1:
5850 case VT_UI2:
5851 case VT_UI4:
5852 case VT_INT:
5853 case VT_UINT:
5854 hExpected = S_OK;
5855 break;
5856 default:
5857 hExpected = DISP_E_BADVARTYPE;
5858 }
5859
5860 VariantInit(&vSrc);
5861 V_VT(&vSrc) = VT_EMPTY;
5862 memset(&vDst, 0, sizeof(vDst));
5863 V_VT(&vDst) = VT_NULL;
5864
5865 hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt);
5866 ok(hres == hExpected, "change empty: vt %d expected 0x%08lx, got 0x%08lx, vt %d\n",
5867 vt, hExpected, hres, V_VT(&vDst));
5868 if (hres == S_OK)
5869 {
5870 ok(V_VT(&vDst) == vt, "change empty: vt %d, got %d\n", vt, V_VT(&vDst));
5871 VariantClear(&vDst);
5872 }
5873 }
5874}
unsigned short VARTYPE
Definition: compat.h:2254
@ VT_NULL
Definition: compat.h:2296
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_ERROR
Definition: compat.h:2305
@ VT_BSTR_BLOB
Definition: compat.h:2339
@ VT_VERSIONED_STREAM
Definition: compat.h:2338
@ VT_CY
Definition: compat.h:2301
@ VT_BOOL
Definition: compat.h:2306
@ VT_RECORD
Definition: compat.h:2326
@ VT_DISPATCH
Definition: compat.h:2304

Referenced by START_TEST().

◆ test_ErrorChangeTypeEx()

static void test_ErrorChangeTypeEx ( void  )
static

Definition at line 5764 of file vartype.c.

5765{
5766 HRESULT hres;
5767 VARIANTARG vSrc, vDst;
5768 VARTYPE vt;
5769 LCID lcid;
5770
5772
5773 for (vt = 0; vt <= VT_BSTR_BLOB; vt++)
5774 {
5775 HRESULT hExpected = DISP_E_BADVARTYPE;
5776
5777 V_VT(&vSrc) = VT_ERROR;
5778 V_ERROR(&vSrc) = 1;
5779 VariantInit(&vDst);
5780 hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt);
5781
5782 if (vt == VT_ERROR)
5783 hExpected = S_OK;
5784 else
5785 {
5786 if (vt == VT_I8 || vt == VT_UI8)
5787 {
5788 if (has_i8)
5789 hExpected = DISP_E_TYPEMISMATCH;
5790 }
5791 else if (vt == VT_RECORD)
5792 {
5793 hExpected = DISP_E_TYPEMISMATCH;
5794 }
5795 else if (vt <= VT_UINT && vt != (VARTYPE)15)
5796 hExpected = DISP_E_TYPEMISMATCH;
5797 }
5798
5799 ok(hres == hExpected,
5800 "change err: vt %d expected 0x%08lx, got 0x%08lx\n", vt, hExpected, hres);
5801 }
5802}
#define V_ERROR(A)
Definition: oleauto.h:241

Referenced by START_TEST().

◆ test_IDispatchChangeTypeEx()

static void test_IDispatchChangeTypeEx ( void  )
static

Definition at line 5713 of file vartype.c.

5714{
5715 HRESULT hres;
5716 VARIANTARG vSrc, vDst;
5717 LCID lcid;
5719 IDispatch* pd;
5720
5722 pd = &d.IDispatch_iface;
5723
5725
5726 /* NULL IDispatch -> IUnknown */
5727 V_VT(&vSrc) = VT_DISPATCH;
5728 V_DISPATCH(&vSrc) = NULL;
5729 VariantInit(&vDst);
5730 V_UNKNOWN(&vDst) = (void*)0xdeadbeef;
5731 hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, VT_UNKNOWN);
5732 ok(hres == S_OK && V_VT(&vDst) == VT_UNKNOWN && V_UNKNOWN(&vDst) == NULL,
5733 "change unk(src,dst): expected 0x%08lx,%d,%p, got 0x%08lx,%d,%p\n",
5734 S_OK, VT_UNKNOWN, NULL, hres, V_VT(&vDst), V_UNKNOWN(&vDst));
5735
5736 V_VT(&vSrc) = VT_DISPATCH;
5737 V_DISPATCH(&vSrc) = pd;
5738
5739 /* =>IUnknown in place */
5740 hres = VariantChangeTypeEx(&vSrc, &vSrc, lcid, 0, VT_UNKNOWN);
5741 ok(hres == S_OK && d.ref == 1 &&
5742 V_VT(&vSrc) == VT_UNKNOWN && V_UNKNOWN(&vSrc) == (IUnknown*)pd,
5743 "change disp(src=src): expected 0x%08lx,%d,%d,%p, got 0x%08lx,%ld,%d,%p\n",
5744 S_OK, 1, VT_UNKNOWN, pd, hres, d.ref, V_VT(&vSrc), V_UNKNOWN(&vSrc));
5745
5746 /* =>IUnknown */
5747 d.ref = 1;
5748 V_VT(&vSrc) = VT_DISPATCH;
5749 V_DISPATCH(&vSrc) = pd;
5750 VariantInit(&vDst);
5751 hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, VT_UNKNOWN);
5752 /* Note vSrc is not cleared, as final refcount is 2 */
5753 ok(hres == S_OK && d.ref == 2 &&
5754 V_VT(&vDst) == VT_UNKNOWN && V_UNKNOWN(&vDst) == (IUnknown*)pd,
5755 "change disp(src,dst): expected 0x%08lx,%d,%d,%p, got 0x%08lx,%ld,%d,%p\n",
5756 S_OK, 2, VT_UNKNOWN, pd, hres, d.ref, V_VT(&vDst), V_UNKNOWN(&vDst));
5757
5758 /* FIXME: Verify that VARIANT_NOVALUEPROP prevents conversion to integral
5759 * types. this requires that the xxxFromDisp tests work first.
5760 */
5761}
#define d
Definition: ke_i.h:81
static void init_test_dispatch(LONG ref, VARTYPE vt, DummyDispatch *dispatch)
Definition: vartype.c:401
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define V_DISPATCH(A)
Definition: oleauto.h:239

Referenced by START_TEST().

◆ test_IDispatchClear()

static void test_IDispatchClear ( void  )
static

Definition at line 5638 of file vartype.c.

5639{
5640 HRESULT hres;
5641 VARIANTARG v;
5643 IDispatch* pd;
5644
5646 pd = &d.IDispatch_iface;
5647
5648 /* As per IUnknown */
5649
5650 V_VT(&v) = VT_DISPATCH;
5651 V_DISPATCH(&v) = pd;
5652 hres = VariantClear(&v);
5653 ok(hres == S_OK && d.ref == 0 && V_VT(&v) == VT_EMPTY,
5654 "clear dispatch: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5655 S_OK, 0, VT_EMPTY, hres, d.ref, V_VT(&v));
5656
5657 d.ref = 1;
5659 V_DISPATCHREF(&v) = &pd;
5660 hres = VariantClear(&v);
5661 ok(hres == S_OK && d.ref == 1 && V_VT(&v) == VT_EMPTY,
5662 "clear dispatch: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5663 S_OK, 1, VT_EMPTY, hres, d.ref, V_VT(&v));
5664}
const GLdouble * v
Definition: gl.h:2040
#define V_DISPATCHREF(A)
Definition: oleauto.h:240

Referenced by START_TEST().

◆ test_IDispatchCopy()

static void test_IDispatchCopy ( void  )
static

Definition at line 5666 of file vartype.c.

5667{
5668 HRESULT hres;
5669 VARIANTARG vSrc, vDst;
5671 IDispatch* pd;
5672
5674 pd = &d.IDispatch_iface;
5675
5676 /* As per IUnknown */
5677
5678 VariantInit(&vDst);
5679 V_VT(&vSrc) = VT_DISPATCH;
5680 V_DISPATCH(&vSrc) = pd;
5681 hres = VariantCopy(&vDst, &vSrc);
5682 ok(hres == S_OK && d.ref == 2 && V_VT(&vDst) == VT_DISPATCH,
5683 "copy dispatch: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5684 S_OK, 2, VT_EMPTY, hres, d.ref, V_VT(&vDst));
5685
5686 VariantInit(&vDst);
5687 d.ref = 1;
5688 V_VT(&vSrc) = VT_DISPATCH|VT_BYREF;
5689 V_DISPATCHREF(&vSrc) = &pd;
5690 hres = VariantCopy(&vDst, &vSrc);
5691 ok(hres == S_OK && d.ref == 1 && V_VT(&vDst) == (VT_DISPATCH|VT_BYREF),
5692 "copy dispatch: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5693 S_OK, 1, VT_DISPATCH, hres, d.ref, V_VT(&vDst));
5694
5695 VariantInit(&vDst);
5696 d.ref = 1;
5697 V_VT(&vSrc) = VT_DISPATCH|VT_BYREF;
5698 V_DISPATCHREF(&vSrc) = &pd;
5699 hres = VariantCopyInd(&vDst, &vSrc);
5700 ok(hres == S_OK && d.ref == 2 && V_VT(&vDst) == VT_DISPATCH,
5701 "copy dispatch: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5702 S_OK, 2, VT_DISPATCH, hres, d.ref, V_VT(&vDst));
5703
5704 d.ref = 1;
5705 V_VT(&vSrc) = VT_DISPATCH|VT_BYREF;
5706 V_DISPATCHREF(&vSrc) = &pd;
5707 hres = VariantCopyInd(&vSrc, &vSrc);
5708 ok(hres == S_OK && d.ref == 2 && V_VT(&vSrc) == VT_DISPATCH,
5709 "copy dispatch: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5710 S_OK, 2, VT_DISPATCH, hres, d.ref, V_VT(&vSrc));
5711}

Referenced by START_TEST().

◆ test_IUnknownChangeTypeEx()

static void test_IUnknownChangeTypeEx ( void  )
static

Definition at line 5558 of file vartype.c.

5559{
5560 HRESULT hres;
5561 VARIANTARG vSrc, vDst;
5562 LCID lcid;
5563 VARTYPE vt;
5565 IUnknown* pu;
5566
5568 pu = (IUnknown*)&u.IDispatch_iface;
5569
5571
5572 /* NULL IUnknown -> IDispatch */
5573 V_VT(&vSrc) = VT_UNKNOWN;
5574 V_UNKNOWN(&vSrc) = NULL;
5575 VariantInit(&vDst);
5576 V_DISPATCH(&vDst) = (void*)0xdeadbeef;
5577 hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, VT_DISPATCH);
5578 ok(hres == S_OK && V_VT(&vDst) == VT_DISPATCH && V_DISPATCH(&vDst) == NULL,
5579 "change unk(src,dst): expected 0x%08lx,%d,%p, got 0x%08lx,%d,%p\n",
5580 S_OK, VT_DISPATCH, NULL, hres, V_VT(&vDst), V_DISPATCH(&vDst));
5581
5582 V_VT(&vSrc) = VT_UNKNOWN;
5583 V_UNKNOWN(&vSrc) = pu;
5584
5585 /* =>IDispatch in place */
5586 hres = VariantChangeTypeEx(&vSrc, &vSrc, lcid, 0, VT_DISPATCH);
5587 ok(hres == S_OK && u.ref == 1 &&
5588 V_VT(&vSrc) == VT_DISPATCH && V_DISPATCH(&vSrc) == (IDispatch*)pu,
5589 "change unk(src=src): expected 0x%08lx,%d,%d,%p, got 0x%08lx,%ld,%d,%p\n",
5590 S_OK, 1, VT_DISPATCH, pu, hres, u.ref, V_VT(&vSrc), V_DISPATCH(&vSrc));
5591
5592 /* =>IDispatch */
5593 u.ref = 1;
5594 V_VT(&vSrc) = VT_UNKNOWN;
5595 V_UNKNOWN(&vSrc) = pu;
5596 VariantInit(&vDst);
5597 hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, VT_UNKNOWN);
5598 /* Note vSrc is not cleared, as final refcount is 2 */
5599 ok(hres == S_OK && u.ref == 2 &&
5600 V_VT(&vDst) == VT_UNKNOWN && V_UNKNOWN(&vDst) == pu,
5601 "change unk(src,dst): expected 0x%08lx,%d,%d,%p, got 0x%08lx,%ld,%d,%p\n",
5602 S_OK, 2, VT_UNKNOWN, pu, hres, u.ref, V_VT(&vDst), V_UNKNOWN(&vDst));
5603
5604 /* Can't change unknown to anything else */
5605 for (vt = 0; vt <= VT_BSTR_BLOB; vt++)
5606 {
5607 HRESULT hExpected = DISP_E_BADVARTYPE;
5608
5609 V_VT(&vSrc) = VT_UNKNOWN;
5610 V_UNKNOWN(&vSrc) = pu;
5611 VariantInit(&vDst);
5612
5613 if (vt == VT_UNKNOWN || vt == VT_DISPATCH || vt == VT_EMPTY || vt == VT_NULL)
5614 hExpected = S_OK;
5615 else
5616 {
5617 if (vt == VT_I8 || vt == VT_UI8)
5618 {
5619 if (has_i8)
5620 hExpected = DISP_E_TYPEMISMATCH;
5621 }
5622 else if (vt == VT_RECORD)
5623 {
5624 hExpected = DISP_E_TYPEMISMATCH;
5625 }
5626 else if (vt >= VT_I2 && vt <= VT_UINT && vt != (VARTYPE)15)
5627 hExpected = DISP_E_TYPEMISMATCH;
5628 }
5629
5630 hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt);
5631 ok(hres == hExpected,
5632 "change unk(badvar): vt %d expected 0x%08lx, got 0x%08lx\n",
5633 vt, hExpected, hres);
5634 }
5635}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240

Referenced by START_TEST().

◆ test_IUnknownClear()

static void test_IUnknownClear ( void  )
static

Definition at line 5481 of file vartype.c.

5482{
5483 HRESULT hres;
5484 VARIANTARG v;
5486 IUnknown* pu;
5487
5489 pu = (IUnknown*)&u.IDispatch_iface;
5490
5491 /* Test that IUnknown_Release is called on by-value */
5492 V_VT(&v) = VT_UNKNOWN;
5493 V_UNKNOWN(&v) = (IUnknown*)&u.IDispatch_iface;
5494 hres = VariantClear(&v);
5495 ok(hres == S_OK && u.ref == 0 && V_VT(&v) == VT_EMPTY,
5496 "clear unknown: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5497 S_OK, 0, VT_EMPTY, hres, u.ref, V_VT(&v));
5498
5499 /* But not when clearing a by-reference*/
5500 u.ref = 1;
5502 V_UNKNOWNREF(&v) = &pu;
5503 hres = VariantClear(&v);
5504 ok(hres == S_OK && u.ref == 1 && V_VT(&v) == VT_EMPTY,
5505 "clear dispatch: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5506 S_OK, 1, VT_EMPTY, hres, u.ref, V_VT(&v));
5507}
#define V_UNKNOWNREF(A)
Definition: oleauto.h:282

Referenced by START_TEST().

◆ test_IUnknownCopy()

static void test_IUnknownCopy ( void  )
static

Definition at line 5509 of file vartype.c.

5510{
5511 HRESULT hres;
5512 VARIANTARG vSrc, vDst;
5514 IUnknown* pu;
5515
5517 pu = (IUnknown*)&u.IDispatch_iface;
5518
5519 /* AddRef is called on by-value copy */
5520 VariantInit(&vDst);
5521 V_VT(&vSrc) = VT_UNKNOWN;
5522 V_UNKNOWN(&vSrc) = pu;
5523 hres = VariantCopy(&vDst, &vSrc);
5524 ok(hres == S_OK && u.ref == 2 && V_VT(&vDst) == VT_UNKNOWN,
5525 "copy unknown: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5526 S_OK, 2, VT_EMPTY, hres, u.ref, V_VT(&vDst));
5527
5528 /* AddRef is skipped on copy of by-reference IDispatch */
5529 VariantInit(&vDst);
5530 u.ref = 1;
5531 V_VT(&vSrc) = VT_UNKNOWN|VT_BYREF;
5532 V_UNKNOWNREF(&vSrc) = &pu;
5533 hres = VariantCopy(&vDst, &vSrc);
5534 ok(hres == S_OK && u.ref == 1 && V_VT(&vDst) == (VT_UNKNOWN|VT_BYREF),
5535 "copy unknown: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5536 S_OK, 1, VT_DISPATCH, hres, u.ref, V_VT(&vDst));
5537
5538 /* AddRef is called copying by-reference IDispatch with indirection */
5539 VariantInit(&vDst);
5540 u.ref = 1;
5541 V_VT(&vSrc) = VT_UNKNOWN|VT_BYREF;
5542 V_UNKNOWNREF(&vSrc) = &pu;
5543 hres = VariantCopyInd(&vDst, &vSrc);
5544 ok(hres == S_OK && u.ref == 2 && V_VT(&vDst) == VT_UNKNOWN,
5545 "copy unknown: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5546 S_OK, 2, VT_DISPATCH, hres, u.ref, V_VT(&vDst));
5547
5548 /* Indirection in place also calls AddRef */
5549 u.ref = 1;
5550 V_VT(&vSrc) = VT_UNKNOWN|VT_BYREF;
5551 V_UNKNOWNREF(&vSrc) = &pu;
5552 hres = VariantCopyInd(&vSrc, &vSrc);
5553 ok(hres == S_OK && u.ref == 2 && V_VT(&vSrc) == VT_UNKNOWN,
5554 "copy unknown: expected 0x%08lx, %d, %d, got 0x%08lx, %ld, %d\n",
5555 S_OK, 2, VT_DISPATCH, hres, u.ref, V_VT(&vSrc));
5556}

Referenced by START_TEST().

◆ test_NullByRef()

static void test_NullByRef ( void  )
static

Definition at line 5986 of file vartype.c.

5987{
5988 VARIANT v1, v2;
5989 HRESULT hRes;
5990
5991 VariantInit(&v1);
5992 VariantInit(&v2);
5994 V_BYREF(&v1) = 0;
5995
5996 hRes = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_I4);
5997 ok(hRes == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx should return DISP_E_TYPEMISMATCH\n");
5998
5999 VariantClear(&v1);
6001 V_BYREF(&v1) = 0;
6002 V_VT(&v2) = VT_I4;
6003 V_I4(&v2) = 123;
6004
6005 hRes = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_VARIANT);
6006 ok(hRes == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx should return DISP_E_TYPEMISMATCH\n");
6007 ok(V_VT(&v2) == VT_I4 && V_I4(&v2) == 123, "VariantChangeTypeEx shouldn't change pvargDest\n");
6008
6009 hRes = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_BYREF|VT_I4);
6010 ok(hRes == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx should return DISP_E_TYPEMISMATCH\n");
6011
6012 hRes = VariantChangeTypeEx(&v2, &v1, 0, 0, 0x3847);
6013 ok(hRes == DISP_E_BADVARTYPE, "VariantChangeTypeEx should return DISP_E_BADVARTYPE\n");
6014}
#define V_BYREF(A)
Definition: oleauto.h:228

Referenced by START_TEST().

◆ test_NullChangeTypeEx()

static void test_NullChangeTypeEx ( void  )
static

Definition at line 5877 of file vartype.c.

5878{
5879 VARTYPE vt;
5880 LCID lcid;
5881
5883
5884 for (vt = VT_EMPTY; vt <= VT_BSTR_BLOB; vt++)
5885 {
5886 VARIANTARG vSrc, vDst;
5887 HRESULT hExpected, hres;
5888
5889 /* skip for undefined types */
5890 if ((vt == 15) || (vt > VT_VERSIONED_STREAM && vt < VT_BSTR_BLOB))
5891 continue;
5892
5893 switch (vt)
5894 {
5895 case VT_I8:
5896 case VT_UI8:
5897 if (has_i8)
5898 hExpected = DISP_E_TYPEMISMATCH;
5899 else
5900 hExpected = DISP_E_BADVARTYPE;
5901 break;
5902 case VT_NULL:
5903 hExpected = S_OK;
5904 break;
5905 case VT_EMPTY:
5906 case VT_I2:
5907 case VT_I4:
5908 case VT_R4:
5909 case VT_R8:
5910 case VT_CY:
5911 case VT_DATE:
5912 case VT_BSTR:
5913 case VT_DISPATCH:
5914 case VT_ERROR:
5915 case VT_BOOL:
5916 case VT_VARIANT:
5917 case VT_UNKNOWN:
5918 case VT_DECIMAL:
5919 case VT_I1:
5920 case VT_UI1:
5921 case VT_UI2:
5922 case VT_UI4:
5923 case VT_INT:
5924 case VT_UINT:
5925 case VT_RECORD:
5926 hExpected = DISP_E_TYPEMISMATCH;
5927 break;
5928 default:
5929 hExpected = DISP_E_BADVARTYPE;
5930 }
5931
5932 VariantInit(&vSrc);
5933 V_VT(&vSrc) = VT_NULL;
5934 memset(&vDst, 0, sizeof(vDst));
5935 V_VT(&vDst) = VT_EMPTY;
5936
5937 hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt);
5938 ok(hres == hExpected, "change null: vt %d expected 0x%08lx, got 0x%08lx, vt %d\n",
5939 vt, hExpected, hres, V_VT(&vDst));
5940
5941 /* should work only for VT_NULL -> VT_NULL case */
5942 if (hres == S_OK)
5943 ok(V_VT(&vDst) == VT_NULL, "change null: VT_NULL expected 0x%08lx, got 0x%08lx, vt %d\n",
5944 hExpected, hres, V_VT(&vDst));
5945 else
5946 ok(V_VT(&vDst) == VT_EMPTY, "change null: vt %d expected 0x%08lx, got 0x%08lx, vt %d\n",
5947 vt, hExpected, hres, V_VT(&vDst));
5948 }
5949}

Referenced by START_TEST().

◆ test_recinfo()

static void test_recinfo ( void  )
static

Definition at line 6126 of file vartype.c.

6127{
6128 static const WCHAR testW[] = {'t','e','s','t',0};
6129 static WCHAR teststructW[] = {'t','e','s','t','_','s','t','r','u','c','t',0};
6130 static WCHAR teststruct2W[] = {'t','e','s','t','_','s','t','r','u','c','t','2',0};
6131 static WCHAR teststruct3W[] = {'t','e','s','t','_','s','t','r','u','c','t','3',0};
6132 WCHAR filenameW[MAX_PATH], filename2W[MAX_PATH];
6133 ITypeInfo *typeinfo, *typeinfo2, *typeinfo3;
6134 IRecordInfo *recinfo, *recinfo2, *recinfo3;
6135 struct test_struct teststruct, testcopy;
6136 ITypeLib *typelib, *typelib2;
6137 const char *filename;
6139 TYPEATTR *attr;
6140 MEMBERID memid;
6141 UINT16 found;
6142 HRESULT hr;
6143 ULONG size;
6144 BOOL ret;
6145
6149 ok(hr == S_OK, "got 0x%08lx\n", hr);
6150
6152 MultiByteToWideChar(CP_ACP, 0, filename, -1, filename2W, MAX_PATH);
6153 hr = LoadTypeLibEx(filename2W, REGKIND_NONE, &typelib2);
6154 ok(hr == S_OK, "got 0x%08lx\n", hr);
6155
6156 typeinfo = NULL;
6157 found = 1;
6158 hr = ITypeLib_FindName(typelib, teststructW, 0, &typeinfo, &memid, &found);
6159 ok(hr == S_OK, "got 0x%08lx\n", hr);
6160 ok(typeinfo != NULL, "got %p\n", typeinfo);
6161 hr = ITypeInfo_GetTypeAttr(typeinfo, &attr);
6162 ok(hr == S_OK, "got 0x%08lx\n", hr);
6163 ok(IsEqualGUID(&attr->guid, &UUID_test_struct), "got %s\n", wine_dbgstr_guid(&attr->guid));
6164 ok(attr->typekind == TKIND_RECORD, "got %d\n", attr->typekind);
6165
6166 typeinfo2 = NULL;
6167 found = 1;
6168 hr = ITypeLib_FindName(typelib, teststruct2W, 0, &typeinfo2, &memid, &found);
6169 ok(hr == S_OK, "got 0x%08lx\n", hr);
6170 ok(typeinfo2 != NULL, "got %p\n", typeinfo2);
6171
6172 typeinfo3 = NULL;
6173 found = 1;
6174 hr = ITypeLib_FindName(typelib2, teststruct3W, 0, &typeinfo3, &memid, &found);
6175 ok(hr == S_OK, "got 0x%08lx\n", hr);
6176 ok(typeinfo3 != NULL, "got %p\n", typeinfo3);
6177
6179 ok(hr == S_OK, "got 0x%08lx\n", hr);
6180
6181 hr = GetRecordInfoFromTypeInfo(typeinfo2, &recinfo2);
6182 ok(hr == S_OK, "got 0x%08lx\n", hr);
6183
6184 hr = GetRecordInfoFromTypeInfo(typeinfo3, &recinfo3);
6185 ok(hr == S_OK, "got 0x%08lx\n", hr);
6186
6187 /* IsMatchingType, these two records only differ in GUIDs */
6188 ret = IRecordInfo_IsMatchingType(recinfo, recinfo2);
6189 ok(!ret, "got %d\n", ret);
6190
6191 /* these two have same GUIDs, but different set of fields */
6192 ret = IRecordInfo_IsMatchingType(recinfo2, recinfo3);
6193 ok(ret, "got %d\n", ret);
6194
6195 IRecordInfo_Release(recinfo3);
6196 ITypeInfo_Release(typeinfo3);
6197 IRecordInfo_Release(recinfo2);
6198 ITypeInfo_Release(typeinfo2);
6199
6200 size = 0;
6201 hr = IRecordInfo_GetSize(recinfo, &size);
6202 ok(hr == S_OK, "got 0x%08lx\n", hr);
6203 ok(size == sizeof(struct test_struct), "got size %ld\n", size);
6204 ok(attr->cbSizeInstance == sizeof(struct test_struct), "got instance size %ld\n", attr->cbSizeInstance);
6205 ITypeInfo_ReleaseTypeAttr(typeinfo, attr);
6206
6207 /* RecordInit() */
6208 teststruct.hr = E_FAIL;
6209 teststruct.b = 0x1;
6210 teststruct.disp = (void*)0xdeadbeef;
6211 teststruct.bstr = (void*)0xdeadbeef;
6212
6213 hr = IRecordInfo_RecordInit(recinfo, &teststruct);
6214 ok(hr == S_OK, "got 0x%08lx\n", hr);
6215 ok(teststruct.hr == 0, "got 0x%08lx\n", teststruct.hr);
6216 ok(teststruct.b == 0, "got 0x%08x\n", teststruct.b);
6217 ok(teststruct.disp == NULL, "got %p\n", teststruct.disp);
6218 ok(teststruct.bstr == NULL, "got %p\n", teststruct.bstr);
6219
6221
6222 /* RecordCopy(), interface field reference increased */
6223 teststruct.hr = S_FALSE;
6224 teststruct.b = VARIANT_TRUE;
6225 teststruct.disp = &dispatch.IDispatch_iface;
6226 teststruct.bstr = SysAllocString(testW);
6227 memset(&testcopy, 0, sizeof(testcopy));
6228 hr = IRecordInfo_RecordCopy(recinfo, &teststruct, &testcopy);
6229 ok(hr == S_OK, "got 0x%08lx\n", hr);
6230 ok(testcopy.hr == S_FALSE, "got 0x%08lx\n", testcopy.hr);
6231 ok(testcopy.b == VARIANT_TRUE, "got %d\n", testcopy.b);
6232 ok(testcopy.disp == teststruct.disp, "got %p\n", testcopy.disp);
6233 ok(dispatch.ref == 11, "got %ld\n", dispatch.ref);
6234 ok(testcopy.bstr != teststruct.bstr, "got %p\n", testcopy.bstr);
6235 ok(!lstrcmpW(testcopy.bstr, teststruct.bstr), "got %s, %s\n", wine_dbgstr_w(testcopy.bstr), wine_dbgstr_w(teststruct.bstr));
6236
6237 /* RecordClear() */
6238 hr = IRecordInfo_RecordClear(recinfo, &teststruct);
6239 ok(hr == S_OK, "got 0x%08lx\n", hr);
6240 ok(teststruct.bstr == NULL, "got %p\n", teststruct.bstr);
6241 hr = IRecordInfo_RecordClear(recinfo, &testcopy);
6242 ok(hr == S_OK, "got 0x%08lx\n", hr);
6243 ok(testcopy.bstr == NULL, "got %p\n", testcopy.bstr);
6244
6245 /* now the destination contains the interface pointer */
6246 memset(&testcopy, 0, sizeof(testcopy));
6247 testcopy.disp = &dispatch.IDispatch_iface;
6248 dispatch.ref = 10;
6249
6250 hr = IRecordInfo_RecordCopy(recinfo, &teststruct, &testcopy);
6251 ok(hr == S_OK, "got 0x%08lx\n", hr);
6252 ok(dispatch.ref == 9, "got %ld\n", dispatch.ref);
6253
6254 IRecordInfo_Release(recinfo);
6255
6256 ITypeInfo_Release(typeinfo);
6257 ITypeLib_Release(typelib2);
6258 ITypeLib_Release(typelib);
6260 DeleteFileW(filename2W);
6261}
unsigned short UINT16
Definition: actypes.h:129
#define E_FAIL
Definition: ddrawi.h:102
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
HRESULT WINAPI LoadTypeLibEx(LPCOLESTR szFile, REGKIND regkind, ITypeLib **pptLib)
Definition: typelib.c:473
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizeiptr size
Definition: glext.h:5919
#define wine_dbgstr_w
Definition: kernel32.h:34
static const WCHAR filenameW[]
Definition: amstream.c:41
static const char * create_test_typelib(int res_no)
Definition: vartype.c:6117
@ REGKIND_NONE
Definition: oleauto.h:927
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
HRESULT WINAPI GetRecordInfoFromTypeInfo(ITypeInfo *pTI, IRecordInfo **ppRecInfo)
Definition: recinfo.c:625
Definition: cookie.c:202
@ TKIND_RECORD
Definition: widltypes.h:235
#define S_FALSE
Definition: winerror.h:3451

Referenced by START_TEST().

◆ test_SysAllocString()

static void test_SysAllocString ( void  )
static

Definition at line 5075 of file vartype.c.

5076{
5077 const OLECHAR szTest[5] = { 'T','e','s','t','\0' };
5078 BSTR str;
5079
5081 ok (str == NULL, "Expected NULL, got %p\n", str);
5082
5083 str = SysAllocString(szTest);
5084 ok (str != NULL, "Expected non-NULL\n");
5085 if (str)
5086 {
5087 LPINTERNAL_BSTR bstr = Get(str);
5089 int align = sizeof(void *);
5090
5091 ok (bstr->dwLen == 8, "Expected 8, got %ld\n", bstr->dwLen);
5092 ok (!lstrcmpW(bstr->szString, szTest), "String different\n");
5093 ok ((p & ~(align-1)) == p, "Not aligned to %d\n", align);
5095 }
5096}
WCHAR OLECHAR
Definition: compat.h:2292
int align(int length, int align)
Definition: dsound8.c:36
GLfloat GLfloat p
Definition: glext.h:8902
#define DWORD_PTR
Definition: treelist.c:76

Referenced by START_TEST().

◆ test_SysAllocStringByteLen()

static void test_SysAllocStringByteLen ( void  )
static

Definition at line 5133 of file vartype.c.

5134{
5135 const OLECHAR szTest[10] = { 'T','e','s','t','\0' };
5136 const CHAR szTestA[6] = { 'T','e','s','t','\0','?' };
5137 char *buf;
5138 BSTR str;
5139 int i;
5140
5141 if (sizeof(void *) == 4) /* not limited to 0x80000000 on Win64 */
5142 {
5143 str = SysAllocStringByteLen(szTestA, 0x80000000);
5144 ok (str == NULL, "Expected NULL, got %p\n", str);
5145 }
5146
5147 str = SysAllocStringByteLen(szTestA, 0xffffffff);
5148 ok (str == NULL, "Expected NULL, got %p\n", str);
5149
5151 ok (str != NULL, "Expected non-NULL\n");
5152 if (str)
5153 {
5154 LPINTERNAL_BSTR bstr = Get(str);
5155
5156 ok (bstr->dwLen == 0, "Expected 0, got %ld\n", bstr->dwLen);
5157 ok (!bstr->szString[0], "String not empty\n");
5159 }
5160
5161 str = SysAllocStringByteLen(szTestA, 4);
5162 ok (str != NULL, "Expected non-NULL\n");
5163 if (str)
5164 {
5165 LPINTERNAL_BSTR bstr = Get(str);
5166
5167 ok (bstr->dwLen == 4, "Expected 4, got %ld\n", bstr->dwLen);
5168 ok (!lstrcmpA((LPCSTR)bstr->szString, szTestA), "String different\n");
5170 }
5171
5172 /* Odd lengths are allocated rounded up, but truncated at the right position */
5173 str = SysAllocStringByteLen(szTestA, 3);
5174 ok (str != NULL, "Expected non-NULL\n");
5175 if (str)
5176 {
5177 const CHAR szTestTruncA[4] = { 'T','e','s','\0' };
5178 LPINTERNAL_BSTR bstr = Get(str);
5179
5180 ok (bstr->dwLen == 3, "Expected 3, got %ld\n", bstr->dwLen);
5181 ok (!lstrcmpA((LPCSTR)bstr->szString, szTestTruncA), "String different\n");
5182 ok (!bstr->szString[2], "String not terminated\n");
5184 }
5185
5186 str = SysAllocStringByteLen((LPCSTR)szTest, 8);
5187 ok (str != NULL, "Expected non-NULL\n");
5188 if (str)
5189 {
5190 LPINTERNAL_BSTR bstr = Get(str);
5191
5192 ok (bstr->dwLen == 8, "Expected 8, got %ld\n", bstr->dwLen);
5193 ok (!lstrcmpW(bstr->szString, szTest), "String different\n");
5195 }
5196
5197 /* Make sure terminating null is aligned properly */
5198 buf = HeapAlloc(GetProcessHeap(), 0, 1025);
5199 ok (buf != NULL, "Expected non-NULL\n");
5200 for (i = 0; i < 1024; i++)
5201 {
5202 LPINTERNAL_BSTR bstr;
5203
5205 ok (str != NULL, "Expected non-NULL\n");
5206 bstr = Get(str);
5207 ok (bstr->dwLen == i, "Expected %d, got %ld\n", i, bstr->dwLen);
5208 ok (!bstr->szString[(i+sizeof(WCHAR)-1)/sizeof(WCHAR)], "String not terminated\n");
5210
5211 memset(buf, 0xaa, 1025);
5213 ok (str != NULL, "Expected non-NULL\n");
5214 bstr = Get(str);
5215 ok (bstr->dwLen == i, "Expected %d, got %ld\n", i, bstr->dwLen);
5216 buf[i] = 0;
5217 ok (!lstrcmpA((LPCSTR)bstr->szString, buf), "String different\n");
5218 ok (!bstr->szString[(i+sizeof(WCHAR)-1)/sizeof(WCHAR)], "String not terminated\n");
5220 }
5222}
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751

Referenced by START_TEST().

◆ test_SysAllocStringLen()

static void test_SysAllocStringLen ( void  )
static

Definition at line 5098 of file vartype.c.

5099{
5100 const OLECHAR szTest[5] = { 'T','e','s','t','\0' };
5101 BSTR str;
5102
5103 /* Very early native dlls do not limit the size of strings, so skip this test */
5104 if (0)
5105 {
5106 str = SysAllocStringLen(szTest, 0x80000000);
5107 ok (str == NULL, "Expected NULL, got %p\n", str);
5108 }
5109
5111 ok (str != NULL, "Expected non-NULL\n");
5112 if (str)
5113 {
5114 LPINTERNAL_BSTR bstr = Get(str);
5115
5116 ok (bstr->dwLen == 0, "Expected 0, got %ld\n", bstr->dwLen);
5117 ok (!bstr->szString[0], "String not empty\n");
5119 }
5120
5121 str = SysAllocStringLen(szTest, 4);
5122 ok (str != NULL, "Expected non-NULL\n");
5123 if (str)
5124 {
5125 LPINTERNAL_BSTR bstr = Get(str);
5126
5127 ok (bstr->dwLen == 8, "Expected 8, got %ld\n", bstr->dwLen);
5128 ok (!lstrcmpW(bstr->szString, szTest), "String different\n");
5130 }
5131}

Referenced by START_TEST().

◆ test_SysReAllocString()

static void test_SysReAllocString ( void  )
static

Definition at line 5224 of file vartype.c.

5225{
5226 const OLECHAR szTest[5] = { 'T','e','s','t','\0' };
5227 const OLECHAR szSmaller[2] = { 'x','\0' };
5228 const OLECHAR szLarger[7] = { 'L','a','r','g','e','r','\0' };
5229 BSTR str;
5230
5231 str = SysAllocStringLen(szTest, 4);
5232 ok (str != NULL, "Expected non-NULL\n");
5233 if (str)
5234 {
5235 LPINTERNAL_BSTR bstr;
5236 int changed;
5237
5238 bstr = Get(str);
5239 ok (bstr->dwLen == 8, "Expected 8, got %ld\n", bstr->dwLen);
5240 ok (!lstrcmpW(bstr->szString, szTest), "String different\n");
5241
5242 changed = SysReAllocString(&str, szSmaller);
5243 ok (changed == 1, "Expected 1, got %d\n", changed);
5244 /* Vista creates a new string, but older versions reuse the existing string. */
5245 /*ok (str == oldstr, "Created new string\n");*/
5246 bstr = Get(str);
5247 ok (bstr->dwLen == 2, "Expected 2, got %ld\n", bstr->dwLen);
5248 ok (!lstrcmpW(bstr->szString, szSmaller), "String different\n");
5249
5250 changed = SysReAllocString(&str, szLarger);
5251 ok (changed == 1, "Expected 1, got %d\n", changed);
5252 /* Early versions always make new strings rather than resizing */
5253 /* ok (str == oldstr, "Created new string\n"); */
5254 bstr = Get(str);
5255 ok (bstr->dwLen == 12, "Expected 12, got %ld\n", bstr->dwLen);
5256 ok (!lstrcmpW(bstr->szString, szLarger), "String different\n");
5257
5259 }
5260}
INT WINAPI SysReAllocString(LPBSTR old, LPCOLESTR str)
Definition: oleaut.c:467

Referenced by START_TEST().

◆ test_SysReAllocStringLen()

static void test_SysReAllocStringLen ( void  )
static

Definition at line 5262 of file vartype.c.

5263{
5264 const OLECHAR szTest[5] = { 'T','e','s','t','\0' };
5265 const OLECHAR szSmaller[2] = { 'x','\0' };
5266 const OLECHAR szLarger[7] = { 'L','a','r','g','e','r','\0' };
5267 BSTR str;
5268
5269 str = SysAllocStringLen(szTest, 4);
5270 ok (str != NULL, "Expected non-NULL\n");
5271 if (str)
5272 {
5273 LPINTERNAL_BSTR bstr;
5274 int changed;
5275
5276 bstr = Get(str);
5277 ok (bstr->dwLen == 8, "Expected 8, got %ld\n", bstr->dwLen);
5278 ok (!lstrcmpW(bstr->szString, szTest), "String different\n");
5279
5280 changed = SysReAllocStringLen(&str, szSmaller, 1);
5281 ok (changed == 1, "Expected 1, got %d\n", changed);
5282 /* Vista creates a new string, but older versions reuse the existing string. */
5283 /*ok (str == oldstr, "Created new string\n");*/
5284 bstr = Get(str);
5285 ok (bstr->dwLen == 2, "Expected 2, got %ld\n", bstr->dwLen);
5286 ok (!lstrcmpW(bstr->szString, szSmaller), "String different\n");
5287
5288 changed = SysReAllocStringLen(&str, szLarger, 6);
5289 ok (changed == 1, "Expected 1, got %d\n", changed);
5290 /* Early versions always make new strings rather than resizing */
5291 /* ok (str == oldstr, "Created new string\n"); */
5292 bstr = Get(str);
5293 ok (bstr->dwLen == 12, "Expected 12, got %ld\n", bstr->dwLen);
5294 ok (!lstrcmpW(bstr->szString, szLarger), "String different\n");
5295
5296 changed = SysReAllocStringLen(&str, str, 6);
5297 ok (changed == 1, "Expected 1, got %d\n", changed);
5298
5300 }
5301
5302 /* Windows always returns null terminated strings */
5303 str = SysAllocStringLen(szTest, 4);
5304 ok (str != NULL, "Expected non-NULL\n");
5305 if (str)
5306 {
5307 const int CHUNK_SIZE = 64;
5308 const int STRING_SIZE = 24;
5309 int changed;
5310 changed = SysReAllocStringLen(&str, NULL, CHUNK_SIZE);
5311 ok (changed == 1, "Expected 1, got %d\n", changed);
5312 ok (str != NULL, "Expected non-NULL\n");
5313 if (str)
5314 {
5315 BSTR oldstr = str;
5316
5317 /* Filling string */
5318 memset (str, 0xAB, CHUNK_SIZE * sizeof (OLECHAR));
5319 /* Checking null terminator */
5320 changed = SysReAllocStringLen(&str, NULL, STRING_SIZE);
5321 ok (changed == 1, "Expected 1, got %d\n", changed);
5322 ok (str != NULL, "Expected non-NULL\n");
5323 if (str)
5324 {
5325 ok (str == oldstr, "Expected reuse of the old string memory\n");
5326 ok (str[STRING_SIZE] == 0,
5327 "Expected null terminator, got 0x%04X\n", str[STRING_SIZE]);
5329 }
5330 }
5331 }
5332
5333 /* Some Windows applications use the same pointer for pbstr and psz */
5334 str = SysAllocStringLen(szTest, 4);
5335 ok(str != NULL, "Expected non-NULL\n");
5336 if(str)
5337 {
5338 SysReAllocStringLen(&str, str, 1000000);
5339 ok(SysStringLen(str)==1000000, "Incorrect string length\n");
5340 ok(!memcmp(szTest, str, 4*sizeof(WCHAR)), "Incorrect string returned\n");
5341
5343 }
5344}
#define CHUNK_SIZE
Definition: sha256.c:8
int WINAPI SysReAllocStringLen(BSTR *old, const OLECHAR *str, unsigned int len)
Definition: oleaut.c:383

Referenced by START_TEST().

◆ test_SysStringByteLen()

static void test_SysStringByteLen ( void  )
static

Definition at line 5064 of file vartype.c.

5065{
5066 INTERNAL_BSTR bstr;
5067 BSTR str = GetBSTR(&bstr);
5068
5069 bstr.dwLen = 0;
5070 ok (SysStringByteLen(str) == 0, "Expected dwLen 0, got %d\n", SysStringByteLen(str));
5071 bstr.dwLen = 2;
5072 ok (SysStringByteLen(str) == 2, "Expected dwLen 2, got %d\n", SysStringByteLen(str));
5073}
static BSTR GetBSTR(const LPINTERNAL_BSTR bstr)
Definition: vartype.c:5048
UINT WINAPI SysStringByteLen(BSTR str)
Definition: oleaut.c:215

Referenced by START_TEST().

◆ test_SysStringLen()

static void test_SysStringLen ( void  )
static

Definition at line 5053 of file vartype.c.

5054{
5055 INTERNAL_BSTR bstr;
5056 BSTR str = GetBSTR(&bstr);
5057
5058 bstr.dwLen = 0;
5059 ok (SysStringLen(str) == 0, "Expected dwLen 0, got %d\n", SysStringLen(str));
5060 bstr.dwLen = 2;
5061 ok (SysStringLen(str) == 1, "Expected dwLen 1, got %d\n", SysStringLen(str));
5062}

Referenced by START_TEST().

◆ test_UintChangeTypeEx()

static void test_UintChangeTypeEx ( void  )
static

Definition at line 5953 of file vartype.c.

5954{
5955 HRESULT hres;
5956 VARIANTARG vSrc, vDst;
5957 LCID lcid;
5958
5960
5961 /* Converting a VT_UINT to a VT_INT does not check for overflow */
5962 V_VT(&vDst) = VT_EMPTY;
5963 V_VT(&vSrc) = VT_UINT;
5964 V_UI4(&vSrc) = -1;
5965 hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, VT_I4);
5966 ok(hres == S_OK && V_VT(&vDst) == VT_I4 && V_I4(&vDst) == -1,
5967 "change uint: Expected %d,0x%08lx,%d got %d,0x%08lx,%ld\n",
5968 VT_I4, S_OK, -1, V_VT(&vDst), hres, V_I4(&vDst));
5969}

Referenced by START_TEST().

◆ test_VarBoolChangeTypeEx()

static void test_VarBoolChangeTypeEx ( void  )
static

Definition at line 4452 of file vartype.c.

4453{
4454 static const WCHAR szTrue[] = { 'T','r','u','e','\0' };
4455 static const WCHAR szFalse[] = { 'F','a','l','s','e','\0' };
4456 static const WCHAR szFaux[] = { 'F','a','u','x','\0' };
4457 HRESULT hres;
4459 VARIANTARG vSrc, vDst;
4460 LCID lcid;
4461
4462 in = 1;
4463
4466
4467 /* The common tests convert to a number. Try the different flags */
4469
4470 V_VT(&vSrc) = VT_BOOL;
4471 V_BOOL(&vSrc) = 1;
4472
4473 BOOL_STR(VARIANT_ALPHABOOL, szTrue);
4474 V_BOOL(&vSrc) = 0;
4475 BOOL_STR(VARIANT_ALPHABOOL, szFalse);
4476
4477 if (has_locales)
4478 {
4480
4481 /* VARIANT_ALPHABOOL is always English */
4482 BOOL_STR(VARIANT_ALPHABOOL, szFalse);
4483 /* VARIANT_LOCALBOOL uses the localised text */
4484 BOOL_STR(VARIANT_LOCALBOOL, szFaux);
4485 /* Both flags together acts as VARIANT_LOCALBOOL */
4487 }
4488}
short VARIANT_BOOL
Definition: compat.h:2290
#define INITIAL_TYPETEST(vt, val, fs)
Definition: vartype.c:156
#define COMMON_TYPETEST
Definition: vartype.c:204
#define BOOL_STR(flags, str)
Definition: vartype.c:4445
#define V_BOOL(A)
Definition: oleauto.h:224
#define VARIANT_ALPHABOOL
Definition: oleauto.h:311
#define VARIANT_LOCALBOOL
Definition: oleauto.h:314
#define SUBLANG_DEFAULT
Definition: nls.h:168
#define LANG_FRENCH
Definition: nls.h:58

Referenced by START_TEST().

◆ test_VarBoolCopy()

static void test_VarBoolCopy ( void  )
static

Definition at line 4440 of file vartype.c.

4441{
4442 COPYTEST(1, VT_BOOL, V_BOOL(&vSrc), V_BOOL(&vDst), V_BOOLREF(&vSrc), V_BOOLREF(&vDst), "%d");
4443}
#define COPYTEST(val, vt, srcval, dstval, srcref, dstref, fs)
Definition: vartype.c:127
#define V_BOOLREF(A)
Definition: oleauto.h:225

Referenced by START_TEST().

◆ test_VarBoolFromCy()

static void test_VarBoolFromCy ( void  )
static

Definition at line 4310 of file vartype.c.

4311{
4312 CONVVARS(CY);
4313
4314 CONVERT_CY(VarBoolFromCy, -32769); EXPECT(VARIANT_TRUE);
4315 CONVERT_CY(VarBoolFromCy, -32768); EXPECT(VARIANT_TRUE);
4316 CONVERT_CY(VarBoolFromCy, -1); EXPECT(VARIANT_TRUE);
4317 CONVERT_CY(VarBoolFromCy, 0); EXPECT(VARIANT_FALSE);
4318 CONVERT_CY(VarBoolFromCy, 1); EXPECT(VARIANT_TRUE);
4319 CONVERT_CY(VarBoolFromCy, 32767); EXPECT(VARIANT_TRUE);
4320 CONVERT_CY(VarBoolFromCy, 32768); EXPECT(VARIANT_TRUE);
4321}
HRESULT WINAPI VarBoolFromCy(CY cyIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:6048
#define CONVERT_CY(func, val)
Definition: vartype.c:102
#define CONVVARS(typ)
Definition: vartype.c:72

Referenced by START_TEST().

◆ test_VarBoolFromDate()

static void test_VarBoolFromDate ( void  )
static

Definition at line 4360 of file vartype.c.

4361{
4362 CONVVARS(DATE);
4363
4364 CONVERT(VarBoolFromDate, -1.0); EXPECT(VARIANT_TRUE);
4365 CONVERT(VarBoolFromDate, -0.0); EXPECT(VARIANT_FALSE);
4366 CONVERT(VarBoolFromDate, 1.0); EXPECT(VARIANT_TRUE);
4367}
double DATE
Definition: compat.h:2253
HRESULT WINAPI VarBoolFromDate(DATE dateIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:6030
#define CONVERT(func, val)
Definition: vartype.c:91

Referenced by START_TEST().

◆ test_VarBoolFromDec()

static void test_VarBoolFromDec ( void  )
static

Definition at line 4340 of file vartype.c.

4341{
4343
4345
4350
4351 CONVERT_DEC(VarBoolFromDec,0,0x80,0,1); EXPECT(VARIANT_TRUE);
4352 CONVERT_DEC(VarBoolFromDec,0,0,0,0); EXPECT(VARIANT_FALSE);
4353 CONVERT_DEC(VarBoolFromDec,0,0,0,1); EXPECT(VARIANT_TRUE);
4354 CONVERT_DEC(VarBoolFromDec,0,0,1,0); EXPECT(VARIANT_TRUE);
4355
4356 CONVERT_DEC(VarBoolFromDec,2,0,0,CY_MULTIPLIER); EXPECT(VARIANT_TRUE);
4357 CONVERT_DEC(VarBoolFromDec,2,0x80,0,CY_MULTIPLIER); EXPECT(VARIANT_TRUE);
4358}
HRESULT WINAPI VarBoolFromDec(DECIMAL *pDecIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:6278
#define CONVERT_BADDEC(func)
Definition: vartype.c:116

Referenced by START_TEST().

◆ test_VarBoolFromI1()

static void test_VarBoolFromI1 ( void  )
static

Definition at line 4226 of file vartype.c.

4227{
4228 CONVVARS(signed char);
4229 int i;
4230
4231 CONVERTRANGE(VarBoolFromI1, -128, 128);
4232}
HRESULT WINAPI VarBoolFromI1(signed char cIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:6223
#define CONVERTRANGE(func, start, end)
Definition: vartype.c:4223

Referenced by START_TEST().

◆ test_VarBoolFromI2()

static void test_VarBoolFromI2 ( void  )
static

Definition at line 4242 of file vartype.c.

4243{
4244 CONVVARS(SHORT);
4245 int i;
4246
4247 CONVERTRANGE(VarBoolFromI2, -32768, 32768);
4248}
HRESULT WINAPI VarBoolFromI2(SHORT sIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:5958
short SHORT
Definition: pedump.c:59

Referenced by START_TEST().

◆ test_VarBoolFromI4()

static void test_VarBoolFromI4 ( void  )
static

Definition at line 4258 of file vartype.c.

4259{
4260 CONVVARS(int);
4261
4262 CONVERT(VarBoolFromI4, 0x80000000); EXPECT(VARIANT_TRUE);
4263 CONVERT(VarBoolFromI4, -1); EXPECT(VARIANT_TRUE);
4264 CONVERT(VarBoolFromI4, 0); EXPECT(VARIANT_FALSE);
4265 CONVERT(VarBoolFromI4, 1); EXPECT(VARIANT_TRUE);
4266 CONVERT(VarBoolFromI4, 0x7fffffff); EXPECT(VARIANT_TRUE);
4267}
HRESULT WINAPI VarBoolFromI4(LONG lIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:5976

Referenced by START_TEST().

◆ test_VarBoolFromI8()

static void test_VarBoolFromI8 ( void  )
static

Definition at line 4323 of file vartype.c.

4324{
4326
4327 CONVERT(VarBoolFromI8, -1); EXPECT(VARIANT_TRUE);
4328 CONVERT(VarBoolFromI8, 0); EXPECT(VARIANT_FALSE);
4329 CONVERT(VarBoolFromI8, 1); EXPECT(VARIANT_TRUE);
4330}
HRESULT WINAPI VarBoolFromI8(LONG64 llIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:6302

Referenced by START_TEST().

◆ test_VarBoolFromR4()

static void test_VarBoolFromR4 ( void  )
static

Definition at line 4278 of file vartype.c.

4279{
4280 CONVVARS(FLOAT);
4281
4282 CONVERT(VarBoolFromR4, -1.0f); EXPECT(VARIANT_TRUE);
4283 CONVERT(VarBoolFromR4, 0.0f); EXPECT(VARIANT_FALSE);
4284 CONVERT(VarBoolFromR4, 1.0f); EXPECT(VARIANT_TRUE);
4285 CONVERT(VarBoolFromR4, 1.5f); EXPECT(VARIANT_TRUE);
4286
4287 /* Rounding */
4288 CONVERT(VarBoolFromR4, -1.5f); EXPECT(VARIANT_TRUE);
4289 CONVERT(VarBoolFromR4, -0.6f); EXPECT(VARIANT_TRUE);
4290 CONVERT(VarBoolFromR4, -0.5f); EXPECT(VARIANT_TRUE);
4291 CONVERT(VarBoolFromR4, -0.4f); EXPECT(VARIANT_TRUE);
4292 CONVERT(VarBoolFromR4, 0.4f); EXPECT(VARIANT_TRUE);
4293 CONVERT(VarBoolFromR4, 0.5f); EXPECT(VARIANT_TRUE);
4294 CONVERT(VarBoolFromR4, 0.6f); EXPECT(VARIANT_TRUE);
4295 CONVERT(VarBoolFromR4, 1.5f); EXPECT(VARIANT_TRUE);
4296}
HRESULT WINAPI VarBoolFromR4(FLOAT fltIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:5994
float FLOAT
Definition: typedefs.h:69

Referenced by START_TEST().

◆ test_VarBoolFromR8()

static void test_VarBoolFromR8 ( void  )
static

Definition at line 4298 of file vartype.c.

4299{
4301
4302 /* Hopefully we made the point with R4 above that rounding is
4303 * irrelevant, so we'll skip that for R8 and Date
4304 */
4305 CONVERT(VarBoolFromR8, -1.0); EXPECT(VARIANT_TRUE);
4306 CONVERT(VarBoolFromR8, -0.0); EXPECT(VARIANT_FALSE);
4307 CONVERT(VarBoolFromR8, 1.0); EXPECT(VARIANT_TRUE);
4308}
HRESULT WINAPI VarBoolFromR8(double dblIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:6012
double DOUBLE
Definition: typedefs.h:70

Referenced by START_TEST().

◆ test_VarBoolFromStr()

static void test_VarBoolFromStr ( void  )
static

Definition at line 4369 of file vartype.c.

4370{
4371 CONVVARS(LCID);
4372 OLECHAR buff[128];
4373
4375
4377 if (hres != E_INVALIDARG)
4379
4380 /* #FALSE# and #TRUE# Are always accepted */
4381 CONVERT_STR(VarBoolFromStr,"#FALSE#",0); EXPECT(VARIANT_FALSE);
4382 CONVERT_STR(VarBoolFromStr,"#TRUE#",0); EXPECT(VARIANT_TRUE);
4383
4384 /* Match of #FALSE# and #TRUE# is case sensitive */
4386 /* But match against English is not */
4387 CONVERT_STR(VarBoolFromStr,"false",0); EXPECT(VARIANT_FALSE);
4388 CONVERT_STR(VarBoolFromStr,"False",0); EXPECT(VARIANT_FALSE);
4389 /* On/Off and yes/no are not acceptable inputs, with any flags set */
4390 CONVERT_STR(VarBoolFromStr,"On",0xffffffff); EXPECT_MISMATCH;
4391 CONVERT_STR(VarBoolFromStr,"Yes",0xffffffff); EXPECT_MISMATCH;
4392
4393 /* Change the LCID. This doesn't make any difference for text,unless we ask
4394 * to check local boolean text with the VARIANT_LOCALBOOL flag. */
4396
4397 /* #FALSE# and #TRUE# are accepted in all locales */
4398 CONVERT_STR(VarBoolFromStr,"#FALSE#",0); EXPECT(VARIANT_FALSE);
4399 CONVERT_STR(VarBoolFromStr,"#TRUE#",0); EXPECT(VARIANT_TRUE);
4400 CONVERT_STR(VarBoolFromStr,"#FALSE#",VARIANT_LOCALBOOL); EXPECT(VARIANT_FALSE);
4401 CONVERT_STR(VarBoolFromStr,"#TRUE#",VARIANT_LOCALBOOL); EXPECT(VARIANT_TRUE);
4402
4403 /* English is accepted regardless of the locale */
4404 CONVERT_STR(VarBoolFromStr,"false",0); EXPECT(VARIANT_FALSE);
4405 /* And is still not case sensitive */
4406 CONVERT_STR(VarBoolFromStr,"False",0); EXPECT(VARIANT_FALSE);
4407
4408 if (has_locales)
4409 {
4410 /* French is rejected without VARIANT_LOCALBOOL */
4412 /* But accepted if this flag is given */
4413 CONVERT_STR(VarBoolFromStr,"faux",VARIANT_LOCALBOOL); EXPECT(VARIANT_FALSE);
4414 /* Regardless of case - from this we assume locale text comparisons ignore case */
4415 CONVERT_STR(VarBoolFromStr,"Faux",VARIANT_LOCALBOOL); EXPECT(VARIANT_FALSE);
4416
4417 /* Changing the locale prevents the localised text from being compared -
4418 * this demonstrates that only the indicated LCID and English are searched */
4421 }
4422
4423 /* Numeric strings are read as 0 or non-0 */
4424 CONVERT_STR(VarBoolFromStr,"0",0); EXPECT(VARIANT_FALSE);
4425 CONVERT_STR(VarBoolFromStr,"-1",0); EXPECT(VARIANT_TRUE);
4426 CONVERT_STR(VarBoolFromStr,"+1",0); EXPECT(VARIANT_TRUE);
4427
4428 if (has_locales)
4429 {
4430 /* Numeric strings are read as floating point numbers. The line below fails
4431 * because '.' is not a valid decimal separator for Polish numbers */
4433 }
4434
4435 /* Changing the lcid back to US English reads the r8 correctly */
4438}
#define E_INVALIDARG
Definition: ddrawi.h:101
HRESULT WINAPI VarBoolFromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:6114
#define CONVERT_STR(func, str, flags)
Definition: vartype.c:122
#define EXPECT_MISMATCH
Definition: vartype.c:76
#define LANG_POLISH
Definition: nls.h:107

Referenced by START_TEST().

◆ test_VarBoolFromUI1()

static void test_VarBoolFromUI1 ( void  )
static

Definition at line 4234 of file vartype.c.

4235{
4236 CONVVARS(BYTE);
4237 int i;
4238
4240}
HRESULT WINAPI VarBoolFromUI1(BYTE bIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:5940

Referenced by START_TEST().

◆ test_VarBoolFromUI2()

static void test_VarBoolFromUI2 ( void  )
static

Definition at line 4250 of file vartype.c.

4251{
4253 int i;
4254
4255 CONVERTRANGE(VarBoolFromUI2, 0, 65536);
4256}
HRESULT WINAPI VarBoolFromUI2(USHORT usIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:6241
unsigned short USHORT
Definition: pedump.c:61

Referenced by START_TEST().

◆ test_VarBoolFromUI4()

static void test_VarBoolFromUI4 ( void  )
static

Definition at line 4269 of file vartype.c.

4270{
4271 CONVVARS(ULONG);
4272
4273 CONVERT(VarBoolFromI4, 0); EXPECT(VARIANT_FALSE);
4274 CONVERT(VarBoolFromI4, 1); EXPECT(VARIANT_TRUE);
4275 CONVERT(VarBoolFromI4, 0x80000000); EXPECT(VARIANT_TRUE);
4276}

Referenced by START_TEST().

◆ test_VarBoolFromUI8()

static void test_VarBoolFromUI8 ( void  )
static

Definition at line 4332 of file vartype.c.

4333{
4335
4336 CONVERT(VarBoolFromUI8, 0); EXPECT(VARIANT_FALSE);
4337 CONVERT(VarBoolFromUI8, 1); EXPECT(VARIANT_TRUE);
4338}
HRESULT WINAPI VarBoolFromUI8(ULONG64 ullIn, VARIANT_BOOL *pBoolOut)
Definition: vartype.c:6320

Referenced by START_TEST().

◆ test_VarBstrCat()

static void test_VarBstrCat ( void  )
static

Definition at line 5372 of file vartype.c.

5373{
5374 static const WCHAR sz1[] = { 'a',0 };
5375 static const WCHAR sz2[] = { 'b',0 };
5376 static const WCHAR sz1sz2[] = { 'a','b',0 };
5377 static const WCHAR s1[] = { 'a',0 };
5378 static const WCHAR s2[] = { 'b',0 };
5379 static const WCHAR s1s2[] = { 'a',0,'b',0 };
5380 static const char str1A[] = "Have ";
5381 static const char str2A[] = "A Cigar";
5382 HRESULT ret;
5383 BSTR str1, str2, res;
5384 UINT len;
5385
5386if (0)
5387{
5388 /* Crash */
5390}
5391
5392 /* Concatenation of two NULL strings works */
5393 ret = VarBstrCat(NULL, NULL, &res);
5394 ok(ret == S_OK, "VarBstrCat failed: %08lx\n", ret);
5395 ok(res != NULL, "Expected a string\n");
5396 ok(SysStringLen(res) == 0, "Expected a 0-length string\n");
5398
5399 str1 = SysAllocString(sz1);
5400
5401 /* Concatenation with one NULL arg */
5402 ret = VarBstrCat(NULL, str1, &res);
5403 ok(ret == S_OK, "VarBstrCat failed: %08lx\n", ret);
5404 ok(res != NULL, "Expected a string\n");
5405 ok(SysStringLen(res) == SysStringLen(str1), "Unexpected length\n");
5406 ok(!memcmp(res, sz1, SysStringLen(str1)), "Unexpected value\n");
5408 ret = VarBstrCat(str1, NULL, &res);
5409 ok(ret == S_OK, "VarBstrCat failed: %08lx\n", ret);
5410 ok(res != NULL, "Expected a string\n");
5411 ok(SysStringLen(res) == SysStringLen(str1), "Unexpected length\n");
5412 ok(!memcmp(res, sz1, SysStringLen(str1)), "Unexpected value\n");
5414
5415 /* Concatenation of two zero-terminated strings */
5416 str2 = SysAllocString(sz2);
5417 ret = VarBstrCat(str1, str2, &res);
5418 ok(ret == S_OK, "VarBstrCat failed: %08lx\n", ret);
5419 ok(res != NULL, "Expected a string\n");
5420 ok(SysStringLen(res) == ARRAY_SIZE(sz1sz2) - 1, "Unexpected length\n");
5421 ok(!memcmp(res, sz1sz2, sizeof(sz1sz2)), "Unexpected value\n");
5423
5426
5427 /* Concatenation of two strings with embedded NULLs */
5430
5431 ret = VarBstrCat(str1, str2, &res);
5432 ok(ret == S_OK, "VarBstrCat failed: %08lx\n", ret);
5433 ok(res != NULL, "Expected a string\n");
5434 ok(SysStringLen(res) == ARRAY_SIZE(s1s2), "Unexpected length\n");
5435 ok(!memcmp(res, s1s2, sizeof(s1s2)), "Unexpected value\n");
5437
5440
5441 /* Concatenation of ansi BSTRs, both odd byte count not including termination */
5442 str1 = SysAllocStringByteLen(str1A, sizeof(str1A)-1);
5443 str2 = SysAllocStringByteLen(str2A, sizeof(str2A)-1);
5445 ok(len == (sizeof(str1A)-1)/sizeof(WCHAR), "got length %u\n", len);
5447 ok(len == (sizeof(str2A)-1)/sizeof(WCHAR), "got length %u\n", len);
5448
5449 ret = VarBstrCat(str1, str2, &res);
5450 ok(ret == S_OK, "VarBstrCat failed: %08lx\n", ret);
5451 ok(res != NULL, "Expected a string\n");
5452 len = (sizeof(str1A) + sizeof(str2A) - 2)/sizeof(WCHAR);
5453 ok(SysStringLen(res) == len, "got %d, expected %u\n", SysStringLen(res), len);
5454 ok(!memcmp(res, "Have A Cigar", sizeof(str1A) + sizeof(str2A) - 1), "got (%s)\n", (char*)res);
5456
5459
5460 /* Concatenation of ansi BSTRs, both 1 byte length not including termination */
5461 str1 = SysAllocStringByteLen(str1A, 1);
5462 str2 = SysAllocStringByteLen(str2A, 1);
5464 ok(len == 0, "got length %u\n", len);
5466 ok(len == 0, "got length %u\n", len);
5467
5468 ret = VarBstrCat(str1, str2, &res);
5469 ok(ret == S_OK, "VarBstrCat failed: %08lx\n", ret);
5470 ok(res != NULL, "Expected a string\n");
5471 ok(SysStringLen(res) == 1, "got %d, expected 1\n", SysStringLen(res));
5472 ok(!memcmp(res, "HA", 2), "got (%s)\n", (char*)res);
5474
5477}
HRESULT WINAPI VarBstrCat(BSTR pbstrLeft, BSTR pbstrRight, BSTR *pbstrOut)
Definition: vartype.c:7107
GLenum GLsizei len
Definition: glext.h:6722
unsigned int UINT
Definition: sysinfo.c:13
struct S1 s1
XML_HIDDEN void xmlParserErrors const char const xmlChar * str1
Definition: parser.h:35
PCWSTR s2
Definition: shell32_main.h:38

Referenced by START_TEST().

◆ test_VarBstrCmp()

static void test_VarBstrCmp ( void  )
static

Definition at line 4962 of file vartype.c.

4963{
4964 LCID lcid;
4965 HRESULT hres;
4966 static const WCHAR sz[] = {'W','u','r','s','c','h','t','\0'};
4967 static const WCHAR szempty[] = {'\0'};
4968 static const WCHAR sz1[] = { 'a',0 };
4969 static const WCHAR sz2[] = { 'A',0 };
4970 static const WCHAR s1[] = { 'a',0 };
4971 static const WCHAR s2[] = { 'a',0,'b' };
4972 static const char sb1[] = {1,0,1};
4973 static const char sb2[] = {1,0,2};
4974 static const char sbchr0[] = {0,0};
4975 static const char sbchr00[] = {0,0,0};
4976 BSTR bstr, bstrempty, bstr2;
4977
4979 bstr = SysAllocString(sz);
4980 bstrempty = SysAllocString(szempty);
4981
4982 /* NULL handling. Yepp, MSDN is totally wrong here */
4984 VARBSTRCMP(bstr,NULL,0,VARCMP_GT);
4985 VARBSTRCMP(NULL,bstr,0,VARCMP_LT);
4986
4987 /* NULL and empty string comparisons */
4988 VARBSTRCMP(bstrempty,NULL,0,VARCMP_EQ);
4989 VARBSTRCMP(NULL,bstrempty,0,VARCMP_EQ);
4990
4991 SysFreeString(bstr);
4992 bstr = SysAllocString(sz1);
4993
4994 bstr2 = SysAllocString(sz2);
4995 VARBSTRCMP(bstr,bstr2,0,VARCMP_LT);
4997 SysFreeString(bstr2);
4998 /* These two strings are considered equal even though one is
4999 * NULL-terminated and the other not.
5000 */
5001 bstr2 = SysAllocStringLen(s1, ARRAY_SIZE(s1));
5002 VARBSTRCMP(bstr,bstr2,0,VARCMP_EQ);
5003 SysFreeString(bstr2);
5004
5005 /* These two strings are not equal */
5006 bstr2 = SysAllocStringLen(s2, ARRAY_SIZE(s2));
5007 VARBSTRCMP(bstr,bstr2,0,VARCMP_LT);
5008 SysFreeString(bstr2);
5009
5010 SysFreeString(bstr);
5011
5012 bstr = SysAllocStringByteLen(sbchr0, sizeof(sbchr0));
5013 bstr2 = SysAllocStringByteLen(sbchr00, sizeof(sbchr00));
5014 VARBSTRCMP(bstr,bstrempty,0,VARCMP_GT);
5015 VARBSTRCMP(bstrempty,bstr,0,VARCMP_LT);
5016 VARBSTRCMP(bstr2,bstrempty,0,VARCMP_GT);
5017 VARBSTRCMP(bstr2,bstr,0,VARCMP_EQ);
5018 SysFreeString(bstr2);
5019 SysFreeString(bstr);
5020
5021 /* When (LCID == 0) it should be a binary comparison
5022 * so these two strings could not match.
5023 */
5024 bstr = SysAllocStringByteLen(sb1, sizeof(sb1));
5025 bstr2 = SysAllocStringByteLen(sb2, sizeof(sb2));
5026 lcid = 0;
5027 VARBSTRCMP(bstr,bstr2,0,VARCMP_LT);
5028 SysFreeString(bstr2);
5029 SysFreeString(bstr);
5030
5031 bstr = SysAllocStringByteLen(sbchr0, sizeof(sbchr0));
5032 bstr2 = SysAllocStringByteLen(sbchr00, sizeof(sbchr00));
5033 VARBSTRCMP(bstr,bstrempty,0,VARCMP_GT);
5034 VARBSTRCMP(bstrempty,bstr,0,VARCMP_LT);
5035 VARBSTRCMP(bstr2,bstrempty,0,VARCMP_GT);
5036 VARBSTRCMP(bstr2,bstr,0,VARCMP_GT);
5037 SysFreeString(bstr2);
5038 SysFreeString(bstr);
5039 SysFreeString(bstrempty);
5040}
#define VARBSTRCMP(left, right, flags, result)
Definition: vartype.c:4959
#define VARCMP_LT
Definition: oleauto.h:657
#define VARCMP_EQ
Definition: oleauto.h:658
#define VARCMP_GT
Definition: oleauto.h:659
#define NORM_IGNORECASE
Definition: winnls.h:191

Referenced by START_TEST().

◆ test_VarBstrFromCy()

static void test_VarBstrFromCy ( void  )
static

Definition at line 4849 of file vartype.c.

4850{
4851#define BSTR_CY(a, b, str, lcid) _BSTR_CY(a, b, str, lcid, __LINE__)
4852
4853 LCID en_us, sp;
4854
4857
4858 BSTR_CY(0, 0, "0", en_us);
4859 BSTR_CY(0, 10000, "1", en_us);
4860 BSTR_CY(0, 15000, "1.5", en_us);
4861 BSTR_CY(0xffffffff, ((15000)^0xffffffff)+1, "-1.5", en_us);
4862 /* (1 << 32) - 1 / 1000 */
4863 BSTR_CY(0, 0xffffffff, "429496.7295", en_us);
4864 /* (1 << 32) / 1000 */
4865 BSTR_CY(1, 0, "429496.7296", en_us);
4866 /* ((1 << 63) - 1)/10000 */
4867 BSTR_CY(0x7fffffff, 0xffffffff, "922337203685477.5807", en_us);
4868 BSTR_CY(0, 9, "0.0009", en_us);
4869 BSTR_CY(0, 9, "0,0009", sp);
4870
4871#undef BSTR_CY
4872}
static const WCHAR sp[]
Definition: suminfo.c:287
#define BSTR_CY(a, b, str, lcid)
#define LANG_SPANISH
Definition: nls.h:123

Referenced by START_TEST().

◆ test_VarBstrFromDate()

static void test_VarBstrFromDate ( void  )
static

Definition at line 4805 of file vartype.c.

4806{
4807#define BSTR_DATE(dt,str) _BSTR_DATE(dt,str,__LINE__)
4808
4809 BSTR_DATE(0.0, "12:00:00 AM");
4810 BSTR_DATE(3.34, "1/2/1900 8:09:36 AM");
4811 BSTR_DATE(3339.34, "2/20/1909 8:09:36 AM");
4812 BSTR_DATE(365.00, "12/30/1900");
4813 BSTR_DATE(365.25, "12/30/1900 6:00:00 AM");
4814 BSTR_DATE(1461.0, "12/31/1903");
4815 BSTR_DATE(1461.5, "12/31/1903 12:00:00 PM");
4816 BSTR_DATE(-49192.24, "4/24/1765 5:45:36 AM");
4817 BSTR_DATE(-657434.0, "1/1/100");
4818 BSTR_DATE(2958465.0, "12/31/9999");
4819
4820#undef BSTR_DATE
4821}
#define BSTR_DATE(dt, str)

Referenced by START_TEST().

◆ test_VarBstrFromDec()

static void test_VarBstrFromDec ( void  )
static

Definition at line 4900 of file vartype.c.

4901{
4902#define BSTR_DEC(scale, sign, hi, lo, str, lcid) _BSTR_DEC(scale, sign, hi, 0, lo, str, lcid, __LINE__)
4903#define BSTR_DEC64(scale, sign, hi, mid, lo, str, lcid) _BSTR_DEC(scale, sign, hi, mid, lo, str, lcid, __LINE__)
4904
4905 LCID en_us, sp;
4906
4909
4910 BSTR_DEC(0,0,0,0, "0", en_us);
4911
4912 BSTR_DEC(0,0,0,1, "1", en_us);
4913 BSTR_DEC(1,0,0,10, "1", en_us);
4914 BSTR_DEC(2,0,0,100, "1", en_us);
4915 BSTR_DEC(3,0,0,1000,"1", en_us);
4916
4917 BSTR_DEC(1,0,0,15, "1.5", en_us);
4918 BSTR_DEC(2,0,0,150, "1.5", en_us);
4919 BSTR_DEC(3,0,0,1500,"1.5", en_us);
4920
4921 BSTR_DEC(1,0x80,0,15, "-1.5", en_us);
4922
4923 /* (1 << 32) - 1 */
4924 BSTR_DEC(0,0,0,0xffffffff, "4294967295", en_us);
4925 /* (1 << 32) */
4926 BSTR_DEC64(0,0,0,1,0, "4294967296", en_us);
4927 /* (1 << 64) - 1 */
4928 BSTR_DEC64(0,0,0,0xffffffff,0xffffffff, "18446744073709551615", en_us);
4929 /* (1 << 64) */
4930 BSTR_DEC(0,0,1,0, "18446744073709551616", en_us);
4931 /* (1 << 96) - 1 */
4932 BSTR_DEC64(0,0,0xffffffff,0xffffffff,0xffffffff, "79228162514264337593543950335", en_us);
4933 /* 1 * 10^-10 */
4934 BSTR_DEC(10,0,0,1, "0.0000000001", en_us);
4935 /* ((1 << 96) - 1) * 10^-10 */
4936 BSTR_DEC64(10,0,0xffffffffUL,0xffffffff,0xffffffff, "7922816251426433759.3543950335", en_us);
4937 /* ((1 << 96) - 1) * 10^-28 */
4938 BSTR_DEC64(28,0,0xffffffffUL,0xffffffff,0xffffffff, "7.9228162514264337593543950335", en_us);
4939
4940 /* check leading zeros and decimal sep. for English locale */
4941 BSTR_DEC(4,0,0,9, "0.0009", en_us);
4942 BSTR_DEC(5,0,0,90, "0.0009", en_us);
4943 BSTR_DEC(6,0,0,900, "0.0009", en_us);
4944 BSTR_DEC(7,0,0,9000, "0.0009", en_us);
4945
4946 /* check leading zeros and decimal sep. for Spanish locale */
4947 BSTR_DEC(4,0,0,9, "0,0009", sp);
4948 BSTR_DEC(5,0,0,90, "0,0009", sp);
4949 BSTR_DEC(6,0,0,900, "0,0009", sp);
4950 BSTR_DEC(7,0,0,9000, "0,0009", sp);
4951
4952#undef BSTR_DEC
4953#undef BSTR_DEC64
4954}
#define BSTR_DEC(scale, sign, hi, lo, str, lcid)
#define BSTR_DEC64(scale, sign, hi, mid, lo, str, lcid)

Referenced by START_TEST().

◆ test_VarBstrFromI4()

static void test_VarBstrFromI4 ( void  )
static

Definition at line 4494 of file vartype.c.

4495{
4496 static const WCHAR int_min[] = { '-','2','1','4','7','4','8','3','6','4','8','\0' };
4497 static const WCHAR minus_42[] = { '-','4','2','\0' };
4498 BSTR bstr = NULL;
4499 HRESULT hres;
4500 LONG value;
4501 LCID lcid;
4502
4504
4505#ifdef __REACTOS__
4506 value = (-2147483647 - 1);
4507#else
4508 value = -2147483648;
4509#endif
4511 ok(hres == S_OK, "got hres 0x%08lx\n", hres);
4512 if (bstr)
4513 {
4514 ok(memcmp(bstr, int_min, sizeof(int_min)) == 0, "string different\n");
4515 SysFreeString(bstr);
4516 }
4517
4518 value = -42;
4520 ok(hres == S_OK, "got hres 0x%08lx\n", hres);
4521 if (bstr)
4522 {
4523 ok(memcmp(bstr, minus_42, sizeof(minus_42)) == 0, "string different\n");
4524 SysFreeString(bstr);
4525 }
4526}
HRESULT WINAPI VarBstrFromI4(LONG lIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
Definition: vartype.c:6445
Definition: pdh_main.c:96

Referenced by START_TEST().

◆ test_VarBstrFromR4()

static void test_VarBstrFromR4 ( void  )
static

Definition at line 4534 of file vartype.c.

4535{
4536 static const struct r4_test tests_en[] =
4537 {
4538 { 0.5, L"0.5" },
4539 { 0.05, L"0.05" },
4540 { 0.005, L"0.005" },
4541 { 0.0005, L"0.0005" },
4542 { 0.00005, L"0.00005" },
4543 { 0.000005, L"0.000005" },
4544
4545 { 1.0e8, L"1E+08" },
4546 { 1.0e12, L"1E+12" },
4547 { 1.0e14, L"1E+14" },
4548 { 999999999999999.0, L"1E+15" },
4549 { 1000000000000000.0, L"1E+15" },
4550 { 1200000000000000.0, L"1.2E+15" },
4551 { 1.0e15, L"1E+15" },
4552
4553 { 1.000e16, L"1E+16" },
4554 { 1.234e16, L"1.234E+16" },
4555 { 3.14159300, L"3.141593" },
4556 { 3.14159265, L"3.141593" },
4557 { M_PI, L"3.141593" },
4558 { 12.34567890, L"12.34568" },
4559 { 123.45678901, L"123.4568" },
4560 { 1234.56789012, L"1234.568" },
4561
4562 { 0.0, NULL }
4563 };
4564 static const struct r4_test tests_es[] =
4565 {
4566 { 0.5, L"0,5" },
4567 { 0.05, L"0,05" },
4568 { 0.005, L"0,005" },
4569 { 0.0005, L"0,0005" },
4570 { 0.00005, L"0,00005" },
4571 { 0.000005, L"0,000005" },
4572
4573 { 1.0e8, L"1E+08" },
4574 { 1.0e12, L"1E+12" },
4575 { 1.0e14, L"1E+14" },
4576 { 999999999999999.0, L"1E+15" },
4577 { 1000000000000000.0, L"1E+15" },
4578 { 1200000000000000.0, L"1,2E+15" },
4579 { 1.0e15, L"1E+15" },
4580
4581 { 1.000e16, L"1E+16" },
4582 { 1.234e16, L"1,234E+16" },
4583 { 3.14159300, L"3,141593" },
4584 { 3.14159265, L"3,141593" },
4585 { M_PI, L"3,141593" },
4586 { 12.34567890, L"12,34568" },
4587 { 123.45678901, L"123,4568" },
4588 { 1234.56789012, L"1234,568" },
4589
4590 { 0.0, NULL }
4591 };
4592 const struct r4_test *cur;
4593 static const WCHAR szNative[] = { '6','5','4','3','2','2','.','3','\0' };
4594 static const WCHAR szZero[] = {'0', '\0'};
4595 static const WCHAR szOneHalf_English[] = { '0','.','5','\0' }; /* uses period */
4596 static const WCHAR szOneHalf_Spanish[] = { '0',',','5','\0' }; /* uses comma */
4597 LCID lcid;
4598 LCID lcid_spanish;
4599 HRESULT hres;
4600 BSTR bstr = NULL;
4601
4602 float f;
4603
4606 f = 654322.23456f;
4607 hres = VarBstrFromR4(f, lcid, 0, &bstr);
4608 ok(hres == S_OK, "got hres 0x%08lx\n", hres);
4609 if (bstr)
4610 {
4611 ok(memcmp(bstr, szNative, sizeof(szNative)) == 0, "string different\n");
4612 SysFreeString(bstr);
4613 }
4614
4615 f = -0.0;
4616 hres = VarBstrFromR4(f, lcid, 0, &bstr);
4617 ok(hres == S_OK, "got hres 0x%08lx\n", hres);
4618 if (bstr)
4619 {
4620 if (bstr[0] == '-')
4621 ok(memcmp(bstr + 1, szZero, sizeof(szZero)) == 0, "negative zero (got %s)\n", wtoascii(bstr));
4622 else
4623 ok(memcmp(bstr, szZero, sizeof(szZero)) == 0, "negative zero (got %s)\n", wtoascii(bstr));
4624 SysFreeString(bstr);
4625 }
4626
4627 /* The following tests that lcid is used for decimal separator even without LOCALE_USE_NLS */
4628 f = 0.5;
4630 ok(hres == S_OK, "got hres 0x%08lx\n", hres);
4631 if (bstr)
4632 {
4633 ok(memcmp(bstr, szOneHalf_English, sizeof(szOneHalf_English)) == 0, "English locale failed (got %s)\n", wtoascii(bstr));
4634 SysFreeString(bstr);
4635 }
4636 f = 0.5;
4637 hres = VarBstrFromR4(f, lcid_spanish, LOCALE_NOUSEROVERRIDE, &bstr);
4638 ok(hres == S_OK, "got hres 0x%08lx\n", hres);
4639 if (bstr)
4640 {
4641 ok(memcmp(bstr, szOneHalf_Spanish, sizeof(szOneHalf_Spanish)) == 0, "Spanish locale failed (got %s)\n", wtoascii(bstr));
4642 SysFreeString(bstr);
4643 }
4644
4646 cur = tests_en;
4647 while (cur->expect)
4648 {
4649 bstr = NULL;
4650 hres = VarBstrFromR4(cur->val, lcid, 0, &bstr);
4651 ok(hres == S_OK, "got hres 0x%08lx\n", hres);
4652 if (bstr)
4653 {
4654 ok(wcscmp(bstr, cur->expect) == 0, "expected '%ls', got '%ls'\n", cur->expect, bstr);
4655 SysFreeString(bstr);
4656 }
4657 ++cur;
4658 }
4659
4661 cur = tests_es;
4662 while (cur->expect)
4663 {
4664 bstr = NULL;
4665 hres = VarBstrFromR4(cur->val, lcid, 0, &bstr);
4666 ok(hres == S_OK, "got hres 0x%08lx\n", hres);
4667 if (bstr)
4668 {
4669 ok(wcscmp(bstr, cur->expect) == 0, "expected '%ls', got '%ls'\n", cur->expect, bstr);
4670 SysFreeString(bstr);
4671 }
4672 ++cur;
4673 }
4674}
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
HRESULT WINAPI VarBstrFromR4(FLOAT fltIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
Definition: vartype.c:6566
#define L(x)
Definition: resources.c:13
FxCollectionEntry * cur
GLfloat f
Definition: glext.h:7540
#define f
Definition: ke_i.h:83
#define M_PI
Definition: macros.h:263
static const char * wtoascii(LPWSTR lpszIn)
Definition: vartype.c:3095
#define SUBLANG_SPANISH
Definition: nls.h:336

Referenced by START_TEST().

◆ test_VarBstrFromR8()

static void test_VarBstrFromR8 ( void  )
static

Definition at line 4682 of file vartype.c.

4683{
4684 static const struct r8_test tests_en[] =
4685 {
4686 { 0.56789, L"0.56789" },
4687 { 5.6789e-2, L"0.056789" },
4688 { 5.6789e-3, L"0.0056789" },
4689 { 5.6789e-4, L"0.00056789" },
4690 { 5.6789e-5, L"0.000056789" },
4691 { 5.6789e-6, L"0.0000056789" },
4692 { 5.6789e-7, L"0.00000056789" },
4693 { 5.6789e-8, L"0.000000056789" },
4694 { 5.6789e-9, L"0.0000000056789" },
4695 { 5.6789e-10, L"0.00000000056789" },
4696 { 5.6789e-11, L"0.000000000056789" },
4697 { 5.6789e-12, L"5.6789E-12" },
4698 { 5.6789e-13, L"5.6789E-13" },
4699 { 5.6789e-14, L"5.6789E-14" },
4700 { 5.6789e-15, L"5.6789E-15" },
4701 { 5.6789e-16, L"5.6789E-16" },
4702
4703 { 1.0e8, L"100000000" },
4704 { 1.0e12, L"1000000000000" },
4705 { 1.0e14, L"100000000000000" },
4706 { 999999999999999.0, L"999999999999999" },
4707 { 1000000000000000.0, L"1E+15" },
4708 { 1200000000000000.0, L"1.2E+15" },
4709 { 1.0e15, L"1E+15" },
4710
4711 { 1.000e16, L"1E+16" },
4712 { 1.234e16, L"1.234E+16" },
4713 { 3.141592653590000, L"3.14159265359" },
4714 { 3.141592653589793, L"3.14159265358979" },
4715 { M_PI, L"3.14159265358979" },
4716 { 12.345678901234567, L"12.3456789012346" },
4717 { 123.456789012345678, L"123.456789012346" },
4718 { 1234.567890123456789, L"1234.56789012346" },
4719
4720 { 0.0, NULL }
4721 };
4722 static const struct r8_test tests_es[] =
4723 {
4724 { 0.5, L"0,5" },
4725 { 0.05, L"0,05" },
4726 { 0.005, L"0,005" },
4727 { 0.0005, L"0,0005" },
4728 { 0.00005, L"0,00005" },
4729 { 0.000005, L"0,000005" },
4730
4731 { 1.0e8, L"100000000" },
4732 { 1.0e12, L"1000000000000" },
4733 { 1.0e14, L"100000000000000" },
4734 { 999999999999999.0, L"999999999999999" },
4735 { 1000000000000000.0, L"1E+15" },
4736 { 1200000000000000.0, L"1,2E+15" },
4737 { 1.0e15, L"1E+15" },
4738
4739 { 1.000e16, L"1E+16" },
4740 { 1.234e16, L"1,234E+16" },
4741 { 3.141592653590000, L"3,14159265359" },
4742 { 3.141592653589793, L"3,14159265358979" },
4743 { M_PI, L"3,14159265358979" },
4744 { 12.345678901234567, L"12,3456789012346" },
4745 { 123.456789012345678, L"123,456789012346" },
4746 { 1234.567890123456789, L"1234,56789012346" },
4747
4748 { 0.0, NULL }
4749 };
4750 const struct r8_test *cur;
4751 HRESULT hres;
4752 BSTR bstr;
4753 LCID lcid;
4754
4756 cur = tests_en;
4757 while (cur->expect)
4758 {
4759 bstr = NULL;
4760 hres = VarBstrFromR8(cur->val, lcid, 0, &bstr);
4761 ok(hres == S_OK, "got hres 0x%08lx\n", hres);
4762 if (bstr)
4763 {
4764 ok(wcscmp(bstr, cur->expect) == 0, "expected '%ls', got '%ls'\n", cur->expect, bstr);
4765 SysFreeString(bstr);
4766 }
4767 ++cur;
4768 }
4769
4771 cur = tests_es;
4772 while (cur->expect)
4773 {
4774 bstr = NULL;
4775 hres = VarBstrFromR8(cur->val, lcid, 0, &bstr);
4776 ok(hres == S_OK, "got hres 0x%08lx\n", hres);
4777 if (bstr)
4778 {
4779 ok(wcscmp(bstr, cur->expect) == 0, "expected '%ls', got '%ls'\n", cur->expect, bstr);
4780 SysFreeString(bstr);
4781 }
4782 ++cur;
4783 }
4784}
HRESULT WINAPI VarBstrFromR8(double dblIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
Definition: vartype.c:6587

Referenced by START_TEST().

◆ test_VarCyAbs()

static void test_VarCyAbs ( void  )
static

Definition at line 3442 of file vartype.c.

3443{
3444 MATHVARS1;
3445
3446 MATH1(VarCyAbs, 0.5); EXPECTCY(0.5);
3447 MATH1(VarCyAbs, -0.5); EXPECTCY(0.5);
3448 MATH1(VarCyAbs, 922337203685476.0); EXPECTCY64(2147483647ul,4294951488ul);
3449 MATH1(VarCyAbs, -922337203685476.0); EXPECTCY64(2147483647ul,4294951488ul);
3450}
HRESULT WINAPI VarCyAbs(CY cyIn, CY *pCyOut)
Definition: vartype.c:3876
#define EXPECTCY(x)
Definition: vartype.c:3152
#define EXPECTCY64(x, y)
Definition: vartype.c:3156
#define MATHVARS1
Definition: vartype.c:3822
#define MATH1(func, l)
Definition: vartype.c:3826

Referenced by START_TEST().

◆ test_VarCyAdd()

static void test_VarCyAdd ( void  )
static

Definition at line 3402 of file vartype.c.

3403{
3404 MATHVARS2;
3405
3406 MATH2(VarCyAdd, 0.5, 0.5); EXPECTCY(1);
3407 MATH2(VarCyAdd, 0.5, -0.4); EXPECTCY(0.1);
3408 MATH2(VarCyAdd, 0.5, -0.6); EXPECTCY(-0.1);
3409 MATH2(VarCyAdd, -0.5, -0.5); EXPECTCY(-1);
3410 MATH2(VarCyAdd, -922337203685476.0, -922337203685476.0); EXPECT_OVERFLOW;
3411 MATH2(VarCyAdd, -922337203685476.0, 922337203685476.0); EXPECTCY(0);
3412 MATH2(VarCyAdd, 922337203685476.0, -922337203685476.0); EXPECTCY(0);
3413 MATH2(VarCyAdd, 922337203685476.0, 922337203685476.0); EXPECT_OVERFLOW;
3414}
HRESULT WINAPI VarCyAdd(CY cyLeft, CY cyRight, CY *pCyOut)
Definition: vartype.c:3785
#define MATHVARS2
Definition: vartype.c:3824
#define MATH2(func, l, r)
Definition: vartype.c:3828
#define EXPECT_OVERFLOW
Definition: vartype.c:75

Referenced by START_TEST().

◆ test_VarCyCmp()

static void test_VarCyCmp ( void  )
static

Definition at line 3495 of file vartype.c.

3496{
3497 HRESULT hres;
3498 double left = 0.0, right = 0.0;
3499 CY cyLeft, cyRight;
3500
3501 MATHCMP(-1.0, -1.0); EXPECT_EQ;
3502 MATHCMP(-1.0, 0.0); EXPECT_LT;
3503 MATHCMP(-1.0, 1.0); EXPECT_LT;
3504 MATHCMP(-1.0, 2.0); EXPECT_LT;
3505 MATHCMP(0.0, 1.0); EXPECT_LT;
3506 MATHCMP(0.0, 0.0); EXPECT_EQ;
3507 MATHCMP(0.0, -1.0); EXPECT_GT;
3508 MATHCMP(1.0, -1.0); EXPECT_GT;
3509 MATHCMP(1.0, 0.0); EXPECT_GT;
3510 MATHCMP(1.0, 1.0); EXPECT_EQ;
3511 MATHCMP(1.0, 2.0); EXPECT_LT;
3512}
#define EXPECT_LT
Definition: vartype.c:79
#define EXPECT_GT
Definition: vartype.c:80
#define MATHCMP(l, r)
Definition: vartype.c:3492
#define EXPECT_EQ
Definition: vartype.c:81

Referenced by START_TEST().

◆ test_VarCyCmpR8()

static void test_VarCyCmpR8 ( void  )
static

Definition at line 3517 of file vartype.c.

3518{
3519 HRESULT hres;
3520 double left = 0.0;
3521 CY cyLeft;
3522 double right;
3523
3524 MATHCMPR8(-1.0, -1.0); EXPECT_EQ;
3525 MATHCMPR8(-1.0, 0.0); EXPECT_LT;
3526 MATHCMPR8(-1.0, 1.0); EXPECT_LT;
3527 MATHCMPR8(-1.0, 2.0); EXPECT_LT;
3528 MATHCMPR8(0.0, 1.0); EXPECT_LT;
3529 MATHCMPR8(0.0, 0.0); EXPECT_EQ;
3530 MATHCMPR8(0.0, -1.0); EXPECT_GT;
3531 MATHCMPR8(1.0, -1.0); EXPECT_GT;
3532 MATHCMPR8(1.0, 0.0); EXPECT_GT;
3533 MATHCMPR8(1.0, 1.0); EXPECT_EQ;
3534 MATHCMPR8(1.0, 2.0); EXPECT_LT;
3535}
#define MATHCMPR8(l, r)
Definition: vartype.c:3514

Referenced by START_TEST().

◆ test_VarCyFix()

static void test_VarCyFix ( void  )
static

Definition at line 3573 of file vartype.c.

3574{
3575 MATHVARS1;
3576
3577 MATHFIX(-1.0001); EXPECTCY(-1);
3578 MATHFIX(-1.4999); EXPECTCY(-1);
3579 MATHFIX(-1.5001); EXPECTCY(-1);
3580 MATHFIX(-1.9999); EXPECTCY(-1);
3581 MATHFIX(-0.0001); EXPECTCY(0);
3582 MATHFIX(-0.4999); EXPECTCY(0);
3583 MATHFIX(-0.5001); EXPECTCY(0);
3584 MATHFIX(-0.9999); EXPECTCY(0);
3585 MATHFIX(0.0001); EXPECTCY(0);
3586 MATHFIX(0.4999); EXPECTCY(0);
3587 MATHFIX(0.5001); EXPECTCY(0);
3588 MATHFIX(0.9999); EXPECTCY(0);
3589 MATHFIX(1.0001); EXPECTCY(1);
3590 MATHFIX(1.4999); EXPECTCY(1);
3591 MATHFIX(1.5001); EXPECTCY(1);
3592 MATHFIX(1.9999); EXPECTCY(1);
3593}
#define MATHFIX(l)
Definition: vartype.c:3570

Referenced by START_TEST().

◆ test_VarCyFromBool()

static void test_VarCyFromBool ( void  )
static

Definition at line 3296 of file vartype.c.

3297{
3299 int i;
3300
3301 for (i = -32768; i < 32768; i++)
3302 {
3304 }
3305}
HRESULT WINAPI VarCyFromBool(VARIANT_BOOL boolIn, CY *pCyOut)
Definition: vartype.c:3620

Referenced by START_TEST().

◆ test_VarCyFromDate()

static void test_VarCyFromDate ( void  )
static

Definition at line 3358 of file vartype.c.

3359{
3360 CONVVARS(DATE);
3361
3362#if defined(__i386__) && (defined(_MSC_VER) || defined(__GNUC__))
3363 CONVERT(VarCyFromR8, -461168601842738.7904); EXPECTCY64(0xbfffffff, 0xffffff23);
3364#endif
3365
3366 CONVERT(VarCyFromDate, -1.0); EXPECTCY(-1);
3367 CONVERT(VarCyFromDate, -0.0); EXPECTCY(0);
3368 CONVERT(VarCyFromDate, 1.0); EXPECTCY(1);
3369 CONVERT(VarCyFromDate, -4611686018427388416.1); EXPECT_OVERFLOW;
3370 CONVERT(VarCyFromDate, 4611686018427387648.0); EXPECT_OVERFLOW;
3371
3372 /* Rounding */
3373 CONVERT(VarCyFromDate, -1.5f); EXPECTCY(-1.5);
3374 CONVERT(VarCyFromDate, -0.6f); EXPECTCY(-0.6);
3375 CONVERT(VarCyFromDate, -0.5f); EXPECTCY(-0.5);
3376 CONVERT(VarCyFromDate, -0.4f); EXPECTCY(-0.4);
3377 CONVERT(VarCyFromDate, 0.4f); EXPECTCY(0.4);
3378 CONVERT(VarCyFromDate, 0.5f); EXPECTCY(0.5);
3379 CONVERT(VarCyFromDate, 0.6f); EXPECTCY(0.6);
3380 CONVERT(VarCyFromDate, 1.5f); EXPECTCY(1.5);
3381 CONVERT(VarCyFromDate, 1.00009f); EXPECTCY(1.0001);
3382 CONVERT(VarCyFromDate, -1.00001f); EXPECTCY(-1);
3383 CONVERT(VarCyFromDate, -1.00005f); EXPECTCY(-1);
3384 CONVERT(VarCyFromDate, -0.00009f); EXPECTCY(-0.0001);
3385 CONVERT(VarCyFromDate, -0.00005f); EXPECTCY(0);
3386 CONVERT(VarCyFromDate, -0.00001f); EXPECTCY(0);
3387 CONVERT(VarCyFromDate, 0.00001f); EXPECTCY(0);
3388 CONVERT(VarCyFromDate, 0.00005f); EXPECTCY(0);
3389 CONVERT(VarCyFromDate, 0.00009f); EXPECTCY(0.0001);
3390 CONVERT(VarCyFromDate, -1.00001f); EXPECTCY(-1);
3391 CONVERT(VarCyFromDate, -1.00005f); EXPECTCY(-1);
3392 CONVERT(VarCyFromDate, -1.00009f); EXPECTCY(-1.0001);
3393}
HRESULT WINAPI VarCyFromDate(DATE dateIn, CY *pCyOut)
Definition: vartype.c:3553

Referenced by START_TEST().

◆ test_VarCyFromDec()

static void test_VarCyFromDec ( void  )
static

Definition at line 3332 of file vartype.c.

3333{
3335
3337
3338 CONVERT_DEC(VarCyFromDec,0,0x80,0,1); EXPECTCY(-1);
3339 CONVERT_DEC(VarCyFromDec,0,0,0,0); EXPECTCY(0);
3340 CONVERT_DEC(VarCyFromDec,0,0,0,1); EXPECTCY(1);
3341
3342 CONVERT_DEC64(VarCyFromDec,0,0,0,214748, 1566804068); EXPECTCY64(2147483647ul, 4294951488ul);
3343 CONVERT_DEC64(VarCyFromDec,0,0,0,214748, 1566804069); EXPECTCY64(2147483647ul, 4294961488ul);
3344 CONVERT_DEC64(VarCyFromDec,0,0,0,214748, 1566804070); EXPECT_OVERFLOW;
3345 CONVERT_DEC64(VarCyFromDec,0,0,0,214749, 1566804068); EXPECT_OVERFLOW;
3346
3347 CONVERT_DEC(VarCyFromDec,2,0,0,100); EXPECTCY(1);
3348 CONVERT_DEC(VarCyFromDec,2,0x80,0,100); EXPECTCY(-1);
3349 CONVERT_DEC(VarCyFromDec,2,0x80,0,1); EXPECTCY(-0.01);
3350 CONVERT_DEC(VarCyFromDec,2,0,0,1); EXPECTCY(0.01);
3351 CONVERT_DEC(VarCyFromDec,2,0x80,0,1); EXPECTCY(-0.01);
3352 CONVERT_DEC(VarCyFromDec,2,0,0,999); EXPECTCY(9.99);
3353 CONVERT_DEC(VarCyFromDec,2,0x80,0,999); EXPECTCY(-9.99);
3354 CONVERT_DEC(VarCyFromDec,2,0,0,1500); EXPECTCY(15);
3355 CONVERT_DEC(VarCyFromDec,2,0x80,0,1500); EXPECTCY(-15);
3356}
HRESULT WINAPI VarCyFromDec(DECIMAL *pdecIn, CY *pCyOut)
Definition: vartype.c:3704
#define CONVERT_DEC64(func, scl, sgn, hi, mid, lo)
Definition: vartype.c:114

Referenced by START_TEST().

◆ test_VarCyFromI1()

static void test_VarCyFromI1 ( void  )
static

Definition at line 3161 of file vartype.c.

3162{
3163 CONVVARS(signed char);
3164 int i;
3165
3166 for (i = -128; i < 128; i++)
3167 {
3169 }
3170}
HRESULT WINAPI VarCyFromI1(signed char cIn, CY *pCyOut)
Definition: vartype.c:3641

Referenced by START_TEST().

◆ test_VarCyFromI2()

static void test_VarCyFromI2 ( void  )
static

Definition at line 3183 of file vartype.c.

3184{
3185 CONVVARS(SHORT);
3186 int i;
3187
3188 for (i = -16384; i < 16384; i++)
3189 {
3191 }
3192}
HRESULT WINAPI VarCyFromI2(SHORT sIn, CY *pCyOut)
Definition: vartype.c:3441

Referenced by START_TEST().

◆ test_VarCyFromI4()

static void test_VarCyFromI4 ( void  )
static

Definition at line 3205 of file vartype.c.

3206{
3207 CONVVARS(int);
3208
3209 CONVERT(VarCyFromI4, -1); EXPECTCY(-1);
3212 CONVERT(VarCyFromI4, 0x7fffffff); EXPECTCY64(0x1387, 0xffffd8f0);
3213 CONVERT(VarCyFromI4, 0x80000000); EXPECTCY64(0xffffec78, 0);
3214}
HRESULT WINAPI VarCyFromI4(LONG lIn, CY *pCyOut)
Definition: vartype.c:3462

Referenced by START_TEST().

◆ test_VarCyFromI8()

static void test_VarCyFromI8 ( void  )
static

Definition at line 3307 of file vartype.c.

3308{
3310
3311 CONVERT_I8(VarCyFromI8, -214749, 2728163227ul); EXPECT_OVERFLOW;
3312 CONVERT_I8(VarCyFromI8, -214749, 2728163228ul); EXPECTCY64(2147483648ul,15808);
3313 CONVERT(VarCyFromI8, -1); EXPECTCY(-1);
3316 CONVERT_I8(VarCyFromI8, 214748, 1566804068); EXPECTCY64(2147483647ul, 4294951488ul);
3317 CONVERT_I8(VarCyFromI8, 214748, 1566804069); EXPECT_OVERFLOW;
3318}
HRESULT WINAPI VarCyFromI8(LONG64 llIn, CY *pCyOut)
Definition: vartype.c:3742
#define CONVERT_I8(func, hi, lo)
Definition: vartype.c:100

Referenced by START_TEST().

◆ test_VarCyFromR4()

static void test_VarCyFromR4 ( void  )
static

Definition at line 3225 of file vartype.c.

3226{
3227 CONVVARS(FLOAT);
3228
3229 CONVERT(VarCyFromR4, -1.0f); EXPECTCY(-1);
3230 CONVERT(VarCyFromR4, 0.0f); EXPECTCY(0);
3231 CONVERT(VarCyFromR4, 1.0f); EXPECTCY(1);
3232 CONVERT(VarCyFromR4, 1.5f); EXPECTCY(1.5);
3233
3234 CONVERT(VarCyFromR4, -1.5f); EXPECTCY(-1.5);
3235 CONVERT(VarCyFromR4, -0.6f); EXPECTCY(-0.6);
3236 CONVERT(VarCyFromR4, -0.5f); EXPECTCY(-0.5);
3237 CONVERT(VarCyFromR4, -0.4f); EXPECTCY(-0.4);
3238 CONVERT(VarCyFromR4, 0.4f); EXPECTCY(0.4);
3239 CONVERT(VarCyFromR4, 0.5f); EXPECTCY(0.5);
3240 CONVERT(VarCyFromR4, 0.6f); EXPECTCY(0.6);
3241 CONVERT(VarCyFromR4, 1.5f); EXPECTCY(1.5);
3242 CONVERT(VarCyFromR4, 1.00009f); EXPECTCY(1.0001);
3243 CONVERT(VarCyFromR4, -1.00001f); EXPECTCY(-1);
3244 CONVERT(VarCyFromR4, -1.00005f); EXPECTCY(-1);
3245 CONVERT(VarCyFromR4, -0.00009f); EXPECTCY(-0.0001);
3246 CONVERT(VarCyFromR4, -0.00005f); EXPECTCY(0);
3247 CONVERT(VarCyFromR4, -0.00001f); EXPECTCY(0);
3248 CONVERT(VarCyFromR4, 0.00001f); EXPECTCY(0);
3249 CONVERT(VarCyFromR4, 0.00005f); EXPECTCY(0);
3250 CONVERT(VarCyFromR4, 0.00009f); EXPECTCY(0.0001);
3251 CONVERT(VarCyFromR4, -1.00001f); EXPECTCY(-1);
3252 CONVERT(VarCyFromR4, -1.00005f); EXPECTCY(-1);
3253 CONVERT(VarCyFromR4, -1.00009f); EXPECTCY(-1.0001);
3254}
HRESULT WINAPI VarCyFromR4(FLOAT fltIn, CY *pCyOut)
Definition: vartype.c:3483

Referenced by START_TEST().

◆ test_VarCyFromR8()

static void test_VarCyFromR8 ( void  )
static

Definition at line 3256 of file vartype.c.

3257{
3259
3260#if defined(__i386__) && (defined(_MSC_VER) || defined(__GNUC__))
3261 /* Test our rounding is exactly the same. This fails if the special x86
3262 * code is taken out of VarCyFromR8.
3263 */
3264 CONVERT(VarCyFromR8, -461168601842738.7904); EXPECTCY64(0xbfffffff, 0xffffff23);
3265#endif
3266
3267 CONVERT(VarCyFromR8, -4611686018427388416.1); EXPECT_OVERFLOW;
3268 CONVERT(VarCyFromR8, -1.0); EXPECTCY(-1);
3269 CONVERT(VarCyFromR8, -0.0); EXPECTCY(0);
3270 CONVERT(VarCyFromR8, 1.0); EXPECTCY(1);
3271 CONVERT(VarCyFromR8, 4611686018427387648.0); EXPECT_OVERFLOW;
3272
3273 /* Rounding */
3274 CONVERT(VarCyFromR8, -1.5f); EXPECTCY(-1.5);
3275 CONVERT(VarCyFromR8, -0.6f); EXPECTCY(-0.6);
3276 CONVERT(VarCyFromR8, -0.5f); EXPECTCY(-0.5);
3277 CONVERT(VarCyFromR8, -0.4f); EXPECTCY(-0.4);
3278 CONVERT(VarCyFromR8, 0.4f); EXPECTCY(0.4);
3279 CONVERT(VarCyFromR8, 0.5f); EXPECTCY(0.5);
3280 CONVERT(VarCyFromR8, 0.6f); EXPECTCY(0.6);
3281 CONVERT(VarCyFromR8, 1.5f); EXPECTCY(1.5);
3282 CONVERT(VarCyFromR8, 1.00009f); EXPECTCY(1.0001);
3283 CONVERT(VarCyFromR8, -1.00001f); EXPECTCY(-1);
3284 CONVERT(VarCyFromR8, -1.00005f); EXPECTCY(-1);
3285 CONVERT(VarCyFromR8, -0.00009f); EXPECTCY(-0.0001);
3286 CONVERT(VarCyFromR8, -0.00005f); EXPECTCY(0);
3287 CONVERT(VarCyFromR8, -0.00001f); EXPECTCY(0);
3288 CONVERT(VarCyFromR8, 0.00001f); EXPECTCY(0);
3289 CONVERT(VarCyFromR8, 0.00005f); EXPECTCY(0);
3290 CONVERT(VarCyFromR8, 0.00009f); EXPECTCY(0.0001);
3291 CONVERT(VarCyFromR8, -1.00001f); EXPECTCY(-1);
3292 CONVERT(VarCyFromR8, -1.00005f); EXPECTCY(-1);
3293 CONVERT(VarCyFromR8, -1.00009f); EXPECTCY(-1.0001);
3294}

Referenced by START_TEST().

◆ test_VarCyFromUI1()

static void test_VarCyFromUI1 ( void  )
static

Definition at line 3172 of file vartype.c.

3173{
3174 CONVVARS(BYTE);
3175 int i;
3176
3177 for (i = 0; i < 256; i++)
3178 {
3180 }
3181}
HRESULT WINAPI VarCyFromUI1(BYTE bIn, CY *pCyOut)
Definition: vartype.c:3420

Referenced by START_TEST().

◆ test_VarCyFromUI2()

static void test_VarCyFromUI2 ( void  )
static

Definition at line 3194 of file vartype.c.

3195{
3196 CONVVARS(int);
3197 int i;
3198
3199 for (i = 0; i < 32768; i++)
3200 {
3202 }
3203}
HRESULT WINAPI VarCyFromUI2(USHORT usIn, CY *pCyOut)
Definition: vartype.c:3662

Referenced by START_TEST().

◆ test_VarCyFromUI4()

static void test_VarCyFromUI4 ( void  )
static

Definition at line 3216 of file vartype.c.

3217{
3218 CONVVARS(unsigned int);
3219
3222 CONVERT(VarCyFromUI4, 0x80000000); EXPECTCY64(5000, 0);
3223}
HRESULT WINAPI VarCyFromUI4(ULONG ulIn, CY *pCyOut)
Definition: vartype.c:3683

Referenced by START_TEST().

◆ test_VarCyFromUI8()

static void test_VarCyFromUI8 ( void  )
static

Definition at line 3320 of file vartype.c.

3321{
3323
3326 CONVERT_I8(VarCyFromUI8, 214748, 1566804068); EXPECTCY64(2147483647ul, 4294951488ul);
3327 CONVERT_I8(VarCyFromUI8, 214748, 1566804069); EXPECTCY64(2147483647ul, 4294961488ul);
3328 CONVERT_I8(VarCyFromUI8, 214748, 1566804070); EXPECT_OVERFLOW;
3329 CONVERT_I8(VarCyFromUI8, 214749, 1566804068); EXPECT_OVERFLOW;
3330}
HRESULT WINAPI VarCyFromUI8(ULONG64 ullIn, CY *pCyOut)
Definition: vartype.c:3764

Referenced by START_TEST().

◆ test_VarCyInt()

static void test_VarCyInt ( void  )
static

Definition at line 3598 of file vartype.c.

3599{
3600 MATHVARS1;
3601
3602 MATHINT(-1.0001); EXPECTCY(-2);
3603 MATHINT(-1.4999); EXPECTCY(-2);
3604 MATHINT(-1.5001); EXPECTCY(-2);
3605 MATHINT(-1.9999); EXPECTCY(-2);
3606 MATHINT(-0.0001); EXPECTCY(-1);
3607 MATHINT(-0.4999); EXPECTCY(-1);
3608 MATHINT(-0.5001); EXPECTCY(-1);
3609 MATHINT(-0.9999); EXPECTCY(-1);
3610 MATHINT(0.0001); EXPECTCY(0);
3611 MATHINT(0.4999); EXPECTCY(0);
3612 MATHINT(0.5001); EXPECTCY(0);
3613 MATHINT(0.9999); EXPECTCY(0);
3614 MATHINT(1.0001); EXPECTCY(1);
3615 MATHINT(1.4999); EXPECTCY(1);
3616 MATHINT(1.5001); EXPECTCY(1);
3617 MATHINT(1.9999); EXPECTCY(1);
3618}
#define MATHINT(l)
Definition: vartype.c:3595

Referenced by START_TEST().

◆ test_VarCyMul()

static void test_VarCyMul ( void  )
static

Definition at line 3416 of file vartype.c.

3417{
3418 MATHVARS2;
3419
3420 MATH2(VarCyMul, 534443.0, 0.0); EXPECTCY(0);
3421 MATH2(VarCyMul, 0.5, 0.5); EXPECTCY(0.25);
3422 MATH2(VarCyMul, 0.5, -0.4); EXPECTCY(-0.2);
3423 MATH2(VarCyMul, 0.5, -0.6); EXPECTCY(-0.3);
3424 MATH2(VarCyMul, -0.5, -0.5); EXPECTCY(0.25);
3425 MATH2(VarCyMul, 922337203685476.0, 20000); EXPECT_OVERFLOW;
3426}
HRESULT WINAPI VarCyMul(CY cyLeft, CY cyRight, CY *pCyOut)
Definition: vartype.c:3808

Referenced by START_TEST().

◆ test_VarCyMulI4()

static void test_VarCyMulI4 ( void  )
static

Definition at line 3465 of file vartype.c.

3466{
3467 MATHVARS1;
3468 LONG right;
3469
3470 MATHMULI4(534443.0, 0); EXPECTCY(0);
3471 MATHMULI4(0.5, 1); EXPECTCY(0.5);
3472 MATHMULI4(0.5, 2); EXPECTCY(1);
3473 MATHMULI4(922337203685476.0, 1); EXPECTCY64(2147483647ul,4294951488ul);
3474 MATHMULI4(922337203685476.0, 2); EXPECT_OVERFLOW;
3475}
#define MATHMULI4(l, r)
Definition: vartype.c:3462

Referenced by START_TEST().

◆ test_VarCyMulI8()

static void test_VarCyMulI8 ( void  )
static

Definition at line 3480 of file vartype.c.

3481{
3482 MATHVARS1;
3483 LONG64 right;
3484
3485 MATHMULI8(534443.0, 0); EXPECTCY(0);
3486 MATHMULI8(0.5, 1); EXPECTCY(0.5);
3487 MATHMULI8(0.5, 2); EXPECTCY(1);
3488 MATHMULI8(922337203685476.0, 1); EXPECTCY64(2147483647ul,4294951488ul);
3489 MATHMULI8(922337203685476.0, 2); EXPECT_OVERFLOW;
3490}
#define MATHMULI8(l, r)
Definition: vartype.c:3477

Referenced by START_TEST().

◆ test_VarCyNeg()

static void test_VarCyNeg ( void  )
static

Definition at line 3452 of file vartype.c.

3453{
3454 MATHVARS1;
3455
3456 MATH1(VarCyNeg, 0.5); EXPECTCY(-0.5);
3457 MATH1(VarCyNeg, -0.5); EXPECTCY(0.5);
3458 MATH1(VarCyNeg, 922337203685476.0); EXPECTCY64(2147483648ul,15808);
3459 MATH1(VarCyNeg, -922337203685476.0); EXPECTCY64(2147483647ul,4294951488ul);
3460}
HRESULT WINAPI VarCyNeg(CY cyIn, CY *pCyOut)
Definition: vartype.c:3951

Referenced by START_TEST().

◆ test_VarCyRound()

static void test_VarCyRound ( void  )
static

Definition at line 3541 of file vartype.c.

3542{
3543 MATHVARS1;
3544 int right;
3545
3546 MATHRND(0.5432, 5); EXPECTCY(0.5432);
3547 MATHRND(0.5432, 4); EXPECTCY(0.5432);
3548 MATHRND(0.5432, 3); EXPECTCY(0.543);
3549 MATHRND(0.5432, 2); EXPECTCY(0.54);
3550 MATHRND(0.5432, 1); EXPECTCY(0.5);
3551 MATHRND(0.5532, 0); EXPECTCY(1);
3552 MATHRND(0.5532, -1); EXPECT_INVALID;
3553
3554 MATHRND(0.5568, 5); EXPECTCY(0.5568);
3555 MATHRND(0.5568, 4); EXPECTCY(0.5568);
3556 MATHRND(0.5568, 3); EXPECTCY(0.557);
3557 MATHRND(0.5568, 2); EXPECTCY(0.56);
3558 MATHRND(0.5568, 1); EXPECTCY(0.6);
3559 MATHRND(0.5568, 0); EXPECTCY(1);
3560 MATHRND(0.5568, -1); EXPECT_INVALID;
3561
3562 MATHRND(0.4999, 0); EXPECTCY(0);
3563 MATHRND(0.5000, 0); EXPECTCY(0);
3564 MATHRND(0.5001, 0); EXPECTCY(1);
3565 MATHRND(1.4999, 0); EXPECTCY(1);
3566 MATHRND(1.5000, 0); EXPECTCY(2);
3567 MATHRND(1.5001, 0); EXPECTCY(2);
3568}
#define MATHRND(l, r)
Definition: vartype.c:3538

Referenced by START_TEST().

◆ test_VarCySub()

static void test_VarCySub ( void  )
static

Definition at line 3428 of file vartype.c.

3429{
3430 MATHVARS2;
3431
3432 MATH2(VarCySub, 0.5, 0.5); EXPECTCY(0);
3433 MATH2(VarCySub, 0.5, -0.4); EXPECTCY(0.9);
3434 MATH2(VarCySub, 0.5, -0.6); EXPECTCY(1.1);
3435 MATH2(VarCySub, -0.5, -0.5); EXPECTCY(0);
3436 MATH2(VarCySub, -922337203685476.0, -922337203685476.0); EXPECTCY(0);
3437 MATH2(VarCySub, -922337203685476.0, 922337203685476.0); EXPECT_OVERFLOW;
3438 MATH2(VarCySub, 922337203685476.0, -922337203685476.0); EXPECT_OVERFLOW;
3439 MATH2(VarCySub, 922337203685476.0, 922337203685476.0); EXPECTCY(0);
3440}
HRESULT WINAPI VarCySub(CY cyLeft, CY cyRight, CY *pCyOut)
Definition: vartype.c:3854

Referenced by START_TEST().

◆ test_VarDateChangeTypeEx()

static void test_VarDateChangeTypeEx ( void  )
static

Definition at line 3102 of file vartype.c.

3103{
3104 static const WCHAR sz25570[] = {
3105 '1','/','2','/','1','9','7','0','\0' };
3106 static const WCHAR sz25570_2[] = {
3107 '1','/','2','/','7','0','\0' };
3108 static const WCHAR sz25570Nls[] = {
3109 '1','/','2','/','1','9','7','0',' ','1','2',':','0','0',':','0','0',' ','A','M','\0' };
3110 HRESULT hres;
3111 DATE in;
3112 VARIANTARG vSrc, vDst;
3113 LCID lcid;
3114
3115 in = 1.0;
3116
3117#ifdef HAS_UINT64_TO_FLOAT
3120#endif
3121
3122 V_VT(&vDst) = VT_EMPTY;
3123 V_VT(&vSrc) = VT_DATE;
3124 V_DATE(&vSrc) = 25570.0;
3126
3128 ok(hres == S_OK && V_VT(&vDst) == VT_BSTR && V_BSTR(&vDst) &&
3129 (!lstrcmpW(V_BSTR(&vDst), sz25570) || !lstrcmpW(V_BSTR(&vDst), sz25570_2)),
3130 "hres=0x%lX, type=%d (should be VT_BSTR), *bstr=%s\n",
3131 hres, V_VT(&vDst), V_BSTR(&vDst) ? wtoascii(V_BSTR(&vDst)) : "?");
3132 VariantClear(&vDst);
3133
3135 if (has_locales)
3136 {
3138 ok(hres == S_OK && V_VT(&vDst) == VT_BSTR && V_BSTR(&vDst) && !lstrcmpW(V_BSTR(&vDst), sz25570Nls),
3139 "hres=0x%lX, type=%d (should be VT_BSTR), *bstr=%s\n",
3140 hres, V_VT(&vDst), V_BSTR(&vDst) ? wtoascii(V_BSTR(&vDst)) : "?");
3141 VariantClear(&vDst);
3142 }
3143}
#define VARIANT_USE_NLS
Definition: oleauto.h:317
#define VARIANT_NOUSEROVERRIDE
Definition: oleauto.h:312

Referenced by START_TEST().

◆ test_VarDateCopy()

static void test_VarDateCopy ( void  )
static

Definition at line 3089 of file vartype.c.

3090{
3091 COPYTEST(77665544.0, VT_DATE, V_DATE(&vSrc), V_DATE(&vDst), V_DATEREF(&vSrc),
3092 V_DATEREF(&vDst), "%16.16g");
3093}
#define V_DATEREF(A)
Definition: oleauto.h:232

Referenced by START_TEST().

◆ test_VarDateFromBool()

static void test_VarDateFromBool ( void  )
static

Definition at line 2816 of file vartype.c.

2817{
2819
2820 CONVERT(VarDateFromBool, VARIANT_TRUE); EXPECT(VARIANT_TRUE * 1.0);
2821 CONVERT(VarDateFromBool, VARIANT_FALSE); EXPECT(VARIANT_FALSE * 1.0);
2822}
HRESULT WINAPI VarDateFromBool(VARIANT_BOOL boolIn, DATE *pdateOut)
Definition: vartype.c:7332

Referenced by START_TEST().

◆ test_VarDateFromCy()

static void test_VarDateFromCy ( void  )
static

Definition at line 2824 of file vartype.c.

2825{
2826 CONVVARS(CY);
2827
2828 CONVERT_CY(VarDateFromCy,-32769); EXPECT(-32769.0);
2829 CONVERT_CY(VarDateFromCy,-32768); EXPECT(-32768.0);
2830 CONVERT_CY(VarDateFromCy,-1); EXPECT(-1.0);
2833 CONVERT_CY(VarDateFromCy,32767); EXPECT(32767.0);
2834 CONVERT_CY(VarDateFromCy,32768); EXPECT(32768.0);
2835
2836 CONVERT_CY(VarDateFromCy,-1.5); EXPECT(-1.5);
2837 CONVERT_CY(VarDateFromCy,-0.6); EXPECT(-0.6);
2838 CONVERT_CY(VarDateFromCy,-0.5); EXPECT(-0.5);
2839 CONVERT_CY(VarDateFromCy,-0.4); EXPECT(-0.4);
2840 CONVERT_CY(VarDateFromCy,0.4); EXPECT(0.4);
2841 CONVERT_CY(VarDateFromCy,0.5); EXPECT(0.5);
2842 CONVERT_CY(VarDateFromCy,0.6); EXPECT(0.6);
2843 CONVERT_CY(VarDateFromCy,1.5); EXPECT(1.5);
2844}
HRESULT WINAPI VarDateFromCy(CY cyIn, DATE *pdateOut)
Definition: vartype.c:7349

Referenced by START_TEST().

◆ test_VarDateFromDec()

static void test_VarDateFromDec ( void  )
static

Definition at line 2869 of file vartype.c.

2870{
2872
2874
2875 CONVERT_DEC(VarDateFromDec,0,0x80,0,32768); EXPECT(-32768.0);
2876 CONVERT_DEC(VarDateFromDec,0,0x80,0,1); EXPECT(-1.0);
2877 CONVERT_DEC(VarDateFromDec,0,0,0,0); EXPECT(0.0);
2878 CONVERT_DEC(VarDateFromDec,0,0,0,1); EXPECT(1.0);
2879 CONVERT_DEC(VarDateFromDec,0,0,0,32767); EXPECT(32767.0);
2880
2881 CONVERT_DEC(VarDateFromDec,2,0x80,0,3276800); EXPECT(-32768.0);
2882 CONVERT_DEC(VarDateFromDec,2,0,0,3276700); EXPECT(32767.0);
2883}
HRESULT WINAPI VarDateFromDec(DECIMAL *pdecIn, DATE *pdateOut)
Definition: vartype.c:8005

Referenced by START_TEST().

◆ test_VarDateFromI1()

static void test_VarDateFromI1 ( void  )
static

Definition at line 2735 of file vartype.c.

2736{
2737 CONVVARS(signed char);
2738 int i;
2739
2740 CONVERTRANGE(VarDateFromI1, -128, 128);
2741}
HRESULT WINAPI VarDateFromI1(signed char cIn, DATE *pdateOut)
Definition: vartype.c:7954

Referenced by START_TEST().

◆ test_VarDateFromI2()

static void test_VarDateFromI2 ( void  )
static

Definition at line 2751 of file vartype.c.

2752{
2753 CONVVARS(SHORT);
2754 int i;
2755
2756 CONVERTRANGE(VarDateFromI2, -32768, 32768);
2757}
HRESULT WINAPI VarDateFromI2(short sIn, DATE *pdateOut)
Definition: vartype.c:7241

Referenced by START_TEST().

◆ test_VarDateFromI4()

static void test_VarDateFromI4 ( void  )
static

Definition at line 2767 of file vartype.c.

2768{
2769 CONVVARS(int);
2770
2772 if (hres != DISP_E_TYPEMISMATCH) /* Early versions return this, incorrectly */
2775 CONVERT(VarDateFromI4, -1); EXPECT(-1.0);
2776 CONVERT(VarDateFromI4, 0); EXPECT(0.0);
2777 CONVERT(VarDateFromI4, 1); EXPECT(1.0);
2780 if (hres != DISP_E_TYPEMISMATCH) /* Early versions return this, incorrectly */
2782}
HRESULT WINAPI VarDateFromI4(LONG lIn, DATE *pdateOut)
Definition: vartype.c:7258
#define DATE_MAX
Definition: variant.h:69
#define DATE_MIN
Definition: variant.h:70

Referenced by START_TEST().

◆ test_VarDateFromI8()

static void test_VarDateFromI8 ( void  )
static

Definition at line 2846 of file vartype.c.

2847{
2849
2852 CONVERT(VarDateFromI8, -1); EXPECT(-1.0);
2853 CONVERT(VarDateFromI8, 0); EXPECT(0.0);
2854 CONVERT(VarDateFromI8, 1); EXPECT(1.0);
2857}
HRESULT WINAPI VarDateFromI8(LONG64 llIn, DATE *pdateOut)
Definition: vartype.c:8023

Referenced by START_TEST().

◆ test_VarDateFromR4()

static void test_VarDateFromR4 ( void  )
static

Definition at line 2796 of file vartype.c.

2797{
2798 CONVVARS(FLOAT);
2799
2800 CONVERT(VarDateFromR4, -1.0f); EXPECT(-1.0);
2801 CONVERT(VarDateFromR4, 0.0f); EXPECT(0.0);
2802 CONVERT(VarDateFromR4, 1.0f); EXPECT(1.0);
2803 CONVERT(VarDateFromR4, 1.5f); EXPECT(1.5);
2804}
HRESULT WINAPI VarDateFromR4(FLOAT fltIn, DATE *pdateOut)
Definition: vartype.c:7275

Referenced by START_TEST().

◆ test_VarDateFromR8()

static void test_VarDateFromR8 ( void  )
static

Definition at line 2806 of file vartype.c.

2807{
2808 CONVVARS(double);
2809
2810 CONVERT(VarDateFromR8, -1.0f); EXPECT(-1.0);
2811 CONVERT(VarDateFromR8, 0.0f); EXPECT(0.0);
2812 CONVERT(VarDateFromR8, 1.0f); EXPECT(1.0);
2813 CONVERT(VarDateFromR8, 1.5f); EXPECT(1.5);
2814}
HRESULT WINAPI VarDateFromR8(double dblIn, DATE *pdateOut)
Definition: vartype.c:7292

Referenced by START_TEST().

◆ test_VarDateFromStr()

static void test_VarDateFromStr ( void  )
static

Definition at line 2925 of file vartype.c.

2926{
2927 LCID lcid;
2928 DATE out, relative;
2929 HRESULT hres;
2930 SYSTEMTIME st;
2931 OLECHAR buff[128];
2932 size_t i;
2933 OLECHAR with_ideographic_spaceW[] = { '6','/','3','0','/','2','0','1','1',0x3000,
2934 '1',':','2','0',':','3','4',0 };
2935
2937
2938 /* Some date formats are relative, so we need to find the current year */
2939 GetSystemTime(&st);
2940 st.wHour = st.wMinute = st.wSecond = st.wMilliseconds = 0;
2942
2943 /* Floating point number are not recognised */
2944 DFS("0.0");
2945 if (hres == S_OK)
2946 EXPECT_DBL(0.0); /* Very old versions accept this string */
2947 else
2949
2950 /* 1 element - can only be a time, and only if it has am/pm */
2951 DFS("1 am"); EXPECT_DBL(0.04166666666666666);
2952 /* 2 elements */
2953 /* A decimal point is treated as a time separator.
2954 * The following are converted as hours/minutes.
2955 */
2956 DFS("0.1"); EXPECT_DBL(0.0006944444444444445);
2957 DFS("0.40"); EXPECT_DBL(0.02777777777777778);
2958 DFS("2.5"); EXPECT_DBL(0.08680555555555555);
2959 /* A colon acts as a decimal point */
2960 DFS("0:1"); EXPECT_DBL(0.0006944444444444445);
2961 DFS("0:20"); EXPECT_DBL(0.01388888888888889);
2962 DFS("0:40"); EXPECT_DBL(0.02777777777777778);
2963 DFS("3:5"); EXPECT_DBL(0.1284722222222222);
2964 /* Check the am/pm limits */
2965 DFS("00:00 AM"); EXPECT_DBL(0.0);
2966 DFS("00:00 a"); EXPECT_DBL(0.0);
2967 DFS("12:59 AM"); EXPECT_DBL(0.04097222222222222);
2968 DFS("12:59 A"); EXPECT_DBL(0.04097222222222222);
2969 DFS("00:00 pm"); EXPECT_DBL(0.5);
2970 DFS("00:00 p"); EXPECT_DBL(0.5);
2971 DFS("12:59 pm"); EXPECT_DBL(0.5409722222222222);
2972 DFS("12:59 p"); EXPECT_DBL(0.5409722222222222);
2973 /* AM/PM is ignored if hours > 12 */
2974 DFS("13:00 AM"); EXPECT_DBL(0.5416666666666666);
2975 DFS("13:00 PM"); EXPECT_DBL(0.5416666666666666);
2976
2977 /* Space, dash and slash all indicate a date format. */
2978 /* If both numbers are valid month values => month/day of current year */
2979 DFS("1 2"); MKRELDATE(2,1); EXPECT_DBL(relative);
2980 DFS("2 1"); MKRELDATE(1,2); EXPECT_DBL(relative);
2981 /* one number not valid month, is a valid day, other number valid month:
2982 * that number becomes the day.
2983 */
2984 DFS("14 1"); MKRELDATE(14,1); EXPECT_DBL(relative);
2985 DFS("1 14"); EXPECT_DBL(relative);
2986 /* If the numbers can't be day/month, they are assumed to be year/month.
2987 * But see the Y2K cutoff below.
2988 */
2989 DFS("30 2"); EXPECT_DBL2(47515.0, 10990.0);
2990 DFS("2 30"); EXPECT_DBL2(47515.0, 10990.0);
2991 DFS("32 49"); EXPECT_MISMATCH; /* Can't be any format */
2992 DFS("0 49"); EXPECT_MISMATCH; /* Can't be any format */
2993 /* If a month name is given the other number is the day */
2994 DFS("Jan 2"); MKRELDATE(2,1); EXPECT_DBL(relative);
2995 DFS("2 Jan"); EXPECT_DBL(relative);
2996 /* Unless it can't be, in which case it becomes the year */
2997 DFS("Jan 35"); EXPECT_DBL2(49310.0, 12785.0);
2998 DFS("35 Jan"); EXPECT_DBL2(49310.0, 12785.0);
2999 DFS("Jan-35"); EXPECT_DBL2(49310.0, 12785.0);
3000 DFS("35-Jan"); EXPECT_DBL2(49310.0, 12785.0);
3001 DFS("Jan/35"); EXPECT_DBL2(49310.0, 12785.0);
3002 DFS("35/Jan"); EXPECT_DBL2(49310.0, 12785.0);
3003 /* 3 elements */
3004 /* 3 numbers and time separator => h:m:s */
3005 DFS("0.1.0"); EXPECT_DBL(0.0006944444444444445);
3006 DFS("1.5.2"); EXPECT_DBL(0.04516203703703704);
3007 /* 3 numbers => picks date giving preference to lcid format */
3008 DFS("1 2 3"); EXPECT_DBL(37623.0);
3009 DFS("14 2 3"); EXPECT_DBL(41673.0);
3010 DFS("2 14 3"); EXPECT_DBL(37666.0);
3011 DFS("2 3 14"); EXPECT_DBL(41673.0);
3012 DFS("32 2 3"); EXPECT_DBL2(48247.0, 11722.0);
3013 DFS("2 3 32"); EXPECT_DBL2(48247.0, 11722.0);
3014
3015 /* Old Windows versions use 29 as the Y2K cutoff:
3016 * years 00-29 map to 2000-2029 while years 30-99 map to 1930-1999
3017 */
3018 DFS("1 1 0"); EXPECT_DBL(36526.0);
3019 DFS("12 31 29"); EXPECT_DBL(47483.0);
3020 DFS("1 1 30"); EXPECT_DBL2(47484.0, 10959.0);
3021 /* But Windows 1903+ uses 49 as the Y2K cutoff */
3022 DFS("31 12 49"); EXPECT_DBL2(54788.0, 18263.0);
3023 DFS("1 1 50"); EXPECT_DBL(18264.0);
3024 DFS("12 31 99"); EXPECT_DBL(36525.0);
3025 DFS("1 1 100"); EXPECT_DBL(-657434.0);
3026
3027 DFS("3 am 1 2"); MKRELDATE(2,1); relative += 0.125; EXPECT_DBL(relative);
3028 DFS("1 2 3 am"); EXPECT_DBL(relative);
3029
3030 /* 4 elements -interpreted as 2 digit date & time */
3031 DFS("1.2 3 4"); MKRELDATE(4,3); relative += 0.04305555556; EXPECT_DBL(relative);
3032 DFS("3 4 1.2"); EXPECT_DBL(relative);
3033 /* 5 elements - interpreted as 2 & 3 digit date/times */
3034 DFS("1.2.3 4 5"); MKRELDATE(5,4); relative += 0.04309027778; EXPECT_DBL(relative);
3035 DFS("1.2 3 4 5"); EXPECT_DBL(38415.04305555556);
3036#if 0
3037 /* following throws an exception on winME */
3038 DFS("1 2 3.4.5"); MKRELDATE(2,1); relative += 0.12783564815; EXPECT_DBL(relative);
3039#endif
3040 DFS("1 2 3 4.5"); EXPECT_DBL(37623.17013888889);
3041 /* 6 elements - interpreted as 3 digit date/times */
3042 DFS("1.2.3 4 5 6"); EXPECT_DBL(38812.04309027778);
3043 DFS("1 2 3 4.5.6"); EXPECT_DBL(37623.17020833334);
3044
3045 for (i = 0; i < ARRAY_SIZE(BadDateStrings); i++)
3046 {
3048 }
3049
3050 /* Some normal-ish strings */
3051 DFS("2 January, 1970"); EXPECT_DBL(25570.0);
3052 DFS("2 January 1970"); EXPECT_DBL(25570.0);
3053 DFS("2 Jan 1970"); EXPECT_DBL(25570.0);
3054 DFS("2/Jan/1970"); EXPECT_DBL(25570.0);
3055 DFS("2-Jan-1970"); EXPECT_DBL(25570.0);
3056 DFS("1 2 1970"); EXPECT_DBL(25570.0);
3057 DFS("1/2/1970"); EXPECT_DBL(25570.0);
3058 DFS("1-2-1970"); EXPECT_DBL(25570.0);
3059 DFS("13-1-1970"); EXPECT_DBL(25581.0);
3060 DFS("1970-1-13"); EXPECT_DBL(25581.0);
3061 DFS("6/30/2011 01:20:34"); EXPECT_DBL(40724.05594907407);
3062 DFS("6/30/2011 01:20:34 AM"); EXPECT_DBL(40724.05594907407);
3063 DFS("6/30/2011 01:20:34 PM"); EXPECT_DBL(40724.55594907407);
3064 DFS("2013-05-14 02:04:12"); EXPECT_DBL(41408.08625000001);
3065 DFS("2013-05-14 02:04:12.017000000"); EXPECT_MISMATCH;
3066 /* Native fails "1999 January 3, 9AM". I consider that a bug in native */
3067
3068 /* test a data with ideographic space */
3069 out = 0.0;
3070 hres = VarDateFromStr(with_ideographic_spaceW, lcid, LOCALE_NOUSEROVERRIDE, &out);
3071 EXPECT_DBL(40724.05594907407);
3072
3073 /* test a non-english data string */
3074 DFS("02.01.1970"); EXPECT_MISMATCH;
3075 DFS("02.01.1970 00:00:00"); EXPECT_MISMATCH;
3077 DFS("02.01.1970"); EXPECT_DBL(25570.0);
3078 DFS("02.13.1970"); EXPECT_DBL(25612.0);
3079 DFS("02-13-1970"); EXPECT_DBL(25612.0);
3080 DFS("2020-01-11"); EXPECT_DBL(43841.0);
3081 DFS("2173-10-14"); EXPECT_DBL(100000.0);
3082
3083 DFS("02.01.1970 00:00:00"); EXPECT_DBL(25570.0);
3085 DFS("02.01.1970"); EXPECT_MISMATCH;
3086 DFS("02.01.1970 00:00:00"); EXPECT_MISMATCH;
3087}
VOID WINAPI GetSystemTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:304
#define EXPECT_DBL(x)
Definition: vartype.c:86
#define MKRELDATE(day, mth)
Definition: vartype.c:2890
#define DFS(str)
Definition: vartype.c:2885
static const char *const BadDateStrings[]
Definition: vartype.c:2893
#define EXPECT_DBL2(new, old)
Definition: vartype.c:88
#define LANG_GERMAN
Definition: nls.h:62
#define SUBLANG_GERMAN
Definition: nls.h:251
WORD wMilliseconds
Definition: minwinbase.h:263
WORD wSecond
Definition: minwinbase.h:262
WORD wMinute
Definition: minwinbase.h:261

Referenced by START_TEST().

◆ test_VarDateFromUI1()

static void test_VarDateFromUI1 ( void  )
static

Definition at line 2743 of file vartype.c.

2744{
2745 CONVVARS(BYTE);
2746 int i;
2747
2749}
HRESULT WINAPI VarDateFromUI1(BYTE bIn, DATE *pdateOut)
Definition: vartype.c:7224

Referenced by START_TEST().

◆ test_VarDateFromUI2()

static void test_VarDateFromUI2 ( void  )
static

Definition at line 2759 of file vartype.c.

2760{
2762 int i;
2763
2764 CONVERTRANGE(VarDateFromUI2, 0, 65536);
2765}
HRESULT WINAPI VarDateFromUI2(USHORT uiIn, DATE *pdateOut)
Definition: vartype.c:7971

Referenced by START_TEST().

◆ test_VarDateFromUI4()

static void test_VarDateFromUI4 ( void  )
static

Definition at line 2784 of file vartype.c.

2785{
2786 CONVVARS(unsigned int);
2787
2788 CONVERT(VarDateFromUI4, 0); EXPECT(0.0);
2789 CONVERT(VarDateFromUI4, 1); EXPECT(1.0);
2792 if (hres != DISP_E_TYPEMISMATCH) /* Early versions return this, incorrectly */
2794}
HRESULT WINAPI VarDateFromUI4(ULONG ulIn, DATE *pdateOut)
Definition: vartype.c:7988

Referenced by START_TEST().

◆ test_VarDateFromUI8()

static void test_VarDateFromUI8 ( void  )
static

Definition at line 2859 of file vartype.c.

2860{
2862
2863 CONVERT(VarDateFromUI8, 0); EXPECT(0.0);
2864 CONVERT(VarDateFromUI8, 1); EXPECT(1.0);
2867}
HRESULT WINAPI VarDateFromUI8(ULONG64 ullIn, DATE *pdateOut)
Definition: vartype.c:8043

Referenced by START_TEST().

◆ test_VarDecAbs()

static void test_VarDecAbs ( void  )
static

Definition at line 3832 of file vartype.c.

3833{
3834 MATHVARS1;
3835
3836 SETDEC(l,0,0x80,0,1); MATH1(VarDecAbs); EXPECTDEC(0,0,0,1);
3837 SETDEC(l,0,0,0,0); MATH1(VarDecAbs); EXPECTDEC(0,0,0,0);
3838 SETDEC(l,0,0x80,0,0); MATH1(VarDecAbs); EXPECTDEC(0,0,0,0);
3839 SETDEC(l,0,0,0,1); MATH1(VarDecAbs); EXPECTDEC(0,0,0,1);
3840
3841 /* Doesn't check for invalid input */
3842 SETDEC(l,0,0x7f,0,1); MATH1(VarDecAbs); EXPECTDEC(0,0x7f,0,1);
3843 SETDEC(l,0,0x80,29,1); MATH1(VarDecAbs); EXPECTDEC(0,0,29,1);
3844}
HRESULT WINAPI VarDecAbs(const DECIMAL *pDecIn, DECIMAL *pDecOut)
Definition: vartype.c:5698
#define SETDEC(dec, scl, sgn, hi, lo)
Definition: vartype.c:106
#define EXPECTDEC(scl, sgn, hi, lo)
Definition: vartype.c:3627

Referenced by START_TEST().

◆ test_VarDecAdd()

static void test_VarDecAdd ( void  )
static

Definition at line 3861 of file vartype.c.

3862{
3863 MATHVARS2;
3864
3865 SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,0); MATH2(VarDecAdd); EXPECTDEC(0,0,0,0);
3866 SETDEC(l,0,0,0,0); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0x80,0,1);
3867 SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,1);
3868
3869 SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,0); MATH2(VarDecAdd); EXPECTDEC(0,0,0,1);
3870 SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,2);
3871 SETDEC(l,0,0,0,1); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); EXPECTDECZERO();
3872 SETDEC(l,0,0,0,1); SETDEC(r,0,0x80,0,2); MATH2(VarDecAdd); EXPECTDEC(0,0x80,0,1);
3873
3874 SETDEC(l,0,0x80,0,0); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,1);
3875 SETDEC(l,0,0x80,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDECZERO();
3876 SETDEC(l,0,0x80,0,1); SETDEC(r,0,0,0,2); MATH2(VarDecAdd); EXPECTDEC(0,0,0,1);
3877 SETDEC(l,0,0x80,0,1); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0x80,0,2);
3878 SETDEC(l,0,0x80,0,2); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0x80,0,1);
3879
3880 SETDEC(l,0,0,0,0xffffffff); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,0xfffffffe);
3881 SETDEC(l,0,0,0,0xffffffff); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,(ULONG64)1 << 32);
3882 SETDEC(l,0,0,0,0xffffffff); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,(ULONG64)1 << 32);
3883
3884 SETDEC64(l,0,0,0,0xffffffff,0); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC64(0,0,0,0xffffffff,1);
3885 SETDEC64(l,0,0,0,0xffffffff,0); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd);
3886 EXPECTDEC64(0,0,0,0xfffffffe,0xffffffff);
3887
3888 SETDEC64(l,0,0,0,0xffffffff,0xffffffff); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,1,0);
3889 SETDEC64(l,0,0,0,0xffffffff,0xffffffff); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd);
3890 EXPECTDEC64(0,0,0,0xffffffff,0xfffffffe);
3891
3892 SETDEC(l,0,0,0xffffffff,0); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0xffffffff,1);
3893 SETDEC(l,0,0,0xffffffff,0); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd);
3894 EXPECTDEC64(0,0,0xfffffffe,0xffffffff,0xffffffff);
3895
3896 SETDEC64(l,0,0,0xffffffff,0xffffffff,0xffffffff);SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd);
3897 EXPECTDEC64(0,0,0xffffffff,0xffffffff,0xfffffffe);
3898 SETDEC64(l,0,0,0xffffffff,0xffffffff,0xffffffff);SETDEC(r,0,0,0,1); MATH2(VarDecAdd);
3899 ok(hres == DISP_E_OVERFLOW,"Expected overflow, got (%d,%d,%ld,(%8lx,%8lx)x) hres 0x%08lx\n",
3900 out.scale, out.sign, out.Hi32, out.Mid32, out.Lo32, hres);
3901
3902 SETDEC64(l,1,0,0xffffffff,0xffffffff,0xffffffff);SETDEC(r,1,0,0,1); MATH2(VarDecAdd);
3903 EXPECTDEC64(0,0,0x19999999,0x99999999,0x9999999A);
3904
3905 SETDEC64(l,0,0,0xe22ea493,0xb30310a7,0x70000000);SETDEC64(r,0,0,0xe22ea493,0xb30310a7,0x70000000); MATH2(VarDecAdd);
3906 ok(hres == DISP_E_OVERFLOW,"Expected overflow, got (%d,%d,%ld,(%8lx,%8lx)x) hres 0x%08lx\n",
3907 out.scale, out.sign, out.Hi32, out.Mid32, out.Lo32, hres);
3908
3909 SETDEC64(l,1,0,0xe22ea493,0xb30310a7,0x70000000);SETDEC64(r,1,0,0xe22ea493,0xb30310a7,0x70000000); MATH2(VarDecAdd);
3910 EXPECTDEC64(0,0,0x2d3c8750,0xbd670354,0xb0000000);
3911
3912 SETDEC(l,3,128,0,123456); SETDEC64(r,0,0,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF);
3913 MATH2(VarDecAdd); EXPECTDEC64(0,0,-1,0xFFFFFFFF,0xFFFFFF84);
3914
3915 SETDEC(l,3,0,0,123456); SETDEC64(r,0,0,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF); MATH2(VarDecAdd);
3916 ok(hres == DISP_E_OVERFLOW,"Expected overflow, got (%d,%d,%ld,(%8lx,%8lx)x) hres 0x%08lx\n",
3917 out.scale, out.sign, out.Hi32, out.Mid32, out.Lo32, hres);
3918
3919 SETDEC(l,4,0,0,123456); SETDEC64(r,0,0,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF); MATH2(VarDecAdd);
3920 ok(hres == DISP_E_OVERFLOW,"Expected overflow, got (%d,%d,%ld,(%8lx,%8lx)x) hres 0x%08lx\n",
3921 out.scale, out.sign, out.Hi32, out.Mid32, out.Lo32, hres);
3922
3923 SETDEC(l,5,0,0,123456); SETDEC64(r,0,0,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF); MATH2(VarDecAdd);
3924 ok(hres == DISP_E_OVERFLOW,"Expected overflow, got (%d,%d,%ld,(%8lx,%8lx)x) hres 0x%08lx\n",
3925 out.scale, out.sign, out.Hi32, out.Mid32, out.Lo32, hres);
3926
3927 SETDEC(l,6,0,0,123456); SETDEC64(r,0,0,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF);
3928 MATH2(VarDecAdd); EXPECTDEC64(0,0,-1,0xFFFFFFFF,0xFFFFFFFF);
3929
3930 SETDEC(l,3,128,0,123456); SETDEC64(r,0,0,0x19999999,0x99999999,0x99999999);
3931 MATH2(VarDecAdd); EXPECTDEC64(1,0,-1,0xFFFFFFFF,0xFFFFFB27);
3932
3933 SETDEC(l,3,128,0,123567); SETDEC64(r,0,0,0x19999999,0x99999999,0x99999999);
3934 MATH2(VarDecAdd); EXPECTDEC64(1,0,-1,0xFFFFFFFF,0xFFFFFB26);
3935
3936 /* Promotes to the highest scale, so here the results are in the scale of 2 */
3937 SETDEC(l,2,0,0,0); SETDEC(r,0,0,0,0); MATH2(VarDecAdd); EXPECTDEC(2,0,0,0);
3938 SETDEC(l,2,0,0,100); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(2,0,0,200);
3939}
HRESULT WINAPI VarDecAdd(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut)
Definition: vartype.c:4588
#define EXPECTDEC64(scl, sgn, hi, mid, lo)
Definition: vartype.c:3634
#define EXPECTDECZERO()
Definition: vartype.c:3643
#define DISP_E_OVERFLOW
Definition: winerror.h:3622

Referenced by START_TEST().

◆ test_VarDecCmp()

static void test_VarDecCmp ( void  )
static

Definition at line 4050 of file vartype.c.

4051{
4052 MATHVARS1;
4053
4054 SETDEC(l,0,0,0,1); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_EQ;
4055 SETDEC(l,0,0,0,1); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_GT;
4056 SETDEC(l,0,0,0,1); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
4057
4058 SETDEC(l,0,0,0,1); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_GT;
4059 SETDEC(l,0,0,0,1); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_GT;
4060 SETDEC(l,0,0,0,1); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
4061
4062 SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT;
4063 SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_LT;
4064 SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
4065
4066 SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_EQ;
4067 SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_LT;
4068 SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
4069
4070 SETDEC(l,0,0,0,0); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT;
4071 SETDEC(l,0,0,0,0); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_EQ;
4072 SETDEC(l,0,0,0,0); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
4073
4074 SETDEC(l,0,0,0,0); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_GT;
4075 SETDEC(l,0,0,0,0); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_EQ;
4076 SETDEC(l,0,0,0,0); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
4077
4078 SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT;
4079 SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_EQ;
4080 SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
4081
4082 SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_GT;
4083 SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_EQ;
4084 SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
4085
4086 SETDEC(l,0,0,-1,-1); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_GT;
4087 SETDEC(l,0,0,-1,-1); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_GT;
4088 SETDEC(l,0,0,-1,-1); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_EQ;
4089
4090 SETDEC(l,0,0,-1,-1); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_GT;
4091 SETDEC(l,0,0,-1,-1); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_GT;
4092 SETDEC(l,0,0,-1,-1); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
4093
4094 SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT;
4095 SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_LT;
4096 SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
4097
4098 SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_LT;
4099 SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_LT;
4100 SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_EQ;
4101
4102
4103 SETDEC(out,0,0,0,1); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_EQ;
4104 SETDEC(out,0,0,0,1); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_LT;
4105 SETDEC(out,0,0,0,1); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
4106
4107 SETDEC(out,0,0,0,1); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_LT;
4108 SETDEC(out,0,0,0,1); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_LT;
4109 SETDEC(out,0,0,0,1); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
4110
4111 SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_GT;
4112 SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_GT;
4113 SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
4114
4115 SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_EQ;
4116 SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_GT;
4117 SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
4118
4119 SETDEC(out,0,0,0,0); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_GT;
4120 SETDEC(out,0,0,0,0); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_EQ;
4121 SETDEC(out,0,0,0,0); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
4122
4123 SETDEC(out,0,0,0,0); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_LT;
4124 SETDEC(out,0,0,0,0); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_EQ;
4125 SETDEC(out,0,0,0,0); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
4126
4127 SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_GT;
4128 SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_EQ;
4129 SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
4130
4131 SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_LT;
4132 SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_EQ;
4133 SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
4134
4135 SETDEC(out,0,0,-1,-1); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT;
4136 SETDEC(out,0,0,-1,-1); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_LT;
4137 SETDEC(out,0,0,-1,-1); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_EQ;
4138
4139 SETDEC(out,0,0,-1,-1); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_LT;
4140 SETDEC(out,0,0,-1,-1); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_LT;
4141 SETDEC(out,0,0,-1,-1); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
4142
4143 SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_GT;
4144 SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_GT;
4145 SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
4146
4147 SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_GT;
4148 SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_GT;
4149 SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_EQ;
4150
4151 SETDEC(l,3,0,0,123456); SETDEC64(out,0,0,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF);
4153}
HRESULT WINAPI VarDecCmp(const DECIMAL *pDecLeft, const DECIMAL *pDecRight)
Definition: vartype.c:5866

Referenced by START_TEST().

◆ test_VarDecCmpR8()

static void test_VarDecCmpR8 ( void  )
static

Definition at line 4155 of file vartype.c.

4156{
4157 HRESULT hres;
4158 DECIMAL l;
4159 double r;
4160
4161 SETDEC(l,0,0,0,1); r = 0.0; MATH3(VarDecCmpR8); EXPECT_GT;
4162 SETDEC(l,0,0,0,1); r = 0.1; MATH3(VarDecCmpR8); EXPECT_GT;
4163 SETDEC(l,0,0,0,1); r = -0.1; MATH3(VarDecCmpR8); EXPECT_GT;
4164
4165 SETDEC(l,0,DECIMAL_NEG,0,1); r = 0.0; MATH3(VarDecCmpR8); EXPECT_LT;
4166 SETDEC(l,0,DECIMAL_NEG,0,1); r = 0.1; MATH3(VarDecCmpR8); EXPECT_LT;
4167 SETDEC(l,0,DECIMAL_NEG,0,1); r = -0.1; MATH3(VarDecCmpR8); EXPECT_LT;
4168
4169 SETDEC(l,0,0,0,0); r = 0.0; MATH3(VarDecCmpR8); EXPECT_EQ;
4170 SETDEC(l,0,0,0,0); r = 0.1; MATH3(VarDecCmpR8); EXPECT_LT;
4171 SETDEC(l,0,0,0,0); r = -0.1; MATH3(VarDecCmpR8); EXPECT_GT;
4172
4173 SETDEC(l,0,DECIMAL_NEG,0,0); r = 0.0; MATH3(VarDecCmpR8); EXPECT_EQ;
4174 SETDEC(l,0,DECIMAL_NEG,0,0); r = 0.1; MATH3(VarDecCmpR8); EXPECT_LT;
4175 SETDEC(l,0,DECIMAL_NEG,0,0); r = -0.1; MATH3(VarDecCmpR8); EXPECT_GT;
4176
4177 SETDEC(l,0,0,0,1); r = DECIMAL_NEG; MATH3(VarDecCmpR8); EXPECT_LT;
4178 SETDEC(l,0,DECIMAL_NEG,0,0); r = DECIMAL_NEG; MATH3(VarDecCmpR8); EXPECT_LT;
4179 SETDEC(l,0,0,-1,-1); r = DECIMAL_NEG; MATH3(VarDecCmpR8); EXPECT_GT;
4180 SETDEC(l,0,DECIMAL_NEG,-1,-1); r = DECIMAL_NEG; MATH3(VarDecCmpR8); EXPECT_LT;
4181}
HRESULT WINAPI VarDecCmpR8(const DECIMAL *pDecLeft, double dblRight)
Definition: vartype.c:5912
#define MATH3(func)
Definition: vartype.c:3830

Referenced by START_TEST().

◆ test_VarDecDiv()

static void test_VarDecDiv ( void  )
static

Definition at line 4001 of file vartype.c.

4002{
4003 MATHVARS2;
4004
4005 /* identity divisions */
4006 SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,1); MATH2(VarDecDiv); EXPECTDEC(0,0,0,0);
4007 SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecDiv); EXPECTDEC(0,0,0,1);
4008 SETDEC(l,1,0,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecDiv); EXPECTDEC(1,0,0,1);
4009
4010 /* exact divisions */
4011 SETDEC(l,0,0,0,45); SETDEC(r,0,0,0,9); MATH2(VarDecDiv); EXPECTDEC(0,0,0,5);
4012 SETDEC(l,1,0,0,45); SETDEC(r,0,0,0,9); MATH2(VarDecDiv); EXPECTDEC(1,0,0,5);
4013 SETDEC(l,0,0,0,45); SETDEC(r,1,0,0,9); MATH2(VarDecDiv); EXPECTDEC(0,0,0,50);
4014 SETDEC(l,1,0,0,45); SETDEC(r,2,0,0,9); MATH2(VarDecDiv); EXPECTDEC(0,0,0,50);
4015 /* these last three results suggest that native oleaut32 scales both operands down to zero
4016 before the division, but does not always try to scale the result, even if it is possible -
4017 analogous to multiplication behavior.
4018 */
4019 SETDEC(l,1,0,0,45); SETDEC(r,1,0,0,9); MATH2(VarDecDiv); EXPECTDEC(0,0,0,5);
4020 SETDEC(l,2,0,0,450); SETDEC(r,1,0,0,9); MATH2(VarDecDiv);
4021 if (out.scale == 1) EXPECTDEC(1,0,0,50);
4022 else EXPECTDEC(0,0,0,5);
4023
4024 /* inexact divisions */
4025 SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,180700362,0x14b700cb,0x05555555);
4026 SETDEC(l,1,0,0,1); SETDEC(r,0,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,18070036,0x35458014,0x4d555555);
4027 SETDEC(l,0,0,0,1); SETDEC(r,1,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,1807003620,0xcf2607ee,0x35555555);
4028 SETDEC(l,1,0,0,1); SETDEC(r,2,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,1807003620,0xcf2607ee,0x35555555);
4029 SETDEC(l,1,0,0,1); SETDEC(r,1,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,180700362,0x14b700cb,0x05555555);
4030 SETDEC(l,2,0,0,10); SETDEC(r,1,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,180700362,0x14b700cb,0x05555555);
4031
4032 /* this one shows that native oleaut32 rounds up the result */
4033 SETDEC(l,0,0,0,2); SETDEC(r,0,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,361400724,0x296e0196,0x0aaaaaab);
4034
4035 /* sign tests */
4036 SETDEC(l,0,0x80,0,45); SETDEC(r,0,0,0,9); MATH2(VarDecDiv); EXPECTDEC(0,0x80,0,5);
4037 SETDEC(l,0,0,0,45); SETDEC(r,0,0x80,0,9); MATH2(VarDecDiv);EXPECTDEC(0,0x80,0,5);
4038 SETDEC(l,0,0x80,0,45); SETDEC(r,0,0x80,0,9); MATH2(VarDecDiv);EXPECTDEC(0,0,0,5);
4039
4040 /* oddballs */
4041 SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,0); MATH2(VarDecDiv);/* indeterminate */
4042 ok(hres == DISP_E_DIVBYZERO,"Expected division-by-zero, got (%d,%d,%ld,(%8lx,%8lx)x) hres 0x%08lx\n",
4043 out.scale, out.sign, out.Hi32, out.Mid32, out.Lo32, hres);
4044 SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,0); MATH2(VarDecDiv);/* division by zero */
4045 ok(hres == DISP_E_DIVBYZERO,"Expected division-by-zero, got (%d,%d,%ld,(%8lx,%8lx)x) hres 0x%08lx\n",
4046 out.scale, out.sign, out.Hi32, out.Mid32, out.Lo32, hres);
4047
4048}
HRESULT WINAPI VarDecDiv(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut)
Definition: vartype.c:5601
#define DISP_E_DIVBYZERO
Definition: winerror.h:3630

Referenced by START_TEST().

◆ test_VarDecFromBool()

static void test_VarDecFromBool ( void  )
static

Definition at line 3738 of file vartype.c.

3739{
3740 CONVVARS(SHORT);
3741 int i;
3742
3743 /* Test all possible type values. Note that the result is reduced to 0 or -1 */
3744 for (i = -32768; i < 0; i++)
3745 {
3747 if (i)
3748 EXPECTDEC(0,0x80,0,1);
3749 else
3750 EXPECTDEC(0,0,0,0);
3751 }
3752}
HRESULT WINAPI VarDecFromBool(VARIANT_BOOL bIn, DECIMAL *pDecOut)
Definition: vartype.c:4312

Referenced by START_TEST().

◆ test_VarDecFromCy()

static void test_VarDecFromCy ( void  )
static

Definition at line 3811 of file vartype.c.

3812{
3813 CONVVARS(CY);
3814
3815 CONVERT_CY(VarDecFromCy, -1); EXPECTDEC(4,0x80,0,10000);
3816 CONVERT_CY(VarDecFromCy, 0); EXPECTDEC(4,0,0,0);
3817 CONVERT_CY(VarDecFromCy, 1); EXPECTDEC(4,0,0,10000);
3818 CONVERT_CY(VarDecFromCy, 0.5); EXPECTDEC(4,0,0,5000);
3819}
HRESULT WINAPI VarDecFromCy(CY cyIn, DECIMAL *pDecOut)
Definition: vartype.c:4239

Referenced by START_TEST().

◆ test_VarDecFromDate()

static void test_VarDecFromDate ( void  )
static

Definition at line 3780 of file vartype.c.

3781{
3782 CONVVARS(DATE);
3783
3784 CONVERT(VarDecFromDate,-0.6); EXPECTDEC(1,0x80,0,6);
3785 CONVERT(VarDecFromDate,-0.5); EXPECTDEC(1,0x80,0,5);
3786 CONVERT(VarDecFromDate,-0.4); EXPECTDEC(1,0x80,0,4);
3787 CONVERT(VarDecFromDate,0.0); EXPECTDEC(0,0,0,0);
3788 CONVERT(VarDecFromDate,0.4); EXPECTDEC(1,0,0,4);
3789 CONVERT(VarDecFromDate,0.5); EXPECTDEC(1,0,0,5);
3790 CONVERT(VarDecFromDate,0.6); EXPECTDEC(1,0,0,6);
3791}
HRESULT WINAPI VarDecFromDate(DATE dateIn, DECIMAL *pDecOut)
Definition: vartype.c:4222

Referenced by START_TEST().

◆ test_VarDecFromI1()

static void test_VarDecFromI1 ( void  )
static

Definition at line 3650 of file vartype.c.

3651{
3652 CONVVARS(signed char);
3653 int i;
3654
3655 for (i = -128; i < 128; i++)
3656 {
3658 }
3659}
HRESULT WINAPI VarDecFromI1(signed char cIn, DECIMAL *pDecOut)
Definition: vartype.c:4341
#define EXPECTDECI
Definition: vartype.c:3648

Referenced by START_TEST().

◆ test_VarDecFromI2()

static void test_VarDecFromI2 ( void  )
static

Definition at line 3661 of file vartype.c.

3662{
3663 CONVVARS(SHORT);
3664 int i;
3665
3666 for (i = -32768; i < 32768; i++)
3667 {
3669 }
3670}
HRESULT WINAPI VarDecFromI2(SHORT sIn, DECIMAL *pDecOut)
Definition: vartype.c:4114

Referenced by START_TEST().

◆ test_VarDecFromI4()

static void test_VarDecFromI4 ( void  )
static

Definition at line 3672 of file vartype.c.

3673{
3674 CONVVARS(LONG);
3675 int i;
3676
3677 for (i = -32768; i < 32768; i++)
3678 {
3680 }
3681}
HRESULT WINAPI VarDecFromI4(LONG lIn, DECIMAL *pDecOut)
Definition: vartype.c:4131

Referenced by START_TEST().

◆ test_VarDecFromI8()

static void test_VarDecFromI8 ( void  )
static

Definition at line 3683 of file vartype.c.

3684{
3686 int i;
3687
3688 for (i = -32768; i < 32768; i++)
3689 {
3691 }
3692}
HRESULT WINAPI VarDecFromI8(LONG64 llIn, DECIMAL *pDecOut)
Definition: vartype.c:4396

Referenced by START_TEST().

◆ test_VarDecFromR4()

static void test_VarDecFromR4 ( void  )
static

Definition at line 3754 of file vartype.c.

3755{
3756 CONVVARS(float);
3757
3758 CONVERT(VarDecFromR4,-0.6f); EXPECTDEC(1,0x80,0,6);
3759 CONVERT(VarDecFromR4,-0.5f); EXPECTDEC(1,0x80,0,5);
3760 CONVERT(VarDecFromR4,-0.4f); EXPECTDEC(1,0x80,0,4);
3761 CONVERT(VarDecFromR4,0.0f); EXPECTDEC(0,0,0,0);
3762 CONVERT(VarDecFromR4,0.4f); EXPECTDEC(1,0,0,4);
3763 CONVERT(VarDecFromR4,0.5f); EXPECTDEC(1,0,0,5);
3764 CONVERT(VarDecFromR4,0.6f); EXPECTDEC(1,0,0,6);
3765}
HRESULT WINAPI VarDecFromR4(FLOAT fltIn, DECIMAL *pDecOut)
Definition: vartype.c:4178

Referenced by START_TEST().

◆ test_VarDecFromR8()

static void test_VarDecFromR8 ( void  )
static

Definition at line 3767 of file vartype.c.

3768{
3769 CONVVARS(double);
3770
3771 CONVERT(VarDecFromR8,-0.6); EXPECTDEC(1,0x80,0,6);
3772 CONVERT(VarDecFromR8,-0.5); EXPECTDEC(1,0x80,0,5);
3773 CONVERT(VarDecFromR8,-0.4); EXPECTDEC(1,0x80,0,4);
3774 CONVERT(VarDecFromR8,0.0); EXPECTDEC(0,0,0,0);
3775 CONVERT(VarDecFromR8,0.4); EXPECTDEC(1,0,0,4);
3776 CONVERT(VarDecFromR8,0.5); EXPECTDEC(1,0,0,5);
3777 CONVERT(VarDecFromR8,0.6); EXPECTDEC(1,0,0,6);
3778}
HRESULT WINAPI VarDecFromR8(double dblIn, DECIMAL *pDecOut)
Definition: vartype.c:4200

Referenced by START_TEST().

◆ test_VarDecFromStr()

static void test_VarDecFromStr ( void  )
static

Definition at line 3793 of file vartype.c.

3794{
3795 CONVVARS(LCID);
3796 OLECHAR buff[128];
3797
3799
3806 CONVERT_STR(VarDecFromStr,"18446744073709551616", LOCALE_NOUSEROVERRIDE); EXPECTDEC(0,0,1,0);
3807 CONVERT_STR(VarDecFromStr,"4294967296.0", LOCALE_NOUSEROVERRIDE); EXPECTDEC64(0,0,0,1,0);
3808 CONVERT_STR(VarDecFromStr,"18446744073709551616.0", LOCALE_NOUSEROVERRIDE); EXPECTDEC(0,0,1,0);
3809}
HRESULT WINAPI VarDecFromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, DECIMAL *pDecOut)
Definition: vartype.c:4273

Referenced by START_TEST().

◆ test_VarDecFromUI1()

static void test_VarDecFromUI1 ( void  )
static

Definition at line 3694 of file vartype.c.

3695{
3696 CONVVARS(BYTE);
3697 int i;
3698
3699 for (i = 0; i < 256; i++)
3700 {
3702 }
3703}
HRESULT WINAPI VarDecFromUI1(BYTE bIn, DECIMAL *pDecOut)
Definition: vartype.c:4097

Referenced by START_TEST().

◆ test_VarDecFromUI2()

static void test_VarDecFromUI2 ( void  )
static

Definition at line 3705 of file vartype.c.

3706{
3708 int i;
3709
3710 for (i = 0; i < 65536; i++)
3711 {
3713 }
3714}
HRESULT WINAPI VarDecFromUI2(USHORT usIn, DECIMAL *pDecOut)
Definition: vartype.c:4358

Referenced by START_TEST().

◆ test_VarDecFromUI4()

static void test_VarDecFromUI4 ( void  )
static

Definition at line 3716 of file vartype.c.

3717{
3718 CONVVARS(ULONG);
3719 int i;
3720
3721 for (i = 0; i < 65536; i++)
3722 {
3724 }
3725}
HRESULT WINAPI VarDecFromUI4(ULONG ulIn, DECIMAL *pDecOut)
Definition: vartype.c:4375

Referenced by START_TEST().

◆ test_VarDecFromUI8()

static void test_VarDecFromUI8 ( void  )
static

Definition at line 3727 of file vartype.c.

3728{
3730 int i;
3731
3732 for (i = 0; i < 65536; i++)
3733 {
3735 }
3736}
HRESULT WINAPI VarDecFromUI8(ULONG64 ullIn, DECIMAL *pDecOut)
Definition: vartype.c:4429

Referenced by START_TEST().

◆ test_VarDecMul()

static void test_VarDecMul ( void  )
static

Definition at line 3951 of file vartype.c.

3952{
3953 MATHVARS2;
3954
3955 SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,0); MATH2(VarDecMul); EXPECTDEC(0,0,0,0);
3956 SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,0); MATH2(VarDecMul); EXPECTDEC(0,0,0,0);
3957 SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,1); MATH2(VarDecMul); EXPECTDEC(0,0,0,0);
3958 SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecMul); EXPECTDEC(0,0,0,1);
3959 SETDEC(l,0,0,0,45000);SETDEC(r,0,0,0,2); MATH2(VarDecMul); EXPECTDEC(0,0,0,90000);
3960 SETDEC(l,0,0,0,2); SETDEC(r,0,0,0,45000); MATH2(VarDecMul); EXPECTDEC(0,0,0,90000);
3961
3962 SETDEC(l,0,0x80,0,2); SETDEC(r,0,0,0,2); MATH2(VarDecMul); EXPECTDEC(0,0x80,0,4);
3963 SETDEC(l,0,0,0,2); SETDEC(r,0,0x80,0,2); MATH2(VarDecMul); EXPECTDEC(0,0x80,0,4);
3964 SETDEC(l,0,0x80,0,2); SETDEC(r,0,0x80,0,2); MATH2(VarDecMul); EXPECTDEC(0,0,0,4);
3965
3966 SETDEC(l,4,0,0,2); SETDEC(r,0,0,0,2); MATH2(VarDecMul); EXPECTDEC(4,0,0,4);
3967 SETDEC(l,0,0,0,2); SETDEC(r,3,0,0,2); MATH2(VarDecMul); EXPECTDEC(3,0,0,4);
3968 SETDEC(l,4,0,0,2); SETDEC(r,3,0,0,2); MATH2(VarDecMul); EXPECTDEC(7,0,0,4);
3969 /* this last one shows that native oleaut32 does *not* gratuitously seize opportunities
3970 to reduce the scale if possible - the canonical result for the expected value is (6,0,0,1)
3971 */
3972 SETDEC(l,4,0,0,5); SETDEC(r,3,0,0,2); MATH2(VarDecMul); EXPECTDEC(7,0,0,10);
3973
3974 SETDEC64(l,0,0,0,0xFFFFFFFF,0xFFFFFFFF); SETDEC(r,0,0,0,2); MATH2(VarDecMul); EXPECTDEC64(0,0,1,0xFFFFFFFF,0xFFFFFFFE);
3975 SETDEC(l,0,0,0,2); SETDEC64(r,0,0,0,0xFFFFFFFF,0xFFFFFFFF); MATH2(VarDecMul); EXPECTDEC64(0,0,1,0xFFFFFFFF,0xFFFFFFFE);
3976 SETDEC(l,0,0,1,1); SETDEC(r,0,0,0,0x80000000); MATH2(VarDecMul); EXPECTDEC(0,0,0x80000000,0x80000000);
3977 SETDEC(l,0,0,0,0x80000000); SETDEC(r,0,0,1,1); MATH2(VarDecMul); EXPECTDEC(0,0,0x80000000,0x80000000);
3978
3979 /* near-overflow, used as a reference */
3980 SETDEC64(l,0,0,0,0xFFFFFFFF,0xFFFFFFFF); SETDEC(r,0,0,0,2000000000); MATH2(VarDecMul);EXPECTDEC64(0,0,1999999999,0xFFFFFFFF,0x88CA6C00);
3981 /* actual overflow - right operand is 10 times the previous value */
3982 SETDEC64(l,0,0,0,0xFFFFFFFF,0xFFFFFFFF); SETDEC64(r,0,0,0,4,0xA817C800); MATH2(VarDecMul);
3983 ok(hres == DISP_E_OVERFLOW,"Expected overflow, got (%d,%d,%ld,(%8lx,%8lx)x) hres 0x%08lx\n",
3984 out.scale, out.sign, out.Hi32, out.Mid32, out.Lo32, hres);
3985 /* here, native oleaut32 has an opportunity to avert the overflow, by reducing the scale of the result */
3986 SETDEC64(l,1,0,0,0xFFFFFFFF,0xFFFFFFFF); SETDEC64(r,0,0,0,4,0xA817C800); MATH2(VarDecMul);EXPECTDEC64(0,0,1999999999,0xFFFFFFFF,0x88CA6C00);
3987
3988 /* near-overflow, used as a reference */
3989 SETDEC64(l,0,0,1,0xFFFFFFFF,0xFFFFFFFE); SETDEC(r,0,0,0,1000000000); MATH2(VarDecMul);EXPECTDEC64(0,0,1999999999,0xFFFFFFFF,0x88CA6C00);
3990 /* actual overflow - right operand is 10 times the previous value */
3991 SETDEC64(l,0,0,1,0xFFFFFFFF,0xFFFFFFFE); SETDEC64(r,0,0,0,2,0x540BE400); MATH2(VarDecMul);
3992 ok(hres == DISP_E_OVERFLOW,"Expected overflow, got (%d,%d,%ld,(%8lx,%8lx)x) hres 0x%08lx\n",
3993 out.scale, out.sign, out.Hi32, out.Mid32, out.Lo32, hres);
3994 /* here, native oleaut32 has an opportunity to avert the overflow, by reducing the scale of the result */
3995 SETDEC64(l,1,0,1,0xFFFFFFFF,0xFFFFFFFE); SETDEC64(r,0,0,0,2,0x540BE400); MATH2(VarDecMul);EXPECTDEC64(0,0,1999999999,0xFFFFFFFF,0x88CA6C00);
3996
3997 /* this one shows that native oleaut32 is willing to lose significant digits in order to avert an overflow */
3998 SETDEC64(l,2,0,0,0xFFFFFFFF,0xFFFFFFFF); SETDEC64(r,0,0,0,9,0x502F9001); MATH2(VarDecMul);EXPECTDEC64(1,0,0xee6b2800,0x19999998,0xab2e719a);
3999}
HRESULT WINAPI VarDecMul(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut)
Definition: vartype.c:5622

Referenced by START_TEST().

◆ test_VarDecNeg()

static void test_VarDecNeg ( void  )
static

Definition at line 3846 of file vartype.c.

3847{
3848 MATHVARS1;
3849
3850 SETDEC(l,0,0x80,0,1); MATH1(VarDecNeg); EXPECTDEC(0,0,0,1);
3851 SETDEC(l,0,0,0,0); MATH1(VarDecNeg); EXPECTDEC(0,0x80,0,0); /* '-0'! */
3852 SETDEC(l,0,0x80,0,0); MATH1(VarDecNeg); EXPECTDEC(0,0,0,0);
3853 SETDEC(l,0,0,0,1); MATH1(VarDecNeg); EXPECTDEC(0,0x80,0,1);
3854
3855 /* Doesn't check for invalid input */
3856 SETDEC(l,0,0x7f,0,1); MATH1(VarDecNeg); EXPECTDEC(0,0xff,0,1);
3857 SETDEC(l,0,0x80,29,1); MATH1(VarDecNeg); EXPECTDEC(0,0,29,1);
3858 SETDEC(l,0,0,29,1); MATH1(VarDecNeg); EXPECTDEC(0,0x80,29,1);
3859}
HRESULT WINAPI VarDecNeg(const DECIMAL *pDecIn, DECIMAL *pDecOut)
Definition: vartype.c:5794

Referenced by START_TEST().

◆ test_VarDecRound()

static void test_VarDecRound ( void  )
static

Definition at line 4185 of file vartype.c.

4186{
4187 HRESULT hres;
4188 DECIMAL l, out;
4189
4190 CLEAR(out); SETDEC(l, 0, 0, 0, 1); hres = VarDecRound(&l, 3, &out); EXPECTDEC(0, 0, 0, 1);
4191
4192 CLEAR(out); SETDEC(l, 0, 0, 0, 1); hres = VarDecRound(&l, 0, &out); EXPECTDEC(0, 0, 0, 1);
4193 CLEAR(out); SETDEC(l, 1, 0, 0, 1); hres = VarDecRound(&l, 0, &out); EXPECTDEC(0, 0, 0, 0);
4194 CLEAR(out); SETDEC(l, 1, 0, 0, 1); hres = VarDecRound(&l, 1, &out); EXPECTDEC(1, 0, 0, 1);
4195 CLEAR(out); SETDEC(l, 2, 0, 0, 11); hres = VarDecRound(&l, 1, &out); EXPECTDEC(1, 0, 0, 1);
4196 CLEAR(out); SETDEC(l, 2, 0, 0, 15); hres = VarDecRound(&l, 1, &out); EXPECTDEC(1, 0, 0, 2);
4197 CLEAR(out); SETDEC(l, 6, 0, 0, 550001); hres = VarDecRound(&l, 1, &out); EXPECTDEC(1, 0, 0, 6);
4198
4199 CLEAR(out); SETDEC(l, 0, DECIMAL_NEG, 0, 1); hres = VarDecRound(&l, 0, &out); EXPECTDEC(0, DECIMAL_NEG, 0, 1);
4200 CLEAR(out); SETDEC(l, 1, DECIMAL_NEG, 0, 1); hres = VarDecRound(&l, 0, &out); EXPECTDEC(0, DECIMAL_NEG, 0, 0);
4201 CLEAR(out); SETDEC(l, 1, DECIMAL_NEG, 0, 1); hres = VarDecRound(&l, 1, &out); EXPECTDEC(1, DECIMAL_NEG, 0, 1);
4202 CLEAR(out); SETDEC(l, 2, DECIMAL_NEG, 0, 11); hres = VarDecRound(&l, 1, &out); EXPECTDEC(1, DECIMAL_NEG, 0, 1);
4203 CLEAR(out); SETDEC(l, 2, DECIMAL_NEG, 0, 15); hres = VarDecRound(&l, 1, &out); EXPECTDEC(1, DECIMAL_NEG, 0, 2);
4204 CLEAR(out); SETDEC(l, 6, DECIMAL_NEG, 0, 550001); hres = VarDecRound(&l, 1, &out); EXPECTDEC(1, DECIMAL_NEG, 0, 6);
4205
4206 CLEAR(out); SETDEC64(l, 0, 0, 0xffffffff, 0xffffffff, 0xffffffff); hres = VarDecRound(&l, 0, &out); EXPECTDEC64(0, 0, 0xffffffff, 0xffffffff, 0xffffffff);
4207 CLEAR(out); SETDEC64(l, 28, 0, 0xffffffff, 0xffffffff, 0xffffffff); hres = VarDecRound(&l, 0, &out); EXPECTDEC64(0, 0, 0, 0, 8);
4208 CLEAR(out); SETDEC64(l, 0, DECIMAL_NEG, 0xffffffff, 0xffffffff, 0xffffffff); hres = VarDecRound(&l, 0, &out); EXPECTDEC64(0, DECIMAL_NEG, 0xffffffff, 0xffffffff, 0xffffffff);
4209 CLEAR(out); SETDEC64(l, 28, DECIMAL_NEG, 0xffffffff, 0xffffffff, 0xffffffff); hres = VarDecRound(&l, 0, &out); EXPECTDEC64(0, DECIMAL_NEG, 0, 0, 8);
4210
4211 CLEAR(out); SETDEC(l, 2, 0, 0, 0); hres = VarDecRound(&l, 1, &out); EXPECTDEC(1, 0, 0, 0);
4212}
HRESULT WINAPI VarDecRound(const DECIMAL *pDecIn, int cDecimals, DECIMAL *pDecOut)
Definition: vartype.c:5815
#define CLEAR(x)
Definition: vartype.c:4183

Referenced by START_TEST().

◆ test_VarDecSub()

static void test_VarDecSub ( void  )
static

Definition at line 3941 of file vartype.c.

3942{
3943 MATHVARS2;
3944
3945 SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,0); MATH2(VarDecSub); EXPECTDECZERO();
3946 SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,1); MATH2(VarDecSub); EXPECTDEC(0,0x80,0,1);
3947 SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecSub); EXPECTDECZERO();
3948 SETDEC(l,0,0,0,1); SETDEC(r,0,0x80,0,1); MATH2(VarDecSub); EXPECTDEC(0,0,0,2);
3949}
HRESULT WINAPI VarDecSub(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut)
Definition: vartype.c:5677

Referenced by START_TEST().

◆ test_VarI1ChangeTypeEx()

static void test_VarI1ChangeTypeEx ( void  )
static

Definition at line 638 of file vartype.c.

639{
641 signed char in;
642 VARIANTARG vSrc, vDst;
643
644 in = 1;
645
649}
#define NEGATIVE_TYPETEST(vt, val, fs, vtneg, valneg)
Definition: vartype.c:177

Referenced by START_TEST().

◆ test_VarI1Copy()

static void test_VarI1Copy ( void  )
static

Definition at line 633 of file vartype.c.

634{
635 COPYTEST(1, VT_I1, V_I1(&vSrc), V_I1(&vDst), V_I1REF(&vSrc), V_I1REF(&vDst), "%d");
636}
#define V_I1REF(A)
Definition: oleauto.h:244

Referenced by START_TEST().

◆ test_VarI1FromBool()

static void test_VarI1FromBool ( void  )
static

Definition at line 484 of file vartype.c.

485{
487 int i;
488
489 /* Note that conversions from bool wrap around! */
490 CONVERT(VarI1FromBool, -129); EXPECT(127);
491 CONVERTRANGE(VarI1FromBool, -128, 128);
492 CONVERT(VarI1FromBool, 128); EXPECT(-128);
493}
HRESULT WINAPI VarI1FromBool(VARIANT_BOOL boolIn, signed char *pcOut)
Definition: vartype.c:465

Referenced by START_TEST().

◆ test_VarI1FromCy()

static void test_VarI1FromCy ( void  )
static

Definition at line 569 of file vartype.c.

570{
571 CONVVARS(CY);
572
574 CONVERT_CY(VarI1FromCy,-128); EXPECT(128);
578 CONVERT_CY(VarI1FromCy,127); EXPECT(127);
580
581 CONVERT_CY(VarI1FromCy,-1.5); EXPECT(-2);
582 CONVERT_CY(VarI1FromCy,-0.6); EXPECT(-1);
583 CONVERT_CY(VarI1FromCy,-0.5); EXPECT(0);
584 CONVERT_CY(VarI1FromCy,-0.4); EXPECT(0);
589}
HRESULT WINAPI VarI1FromCy(CY cyIn, signed char *pcOut)
Definition: vartype.c:402

Referenced by START_TEST().

◆ test_VarI1FromDate()

static void test_VarI1FromDate ( void  )
static

Definition at line 547 of file vartype.c.

548{
549 CONVVARS(DATE);
550
552 CONVERT(VarI1FromDate, -128.0); EXPECT(-128);
553 CONVERT(VarI1FromDate, -1.0); EXPECT(-1);
554 CONVERT(VarI1FromDate, 0.0); EXPECT(0);
555 CONVERT(VarI1FromDate, 1.0); EXPECT(1);
556 CONVERT(VarI1FromDate, 127.0); EXPECT(127);
558
559 CONVERT(VarI1FromDate, -1.5); EXPECT(-2);
560 CONVERT(VarI1FromDate, -0.6); EXPECT(-1);
561 CONVERT(VarI1FromDate, -0.5); EXPECT(0);
562 CONVERT(VarI1FromDate, -0.4); EXPECT(0);
563 CONVERT(VarI1FromDate, 0.4); EXPECT(0);
564 CONVERT(VarI1FromDate, 0.5); EXPECT(0);
565 CONVERT(VarI1FromDate, 0.6); EXPECT(1);
566 CONVERT(VarI1FromDate, 1.5); EXPECT(2);
567}
HRESULT WINAPI VarI1FromDate(DATE dateIn, signed char *pcOut)
Definition: vartype.c:383

Referenced by START_TEST().

◆ test_VarI1FromDec()

static void test_VarI1FromDec ( void  )
static

Definition at line 591 of file vartype.c.

592{
594
596
598 CONVERT_DEC(VarI1FromDec,0,0x80,0,128); EXPECT(-128);
599 CONVERT_DEC(VarI1FromDec,0,0x80,0,1); EXPECT(-1);
600 CONVERT_DEC(VarI1FromDec,0,0,0,0); EXPECT(0);
601 CONVERT_DEC(VarI1FromDec,0,0,0,1); EXPECT(1);
602 CONVERT_DEC(VarI1FromDec,0,0,0,127); EXPECT(127);
604
605 CONVERT_DEC(VarI1FromDec,2,0x80,0,12800); EXPECT(-128);
606 CONVERT_DEC(VarI1FromDec,2,0,0,12700); EXPECT(127);
607}
HRESULT WINAPI VarI1FromDec(DECIMAL *pdecIn, signed char *pcOut)
Definition: vartype.c:523

Referenced by START_TEST().

◆ test_VarI1FromI2()

static void test_VarI1FromI2 ( void  )
static

Definition at line 418 of file vartype.c.

419{
421 int i;
422
423 OVERFLOWRANGE(VarI1FromI2, -32768, -128);
424 CONVERTRANGE(VarI1FromI2, -128, 128);
425 OVERFLOWRANGE(VarI1FromI2, 129, 32768);
426}
HRESULT WINAPI VarI1FromI2(SHORT sIn, signed char *pcOut)
Definition: vartype.c:301
#define OVERFLOWRANGE(func, start, end)
Definition: vartype.c:93

Referenced by START_TEST().

◆ test_VarI1FromI4()

static void test_VarI1FromI4 ( void  )
static

Definition at line 428 of file vartype.c.

429{
430 CONVVARS(LONG);
431 int i;
432
434 CONVERTRANGE(VarI1FromI4, -128, 128);
436}
HRESULT WINAPI VarI1FromI4(LONG iIn, signed char *pcOut)
Definition: vartype.c:320

Referenced by START_TEST().

◆ test_VarI1FromI8()

static void test_VarI1FromI8 ( void  )
static

Definition at line 438 of file vartype.c.

439{
441 int i;
442
444 CONVERTRANGE(VarI1FromI8, -127, 128);
446}
HRESULT WINAPI VarI1FromI8(LONG64 llIn, signed char *pcOut)
Definition: vartype.c:549

Referenced by START_TEST().

◆ test_VarI1FromR4()

static void test_VarI1FromR4 ( void  )
static

Definition at line 495 of file vartype.c.

496{
498
501 CONVERT(VarI1FromR4, -128.5f); EXPECT(-128);
502 CONVERT(VarI1FromR4, -128.0f); EXPECT(-128);
503 CONVERT(VarI1FromR4, -1.0f); EXPECT(-1);
504 CONVERT(VarI1FromR4, 0.0f); EXPECT(0);
505 CONVERT(VarI1FromR4, 1.0f); EXPECT(1);
506 CONVERT(VarI1FromR4, 127.0f); EXPECT(127);
507 CONVERT(VarI1FromR4, 127.49f); EXPECT(127);
510
511 CONVERT(VarI1FromR4, -1.5f); EXPECT(-2);
512 CONVERT(VarI1FromR4, -0.6f); EXPECT(-1);
513 CONVERT(VarI1FromR4, -0.5f); EXPECT(0);
514 CONVERT(VarI1FromR4, -0.4f); EXPECT(0);
515 CONVERT(VarI1FromR4, 0.4f); EXPECT(0);
516 CONVERT(VarI1FromR4, 0.5f); EXPECT(0);
517 CONVERT(VarI1FromR4, 0.6f); EXPECT(1);
518 CONVERT(VarI1FromR4, 1.5f); EXPECT(2);
519}
HRESULT WINAPI VarI1FromR4(FLOAT fltIn, signed char *pcOut)
Definition: vartype.c:339

Referenced by START_TEST().

◆ test_VarI1FromR8()

static void test_VarI1FromR8 ( void  )
static

Definition at line 521 of file vartype.c.

522{
524
527 CONVERT(VarI1FromR8, -128.5); EXPECT(-128);
528 CONVERT(VarI1FromR8, -128.0); EXPECT(-128);
529 CONVERT(VarI1FromR8, -1.0); EXPECT(-1);
530 CONVERT(VarI1FromR8, 0.0); EXPECT(0);
531 CONVERT(VarI1FromR8, 1.0); EXPECT(1);
532 CONVERT(VarI1FromR8, 127.0); EXPECT(127);
533 CONVERT(VarI1FromR8, 127.49); EXPECT(127);
536
537 CONVERT(VarI1FromR8, -1.5); EXPECT(-2);
538 CONVERT(VarI1FromR8, -0.6); EXPECT(-1);
539 CONVERT(VarI1FromR8, -0.5); EXPECT(0);
540 CONVERT(VarI1FromR8, -0.4); EXPECT(0);
541 CONVERT(VarI1FromR8, 0.4); EXPECT(0);
542 CONVERT(VarI1FromR8, 0.5); EXPECT(0);
543 CONVERT(VarI1FromR8, 0.6); EXPECT(1);
544 CONVERT(VarI1FromR8, 1.5); EXPECT(2);
545}
HRESULT WINAPI VarI1FromR8(double dblIn, signed char *pcOut)
Definition: vartype.c:361

Referenced by START_TEST().

◆ test_VarI1FromStr()

static void test_VarI1FromStr ( void  )
static

Definition at line 609 of file vartype.c.

Referenced by START_TEST().

◆ test_VarI1FromUI1()

static void test_VarI1FromUI1 ( void  )
static

Definition at line 448 of file vartype.c.

449{
450 CONVVARS(BYTE);
451 int i;
452
453 CONVERTRANGE(VarI1FromUI1, 0, 127);
454 OVERFLOWRANGE(VarI1FromUI1, 128, 255);
455}
HRESULT WINAPI VarI1FromUI1(BYTE bIn, signed char *pcOut)
Definition: vartype.c:282

Referenced by START_TEST().

◆ test_VarI1FromUI2()

static void test_VarI1FromUI2 ( void  )
static

Definition at line 457 of file vartype.c.

458{
460 int i;
461
462 CONVERTRANGE(VarI1FromUI2, 0, 127);
463 OVERFLOWRANGE(VarI1FromUI2, 128, 32768);
464}
HRESULT WINAPI VarI1FromUI2(USHORT usIn, signed char *pcOut)
Definition: vartype.c:484

Referenced by START_TEST().

◆ test_VarI1FromUI4()

static void test_VarI1FromUI4 ( void  )
static

Definition at line 466 of file vartype.c.

467{
469 int i;
470
471 CONVERTRANGE(VarI1FromUI4, 0, 127);
473}
HRESULT WINAPI VarI1FromUI4(ULONG ulIn, signed char *pcOut)
Definition: vartype.c:504

Referenced by START_TEST().

◆ test_VarI1FromUI8()

static void test_VarI1FromUI8 ( void  )
static

Definition at line 475 of file vartype.c.

476{
478 int i;
479
480 CONVERTRANGE(VarI1FromUI8, 0, 127);
482}
HRESULT WINAPI VarI1FromUI8(ULONG64 ullIn, signed char *pcOut)
Definition: vartype.c:568

Referenced by START_TEST().

◆ test_VarI2ChangeTypeEx()

static void test_VarI2ChangeTypeEx ( void  )
static

Definition at line 1172 of file vartype.c.

1173{
1174 HRESULT hres;
1175 SHORT in;
1176 VARIANTARG vSrc, vDst;
1177
1178 in = 1;
1179
1180 INITIAL_TYPETEST(VT_I2, V_I2, "%d");
1183}

Referenced by START_TEST().

◆ test_VarI2Copy()

static void test_VarI2Copy ( void  )
static

Definition at line 1167 of file vartype.c.

1168{
1169 COPYTEST(1, VT_I2, V_I2(&vSrc), V_I2(&vDst), V_I2REF(&vSrc), V_I2REF(&vDst), "%d");
1170}
#define V_I2REF(A)
Definition: oleauto.h:246

Referenced by START_TEST().

◆ test_VarI2FromBool()

static void test_VarI2FromBool ( void  )
static

Definition at line 1015 of file vartype.c.

1016{
1018 int i;
1019
1020 CONVERTRANGE(VarI2FromBool, -32768, 32768);
1021}
HRESULT WINAPI VarI2FromBool(VARIANT_BOOL boolIn, SHORT *psOut)
Definition: vartype.c:1059

Referenced by START_TEST().

◆ test_VarI2FromCy()

static void test_VarI2FromCy ( void  )
static

Definition at line 1100 of file vartype.c.

1101{
1102 CONVVARS(CY);
1103
1105 CONVERT_CY(VarI2FromCy,-32768); EXPECT(32768);
1106 CONVERT_CY(VarI2FromCy,-1); EXPECT(-1);
1109 CONVERT_CY(VarI2FromCy,32767); EXPECT(32767);
1111
1112 /* Rounding */
1113 CONVERT_CY(VarI2FromCy,-1.5); EXPECT(-2);
1114 CONVERT_CY(VarI2FromCy,-0.6); EXPECT(-1);
1115 CONVERT_CY(VarI2FromCy,-0.5); EXPECT(0);
1116 CONVERT_CY(VarI2FromCy,-0.4); EXPECT(0);
1117 CONVERT_CY(VarI2FromCy,0.4); EXPECT(0);
1118 CONVERT_CY(VarI2FromCy,0.5); EXPECT(0);
1119 CONVERT_CY(VarI2FromCy,0.6); EXPECT(1);
1120 CONVERT_CY(VarI2FromCy,1.5); EXPECT(2);
1121}
HRESULT WINAPI VarI2FromCy(CY cyIn, SHORT *psOut)
Definition: vartype.c:978

Referenced by START_TEST().

◆ test_VarI2FromDate()

static void test_VarI2FromDate ( void  )
static

Definition at line 1077 of file vartype.c.

1078{
1079 CONVVARS(DATE);
1080
1082 CONVERT(VarI2FromDate, -32768.0); EXPECT(-32768);
1083 CONVERT(VarI2FromDate, -1.0); EXPECT(-1);
1084 CONVERT(VarI2FromDate, 0.0); EXPECT(0);
1085 CONVERT(VarI2FromDate, 1.0); EXPECT(1);
1086 CONVERT(VarI2FromDate, 32767.0); EXPECT(32767);
1088
1089 /* Rounding */
1090 CONVERT(VarI2FromDate, -1.5); EXPECT(-2);
1091 CONVERT(VarI2FromDate, -0.6); EXPECT(-1);
1092 CONVERT(VarI2FromDate, -0.5); EXPECT(0);
1093 CONVERT(VarI2FromDate, -0.4); EXPECT(0);
1094 CONVERT(VarI2FromDate, 0.4); EXPECT(0);
1095 CONVERT(VarI2FromDate, 0.5); EXPECT(0);
1096 CONVERT(VarI2FromDate, 0.6); EXPECT(1);
1097 CONVERT(VarI2FromDate, 1.5); EXPECT(2);
1098}
HRESULT WINAPI VarI2FromDate(DATE dateIn, SHORT *psOut)
Definition: vartype.c:999

Referenced by START_TEST().

◆ test_VarI2FromDec()

static void test_VarI2FromDec ( void  )
static

Definition at line 1123 of file vartype.c.

1124{
1126
1128
1129 CONVERT_DEC(VarI2FromDec,0,0x80,0,32769); EXPECT_OVERFLOW;
1130 CONVERT_DEC(VarI2FromDec,0,0x80,0,32768); EXPECT(-32768);
1131 CONVERT_DEC(VarI2FromDec,0,0x80,0,1); EXPECT(-1);
1132 CONVERT_DEC(VarI2FromDec,0,0,0,0); EXPECT(0);
1133 CONVERT_DEC(VarI2FromDec,0,0,0,1); EXPECT(1);
1134 CONVERT_DEC(VarI2FromDec,0,0,0,32767); EXPECT(32767);
1136
1137 CONVERT_DEC(VarI2FromDec,2,0x80,0,3276800); EXPECT(-32768);
1138 CONVERT_DEC(VarI2FromDec,2,0,0,3276700); EXPECT(32767);
1140}
HRESULT WINAPI VarI2FromDec(DECIMAL *pdecIn, SHORT *psOut)
Definition: vartype.c:1131

Referenced by START_TEST().

◆ test_VarI2FromI1()

static void test_VarI2FromI1 ( void  )
static

Definition at line 952 of file vartype.c.

953{
954 CONVVARS(signed char);
955 int i;
956
957 CONVERTRANGE(VarI2FromI1, -128, 128);
958}
HRESULT WINAPI VarI2FromI1(signed char cIn, SHORT *psOut)
Definition: vartype.c:1076

Referenced by START_TEST().

◆ test_VarI2FromI4()

static void test_VarI2FromI4 ( void  )
static

Definition at line 960 of file vartype.c.

961{
962 CONVVARS(LONG);
963 int i;
964
966 CONVERTRANGE(VarI2FromI4, -32768, 32768);
968}
HRESULT WINAPI VarI2FromI4(LONG iIn, SHORT *psOut)
Definition: vartype.c:918

Referenced by START_TEST().

◆ test_VarI2FromI8()

static void test_VarI2FromI8 ( void  )
static

Definition at line 970 of file vartype.c.

971{
973
975 CONVERT(VarI2FromI8, -32768); EXPECT(-32768);
976 CONVERT(VarI2FromI8, 32767); EXPECT(32767);
978}
HRESULT WINAPI VarI2FromI8(LONG64 llIn, SHORT *psOut)
Definition: vartype.c:1156

Referenced by START_TEST().

◆ test_VarI2FromR4()

static void test_VarI2FromR4 ( void  )
static

Definition at line 1023 of file vartype.c.

1024{
1025 CONVVARS(FLOAT);
1026
1027 CONVERT(VarI2FromR4, -32769.0f); EXPECT_OVERFLOW;
1028 CONVERT(VarI2FromR4, -32768.51f); EXPECT_OVERFLOW;
1029 CONVERT(VarI2FromR4, -32768.5f); EXPECT(-32768);
1030 CONVERT(VarI2FromR4, -32768.0f); EXPECT(-32768);
1031 CONVERT(VarI2FromR4, -1.0f); EXPECT(-1);
1032 CONVERT(VarI2FromR4, 0.0f); EXPECT(0);
1033 CONVERT(VarI2FromR4, 1.0f); EXPECT(1);
1034 CONVERT(VarI2FromR4, 32767.0f); EXPECT(32767);
1035 CONVERT(VarI2FromR4, 32767.49f); EXPECT(32767);
1038
1039 /* Rounding */
1040 CONVERT(VarI2FromR4, -1.5f); EXPECT(-2);
1041 CONVERT(VarI2FromR4, -0.6f); EXPECT(-1);
1042 CONVERT(VarI2FromR4, -0.5f); EXPECT(0);
1043 CONVERT(VarI2FromR4, -0.4f); EXPECT(0);
1044 CONVERT(VarI2FromR4, 0.4f); EXPECT(0);
1045 CONVERT(VarI2FromR4, 0.5f); EXPECT(0);
1046 CONVERT(VarI2FromR4, 0.6f); EXPECT(1);
1047 CONVERT(VarI2FromR4, 1.5f); EXPECT(2);
1048}
HRESULT WINAPI VarI2FromR4(FLOAT fltIn, SHORT *psOut)
Definition: vartype.c:936

Referenced by START_TEST().

◆ test_VarI2FromR8()

static void test_VarI2FromR8 ( void  )
static

Definition at line 1050 of file vartype.c.

1051{
1053
1055 CONVERT(VarI2FromR8, -32768.51); EXPECT_OVERFLOW;
1056 CONVERT(VarI2FromR8, -32768.5); EXPECT(-32768);
1057 CONVERT(VarI2FromR8, -32768.0); EXPECT(-32768);
1058 CONVERT(VarI2FromR8, -1.0); EXPECT(-1);
1059 CONVERT(VarI2FromR8, 0.0); EXPECT(0);
1060 CONVERT(VarI2FromR8, 1.0); EXPECT(1);
1061 CONVERT(VarI2FromR8, 32767.0); EXPECT(32767);
1062 CONVERT(VarI2FromR8, 32767.49); EXPECT(32767);
1065
1066 /* Rounding */
1067 CONVERT(VarI2FromR8, -1.5); EXPECT(-2);
1068 CONVERT(VarI2FromR8, -0.6); EXPECT(-1);
1069 CONVERT(VarI2FromR8, -0.5); EXPECT(0);
1070 CONVERT(VarI2FromR8, -0.4); EXPECT(0);
1071 CONVERT(VarI2FromR8, 0.4); EXPECT(0);
1072 CONVERT(VarI2FromR8, 0.5); EXPECT(0);
1073 CONVERT(VarI2FromR8, 0.6); EXPECT(1);
1074 CONVERT(VarI2FromR8, 1.5); EXPECT(2);
1075}
HRESULT WINAPI VarI2FromR8(double dblIn, SHORT *psOut)
Definition: vartype.c:957

Referenced by START_TEST().

◆ test_VarI2FromStr()

static void test_VarI2FromStr ( void  )
static

Definition at line 1142 of file vartype.c.

1143{
1144 CONVVARS(LCID);
1145 OLECHAR buff[128];
1146
1148
1150 CONVERT_STR(VarI2FromStr,"0", 0); EXPECT(0);
1152 CONVERT_STR(VarI2FromStr,"-32768", 0); EXPECT(-32768);
1153 CONVERT_STR(VarI2FromStr,"32767", 0); EXPECT(32767);
1155
1156 /* Rounding */
1165}
HRESULT WINAPI VarI2FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, SHORT *psOut)
Definition: vartype.c:1021

Referenced by START_TEST().

◆ test_VarI2FromUI1()

static void test_VarI2FromUI1 ( void  )
static

Definition at line 980 of file vartype.c.

981{
982 CONVVARS(BYTE);
983 int i;
984
985 CONVERTRANGE(VarI2FromUI1, 0, 256);
986}
HRESULT WINAPI VarI2FromUI1(BYTE bIn, SHORT *psOut)
Definition: vartype.c:900

Referenced by START_TEST().

◆ test_VarI2FromUI2()

static void test_VarI2FromUI2 ( void  )
static

Definition at line 988 of file vartype.c.

989{
991 int i;
992
993 CONVERTRANGE(VarI2FromUI2, 0, 32768);
995}
HRESULT WINAPI VarI2FromUI2(USHORT usIn, SHORT *psOut)
Definition: vartype.c:1094

Referenced by START_TEST().

◆ test_VarI2FromUI4()

static void test_VarI2FromUI4 ( void  )
static

Definition at line 997 of file vartype.c.

998{
1000 int i;
1001
1002 CONVERTRANGE(VarI2FromUI4, 0, 32768);
1004}
HRESULT WINAPI VarI2FromUI4(ULONG ulIn, SHORT *psOut)
Definition: vartype.c:1112

Referenced by START_TEST().

◆ test_VarI2FromUI8()

static void test_VarI2FromUI8 ( void  )
static

Definition at line 1006 of file vartype.c.

1007{
1009 int i;
1010
1011 CONVERTRANGE(VarI2FromUI8, 0, 32768);
1013}
HRESULT WINAPI VarI2FromUI8(ULONG64 ullIn, SHORT *psOut)
Definition: vartype.c:1174

Referenced by START_TEST().

◆ test_VarI4ChangeTypeEx()

static void test_VarI4ChangeTypeEx ( void  )
static

Definition at line 1640 of file vartype.c.

1641{
1642 HRESULT hres;
1643 LONG in;
1644 VARIANTARG vSrc, vDst;
1645
1646 in = 1;
1647
1648 INITIAL_TYPETEST(VT_I4, V_I4, "%ld");
1651}

Referenced by START_TEST().

◆ test_VarI4Copy()

static void test_VarI4Copy ( void  )
static

Definition at line 1635 of file vartype.c.

1636{
1637 COPYTEST(1l, VT_I4, V_I4(&vSrc), V_I4(&vDst), V_I4REF(&vSrc), V_I4REF(&vDst), "%ld");
1638}
#define V_I4REF(A)
Definition: oleauto.h:248

Referenced by START_TEST().

◆ test_VarI4FromBool()

static void test_VarI4FromBool ( void  )
static

Definition at line 1491 of file vartype.c.

1492{
1494 int i;
1495
1496 CONVERTRANGE(VarI4FromBool, -32768, 32768);
1497}
HRESULT WINAPI VarI4FromBool(VARIANT_BOOL boolIn, LONG *piOut)
Definition: vartype.c:1649

Referenced by START_TEST().

◆ test_VarI4FromCy()

static void test_VarI4FromCy ( void  )
static

Definition at line 1566 of file vartype.c.

1567{
1568 CONVVARS(CY);
1569
1570 CONVERT_CY(VarI4FromCy,-1); EXPECT(-1);
1573
1574 CONVERT_CY64(VarI4FromCy,-1,2147483647ul); EXPECT_OVERFLOW;
1575 CONVERT_CY64(VarI4FromCy,-1,2147483648ul); EXPECT(-2147483647 - 1);
1576 CONVERT_CY64(VarI4FromCy,0,2147483647ul); EXPECT(2147483647ul);
1577 CONVERT_CY64(VarI4FromCy,0,2147483648ul); EXPECT_OVERFLOW;
1578
1579 CONVERT_CY(VarI4FromCy,-1.5); EXPECT(-2);
1580 CONVERT_CY(VarI4FromCy,-0.6); EXPECT(-1);
1581 CONVERT_CY(VarI4FromCy,-0.5); EXPECT(0);
1582 CONVERT_CY(VarI4FromCy,-0.4); EXPECT(0);
1583 CONVERT_CY(VarI4FromCy,0.4); EXPECT(0);
1584 CONVERT_CY(VarI4FromCy,0.5); EXPECT(0);
1585 CONVERT_CY(VarI4FromCy,0.6); EXPECT(1);
1586 CONVERT_CY(VarI4FromCy,1.5); EXPECT(2);
1587}
HRESULT WINAPI VarI4FromCy(CY cyIn, LONG *piOut)
Definition: vartype.c:1570
#define CONVERT_CY64(func, hi, lo)
Definition: vartype.c:104

Referenced by START_TEST().

◆ test_VarI4FromDate()

static void test_VarI4FromDate ( void  )
static

Definition at line 1544 of file vartype.c.

1545{
1546 CONVVARS(DATE);
1547
1548 CONVERT(VarI4FromDate, -2147483649.0); EXPECT_OVERFLOW;
1549 CONVERT(VarI4FromDate, -2147483648.0); EXPECT(-2147483647 - 1);
1550 CONVERT(VarI4FromDate, -1.0); EXPECT(-1);
1551 CONVERT(VarI4FromDate, 0.0); EXPECT(0);
1552 CONVERT(VarI4FromDate, 1.0); EXPECT(1);
1553 CONVERT(VarI4FromDate, 2147483647.0); EXPECT(2147483647);
1554 CONVERT(VarI4FromDate, 2147483648.0); EXPECT_OVERFLOW;
1555
1556 CONVERT(VarI4FromDate, -1.5); EXPECT(-2);
1557 CONVERT(VarI4FromDate, -0.6); EXPECT(-1);
1558 CONVERT(VarI4FromDate, -0.5); EXPECT(0);
1559 CONVERT(VarI4FromDate, -0.4); EXPECT(0);
1560 CONVERT(VarI4FromDate, 0.4); EXPECT(0);
1561 CONVERT(VarI4FromDate, 0.5); EXPECT(0);
1562 CONVERT(VarI4FromDate, 0.6); EXPECT(1);
1563 CONVERT(VarI4FromDate, 1.5); EXPECT(2);
1564}
HRESULT WINAPI VarI4FromDate(DATE dateIn, LONG *piOut)
Definition: vartype.c:1589

Referenced by START_TEST().

◆ test_VarI4FromDec()

static void test_VarI4FromDec ( void  )
static

Definition at line 1589 of file vartype.c.

1590{
1592
1594
1595 CONVERT_DEC(VarI4FromDec,0,0x80,0,1); EXPECT(-1);
1596 CONVERT_DEC(VarI4FromDec,0,0,0,0); EXPECT(0);
1597 CONVERT_DEC(VarI4FromDec,0,0,0,1); EXPECT(1);
1598
1599 CONVERT_DEC64(VarI4FromDec,0,0x80,0,0,2147483649ul); EXPECT_OVERFLOW;
1600 CONVERT_DEC64(VarI4FromDec,0,0x80,0,0,2147483648ul); EXPECT(-2147483647 - 1);
1601 CONVERT_DEC64(VarI4FromDec,0,0,0,0,2147483647ul); EXPECT(2147483647ul);
1602 CONVERT_DEC64(VarI4FromDec,0,0,0,0,2147483648ul); EXPECT_OVERFLOW;
1603
1604 CONVERT_DEC64(VarI4FromDec,2,0x80,0,50,100); EXPECT_OVERFLOW;
1605 CONVERT_DEC64(VarI4FromDec,2,0x80,0,50,0); EXPECT(-2147483647 - 1);
1606 CONVERT_DEC64(VarI4FromDec,2,0,0,49,4294967196ul); EXPECT(2147483647);
1608}
HRESULT WINAPI VarI4FromDec(DECIMAL *pdecIn, LONG *piOut)
Definition: vartype.c:1720

Referenced by START_TEST().

◆ test_VarI4FromI1()

static void test_VarI4FromI1 ( void  )
static

Definition at line 1425 of file vartype.c.

1426{
1427 CONVVARS(signed char);
1428 int i;
1429
1430 CONVERTRANGE(VarI4FromI1, -128, 128);
1431}
HRESULT WINAPI VarI4FromI1(signed char cIn, LONG *piOut)
Definition: vartype.c:1666

Referenced by START_TEST().

◆ test_VarI4FromI2()

static void test_VarI4FromI2 ( void  )
static

Definition at line 1433 of file vartype.c.

1434{
1435 CONVVARS(SHORT);
1436 int i;
1437
1438 CONVERTRANGE(VarI4FromI2, -32768, 32768);
1439}
HRESULT WINAPI VarI4FromI2(SHORT sIn, LONG *piOut)
Definition: vartype.c:1510

Referenced by START_TEST().

◆ test_VarI4FromI8()

static void test_VarI4FromI8 ( void  )
static

Definition at line 1441 of file vartype.c.

1442{
1444
1445 CONVERT(VarI4FromI8, -1); EXPECT(-1);
1446 CONVERT(VarI4FromI8, 0); EXPECT(0);
1447 CONVERT(VarI4FromI8, 1); EXPECT(1);
1448
1449 CONVERT_I8(VarI4FromI8, -1, 2147483647ul); EXPECT_OVERFLOW;
1450 CONVERT_I8(VarI4FromI8, -1, 2147483648ul); EXPECT(-2147483647 - 1);
1451 CONVERT_I8(VarI4FromI8, 0, 2147483647ul); EXPECT(2147483647);
1452 CONVERT_I8(VarI4FromI8, 0, 2147483648ul); EXPECT_OVERFLOW;
1453}
HRESULT WINAPI VarI4FromI8(LONG64 llIn, LONG *piOut)
Definition: vartype.c:1745

Referenced by START_TEST().

◆ test_VarI4FromR4()

static void test_VarI4FromR4 ( void  )
static

Definition at line 1499 of file vartype.c.

1500{
1501 CONVVARS(FLOAT);
1502
1503 /* min/max values are not exactly representable in a float */
1504 CONVERT(VarI4FromR4, -1.0f); EXPECT(-1);
1505 CONVERT(VarI4FromR4, 0.0f); EXPECT(0);
1506 CONVERT(VarI4FromR4, 1.0f); EXPECT(1);
1507
1508 CONVERT(VarI4FromR4, -1.5f); EXPECT(-2);
1509 CONVERT(VarI4FromR4, -0.6f); EXPECT(-1);
1510 CONVERT(VarI4FromR4, -0.5f); EXPECT(0);
1511 CONVERT(VarI4FromR4, -0.4f); EXPECT(0);
1512 CONVERT(VarI4FromR4, 0.4f); EXPECT(0);
1513 CONVERT(VarI4FromR4, 0.5f); EXPECT(0);
1514 CONVERT(VarI4FromR4, 0.6f); EXPECT(1);
1515 CONVERT(VarI4FromR4, 1.5f); EXPECT(2);
1516}
HRESULT WINAPI VarI4FromR4(FLOAT fltIn, LONG *piOut)
Definition: vartype.c:1528

Referenced by START_TEST().

◆ test_VarI4FromR8()

static void test_VarI4FromR8 ( void  )
static

Definition at line 1518 of file vartype.c.

1519{
1521
1522 CONVERT(VarI4FromR8, -2147483649.0); EXPECT_OVERFLOW;
1523 CONVERT(VarI4FromR8, -2147483648.51); EXPECT_OVERFLOW;
1524 CONVERT(VarI4FromR8, -2147483648.5); EXPECT(-2147483647 - 1);
1525 CONVERT(VarI4FromR8, -2147483648.0); EXPECT(-2147483647 - 1);
1526 CONVERT(VarI4FromR8, -1.0); EXPECT(-1);
1527 CONVERT(VarI4FromR8, 0.0); EXPECT(0);
1528 CONVERT(VarI4FromR8, 1.0); EXPECT(1);
1529 CONVERT(VarI4FromR8, 2147483647.0); EXPECT(2147483647);
1530 CONVERT(VarI4FromR8, 2147483647.49); EXPECT(2147483647);
1531 CONVERT(VarI4FromR8, 2147483647.5); EXPECT_OVERFLOW;
1532 CONVERT(VarI4FromR8, 2147483648.0); EXPECT_OVERFLOW;
1533
1534 CONVERT(VarI4FromR8, -1.5); EXPECT(-2);
1535 CONVERT(VarI4FromR8, -0.6); EXPECT(-1);
1536 CONVERT(VarI4FromR8, -0.5); EXPECT(0);
1537 CONVERT(VarI4FromR8, -0.4); EXPECT(0);
1538 CONVERT(VarI4FromR8, 0.4); EXPECT(0);
1539 CONVERT(VarI4FromR8, 0.5); EXPECT(0);
1540 CONVERT(VarI4FromR8, 0.6); EXPECT(1);
1541 CONVERT(VarI4FromR8, 1.5); EXPECT(2);
1542}
HRESULT WINAPI VarI4FromR8(double dblIn, LONG *piOut)
Definition: vartype.c:1549

Referenced by START_TEST().

◆ test_VarI4FromStr()

static void test_VarI4FromStr ( void  )
static

Definition at line 1610 of file vartype.c.

1611{
1612 CONVVARS(LCID);
1613 OLECHAR buff[128];
1614
1616
1618 CONVERT_STR(VarI4FromStr,"0",0); EXPECT(0);
1619 CONVERT_STR(VarI4FromStr,"-2147483649",0); EXPECT_OVERFLOW;
1620 CONVERT_STR(VarI4FromStr,"-2147483648",0); EXPECT(-2147483647 -1);
1621 CONVERT_STR(VarI4FromStr,"2147483647",0); EXPECT(2147483647);
1622 CONVERT_STR(VarI4FromStr,"2147483648",0); EXPECT_OVERFLOW;
1623
1624 /* Rounding */
1633}
HRESULT WINAPI VarI4FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, LONG *piOut)
Definition: vartype.c:1611

Referenced by START_TEST().

◆ test_VarI4FromUI1()

static void test_VarI4FromUI1 ( void  )
static

Definition at line 1455 of file vartype.c.

1456{
1457 CONVVARS(BYTE);
1458 int i;
1459
1460 CONVERTRANGE(VarI4FromUI1, 0, 256);
1461}
HRESULT WINAPI VarI4FromUI1(BYTE bIn, LONG *piOut)
Definition: vartype.c:1491

Referenced by START_TEST().

◆ test_VarI4FromUI2()

static void test_VarI4FromUI2 ( void  )
static

Definition at line 1463 of file vartype.c.

1464{
1466 int i;
1467
1468 CONVERTRANGE(VarI4FromUI2, 0, 65536);
1469}
HRESULT WINAPI VarI4FromUI2(USHORT usIn, LONG *piOut)
Definition: vartype.c:1683

Referenced by START_TEST().

◆ test_VarI4FromUI4()

static void test_VarI4FromUI4 ( void  )
static

Definition at line 1471 of file vartype.c.

1472{
1473 CONVVARS(ULONG);
1474
1475 CONVERT(VarI4FromUI4, 0); EXPECT(0);
1476 CONVERT(VarI4FromUI4, 1); EXPECT(1);
1477 CONVERT(VarI4FromUI4, 2147483647); EXPECT(2147483647);
1478 CONVERT(VarI4FromUI4, 2147483648ul); EXPECT_OVERFLOW;
1479}
HRESULT WINAPI VarI4FromUI4(ULONG ulIn, LONG *piOut)
Definition: vartype.c:1701

Referenced by START_TEST().

◆ test_VarI4FromUI8()

static void test_VarI4FromUI8 ( void  )
static

Definition at line 1481 of file vartype.c.

1482{
1484
1485 CONVERT(VarI4FromUI8, 0); EXPECT(0);
1486 CONVERT(VarI4FromUI8, 1); EXPECT(1);
1487 CONVERT(VarI4FromUI8, 2147483647); EXPECT(2147483647);
1488 CONVERT(VarI4FromUI8, 2147483648ul); EXPECT_OVERFLOW;
1489}
HRESULT WINAPI VarI4FromUI8(ULONG64 ullIn, LONG *piOut)
Definition: vartype.c:1763

Referenced by START_TEST().

◆ test_VarI8ChangeTypeEx()

static void test_VarI8ChangeTypeEx ( void  )
static

Definition at line 2072 of file vartype.c.

2073{
2074 HRESULT hres;
2075 LONG64 in;
2076 VARIANTARG vSrc, vDst;
2077
2078 if (!has_i8)
2079 {
2080 win_skip("I8 and UI8 data types are not available\n");
2081 return;
2082 }
2083
2084 in = 1;
2085
2088}
#define win_skip
Definition: minitest.h:67
#define INITIAL_TYPETESTI8(vt, val)
Definition: vartype.c:185

Referenced by START_TEST().

◆ test_VarI8Copy()

static void test_VarI8Copy ( void  )
static

Definition at line 2061 of file vartype.c.

2062{
2063 if (!has_i8)
2064 {
2065 win_skip("I8 and UI8 data types are not available\n");
2066 return;
2067 }
2068
2069 COPYTEST(1ll, VT_I8, V_I8(&vSrc), V_I8(&vDst), V_I8REF(&vSrc), V_I8REF(&vDst), "%I64d");
2070}
#define V_I8REF(A)
Definition: oleauto.h:250

Referenced by START_TEST().

◆ test_VarI8FromBool()

static void test_VarI8FromBool ( void  )
static

Definition at line 1985 of file vartype.c.

1986{
1988 int i;
1989
1990 CONVERTRANGE(VarI8FromBool, -32768, 32768);
1991}
HRESULT WINAPI VarI8FromBool(VARIANT_BOOL boolIn, LONG64 *pi64Out)
Definition: vartype.c:2265

Referenced by START_TEST().

◆ test_VarI8FromCy()

static void test_VarI8FromCy ( void  )
static

Definition at line 2003 of file vartype.c.

2004{
2005 CONVVARS(CY);
2006
2007 CONVERT_CY(VarI8FromCy,-128); EXPECT(-129);
2008 CONVERT_CY(VarI8FromCy,-1); EXPECT(-2);
2011 CONVERT_CY(VarI8FromCy,127); EXPECT(127);
2012
2013 CONVERT_CY(VarI8FromCy,-1.5); EXPECT(-2);
2014 CONVERT_CY(VarI8FromCy,-0.6); EXPECT(-1);
2015 CONVERT_CY(VarI8FromCy,-0.5); EXPECT(-1);
2016 CONVERT_CY(VarI8FromCy,-0.4); EXPECT(-1);
2017 CONVERT_CY(VarI8FromCy,0.4); EXPECT(0);
2018 CONVERT_CY(VarI8FromCy,0.5); EXPECT(0);
2019 CONVERT_CY(VarI8FromCy,0.6); EXPECT(1);
2020 CONVERT_CY(VarI8FromCy,1.5); EXPECT(2);
2021}
HRESULT WINAPI VarI8FromCy(CY cyIn, LONG64 *pi64Out)
Definition: vartype.c:2174

Referenced by START_TEST().

◆ test_VarI8FromDate()

static void test_VarI8FromDate ( void  )
static

Definition at line 1965 of file vartype.c.

1966{
1967 CONVVARS(DATE);
1968
1969 CONVERT(VarI8FromDate, -128.0); EXPECT(-128);
1970 CONVERT(VarI8FromDate, -1.0); EXPECT(-1);
1971 CONVERT(VarI8FromDate, 0.0); EXPECT(0);
1972 CONVERT(VarI8FromDate, 1.0); EXPECT(1);
1973 CONVERT(VarI8FromDate, 127.0); EXPECT(127);
1974
1975 CONVERT(VarI8FromDate, -1.5); EXPECT(-2);
1976 CONVERT(VarI8FromDate, -0.6); EXPECT(-1);
1977 CONVERT(VarI8FromDate, -0.5); EXPECT(0);
1978 CONVERT(VarI8FromDate, -0.4); EXPECT(0);
1979 CONVERT(VarI8FromDate, 0.4); EXPECT(0);
1980 CONVERT(VarI8FromDate, 0.5); EXPECT(0);
1981 CONVERT(VarI8FromDate, 0.6); EXPECT(1);
1982 CONVERT(VarI8FromDate, 1.5); EXPECT(2);
1983}
HRESULT WINAPI VarI8FromDate(DATE dateIn, LONG64 *pi64Out)
Definition: vartype.c:2205

Referenced by START_TEST().

◆ test_VarI8FromDec()

static void test_VarI8FromDec ( void  )
static

Definition at line 2023 of file vartype.c.

2024{
2026
2028
2029 CONVERT_DEC(VarI8FromDec,0,0x80,0,128); EXPECT(-128);
2030 CONVERT_DEC(VarI8FromDec,0,0x80,0,1); EXPECT(-1);
2031 CONVERT_DEC(VarI8FromDec,0,0,0,0); EXPECT(0);
2032 CONVERT_DEC(VarI8FromDec,0,0,0,1); EXPECT(1);
2033 CONVERT_DEC(VarI8FromDec,0,0,0,127); EXPECT(127);
2034
2035 CONVERT_DEC(VarI8FromDec,2,0x80,0,12700); EXPECT(-127);
2036 CONVERT_DEC(VarI8FromDec,2,0,0,12700); EXPECT(127);
2037}
HRESULT WINAPI VarI8FromDec(DECIMAL *pdecIn, LONG64 *pi64Out)
Definition: vartype.c:2335

Referenced by START_TEST().

◆ test_VarI8FromI1()

static void test_VarI8FromI1 ( void  )
static

Definition at line 1884 of file vartype.c.

1885{
1886 CONVVARS(signed char);
1887 int i;
1888
1889 CONVERTRANGE(VarI8FromI1, -128, 128);
1890}
HRESULT WINAPI VarI8FromI1(signed char cIn, LONG64 *pi64Out)
Definition: vartype.c:2282

Referenced by START_TEST().

◆ test_VarI8FromI2()

static void test_VarI8FromI2 ( void  )
static

Definition at line 1900 of file vartype.c.

1901{
1902 CONVVARS(SHORT);
1903 int i;
1904
1905 CONVERTRANGE(VarI8FromI2, -32768, 32768);
1906}
HRESULT WINAPI VarI8FromI2(SHORT sIn, LONG64 *pi64Out)
Definition: vartype.c:2093

Referenced by START_TEST().

◆ test_VarI8FromR4()

static void test_VarI8FromR4 ( void  )
static

Definition at line 1925 of file vartype.c.

1926{
1927 CONVVARS(FLOAT);
1928
1929 CONVERT(VarI8FromR4, -128.0f); EXPECT(-128);
1930 CONVERT(VarI8FromR4, -1.0f); EXPECT(-1);
1931 CONVERT(VarI8FromR4, 0.0f); EXPECT(0);
1932 CONVERT(VarI8FromR4, 1.0f); EXPECT(1);
1933 CONVERT(VarI8FromR4, 127.0f); EXPECT(127);
1934
1935 CONVERT(VarI8FromR4, -1.5f); EXPECT(-2);
1936 CONVERT(VarI8FromR4, -0.6f); EXPECT(-1);
1937 CONVERT(VarI8FromR4, -0.5f); EXPECT(0);
1938 CONVERT(VarI8FromR4, -0.4f); EXPECT(0);
1939 CONVERT(VarI8FromR4, 0.4f); EXPECT(0);
1940 CONVERT(VarI8FromR4, 0.5f); EXPECT(0);
1941 CONVERT(VarI8FromR4, 0.6f); EXPECT(1);
1942 CONVERT(VarI8FromR4, 1.5f); EXPECT(2);
1943}
HRESULT WINAPI VarI8FromR4(FLOAT fltIn, LONG64 *pi64Out)
Definition: vartype.c:2112

Referenced by START_TEST().

◆ test_VarI8FromR8()

static void test_VarI8FromR8 ( void  )
static

Definition at line 1945 of file vartype.c.

1946{
1948
1949 CONVERT(VarI8FromR8, -128.0); EXPECT(-128);
1950 CONVERT(VarI8FromR8, -1.0); EXPECT(-1);
1951 CONVERT(VarI8FromR8, 0.0); EXPECT(0);
1952 CONVERT(VarI8FromR8, 1.0); EXPECT(1);
1953 CONVERT(VarI8FromR8, 127.0); EXPECT(127);
1954
1955 CONVERT(VarI8FromR8, -1.5); EXPECT(-2);
1956 CONVERT(VarI8FromR8, -0.6); EXPECT(-1);
1957 CONVERT(VarI8FromR8, -0.5); EXPECT(0);
1958 CONVERT(VarI8FromR8, -0.4); EXPECT(0);
1959 CONVERT(VarI8FromR8, 0.4); EXPECT(0);
1960 CONVERT(VarI8FromR8, 0.5); EXPECT(0);
1961 CONVERT(VarI8FromR8, 0.6); EXPECT(1);
1962 CONVERT(VarI8FromR8, 1.5); EXPECT(2);
1963}
HRESULT WINAPI VarI8FromR8(double dblIn, LONG64 *pi64Out)
Definition: vartype.c:2148

Referenced by START_TEST().

◆ test_VarI8FromStr()

static void test_VarI8FromStr ( void  )
static

Definition at line 2039 of file vartype.c.

2040{
2041 CONVVARS(LCID);
2042 OLECHAR buff[128];
2043
2045
2047 CONVERT_STR(VarI8FromStr,"0",0); EXPECT(0);
2048 CONVERT_STR(VarI8FromStr,"-1",0); EXPECT(-1);
2049 CONVERT_STR(VarI8FromStr,"2147483647",0); EXPECT(2147483647);
2050
2059}
HRESULT WINAPI VarI8FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, LONG64 *pi64Out)
Definition: vartype.c:2227

Referenced by START_TEST().

◆ test_VarI8FromUI1()

static void test_VarI8FromUI1 ( void  )
static

Definition at line 1892 of file vartype.c.

1893{
1894 CONVVARS(BYTE);
1895 int i;
1896
1897 CONVERTRANGE(VarI8FromUI1, 0, 256);
1898}
HRESULT WINAPI VarI8FromUI1(BYTE bIn, LONG64 *pi64Out)
Definition: vartype.c:2075

Referenced by START_TEST().

◆ test_VarI8FromUI2()

static void test_VarI8FromUI2 ( void  )
static

Definition at line 1908 of file vartype.c.

1909{
1911 int i;
1912
1913 CONVERTRANGE(VarI8FromUI2, -0, 65535);
1914}
HRESULT WINAPI VarI8FromUI2(USHORT usIn, LONG64 *pi64Out)
Definition: vartype.c:2299

Referenced by START_TEST().

◆ test_VarI8FromUI4()

static void test_VarI8FromUI4 ( void  )
static

Definition at line 1916 of file vartype.c.

1917{
1918 CONVVARS(ULONG);
1919
1920 CONVERT(VarI8FromUI4, 0); EXPECT(0);
1921 CONVERT(VarI8FromUI4, 1); EXPECT(1);
1922 CONVERT(VarI8FromUI4, 4294967295ul); EXPECT(4294967295ul);
1923}
HRESULT WINAPI VarI8FromUI4(ULONG ulIn, LONG64 *pi64Out)
Definition: vartype.c:2316

Referenced by START_TEST().

◆ test_VarI8FromUI8()

static void test_VarI8FromUI8 ( void  )
static

Definition at line 1993 of file vartype.c.

1994{
1996
1997 CONVERT(VarI8FromUI8, 0); EXPECT(0);
1998 CONVERT(VarI8FromUI8, 1); EXPECT(1);
1999 CONVERT(VarI8FromUI8, 0x7fffffffffffffffll); EXPECT(0x7fffffffffffffffull);
2000 CONVERT(VarI8FromUI8, 0x8000000000000000ll); EXPECT_OVERFLOW;
2001}
HRESULT WINAPI VarI8FromUI8(ULONG64 ullIn, LONG64 *pi64Out)
Definition: vartype.c:2378

Referenced by START_TEST().

◆ test_VarR4ChangeTypeEx()

static void test_VarR4ChangeTypeEx ( void  )
static

Definition at line 2480 of file vartype.c.

2481{
2482#ifdef HAS_UINT64_TO_FLOAT
2483 HRESULT hres;
2484 float in;
2485 VARIANTARG vSrc, vDst;
2486
2487 in = 1.0f;
2488
2489 INITIAL_TYPETEST(VT_R4, V_R4, "%f");
2491#endif
2492}

Referenced by START_TEST().

◆ test_VarR4Copy()

static void test_VarR4Copy ( void  )
static

Definition at line 2475 of file vartype.c.

2476{
2477 COPYTEST(77665544.0f, VT_R4, V_R4(&vSrc), V_R4(&vDst), V_R4REF(&vSrc),V_R4REF(&vDst), "%15.15f");
2478}
#define V_R4REF(A)
Definition: oleauto.h:261

Referenced by START_TEST().

◆ test_VarR4FromBool()

static void test_VarR4FromBool ( void  )
static

Definition at line 2380 of file vartype.c.

2381{
2383
2384 CONVERT(VarR4FromBool, VARIANT_TRUE); EXPECT(VARIANT_TRUE * 1.0f);
2385 CONVERT(VarR4FromBool, VARIANT_FALSE); EXPECT(VARIANT_FALSE * 1.0f);
2386}
HRESULT WINAPI VarR4FromBool(VARIANT_BOOL boolIn, float *pFltOut)
Definition: vartype.c:2868

Referenced by START_TEST().

◆ test_VarR4FromCy()

static void test_VarR4FromCy ( void  )
static

Definition at line 2388 of file vartype.c.

2389{
2390 CONVVARS(CY);
2391
2392 CONVERT_CY(VarR4FromCy,-32768); EXPECT(-32768.0f);
2393 CONVERT_CY(VarR4FromCy,-1); EXPECT(-1.0f);
2394 CONVERT_CY(VarR4FromCy,0); EXPECT(0.0f);
2395 CONVERT_CY(VarR4FromCy,1); EXPECT(1.0f);
2396 CONVERT_CY(VarR4FromCy,32768); EXPECT(32768.0f);
2397
2398 CONVERT_CY(VarR4FromCy,-1.5); EXPECT(-1.5f);
2399 CONVERT_CY(VarR4FromCy,-0.6); EXPECT(-0.6f);
2400 CONVERT_CY(VarR4FromCy,-0.5); EXPECT(-0.5f);
2401 CONVERT_CY(VarR4FromCy,-0.4); EXPECT(-0.4f);
2402 CONVERT_CY(VarR4FromCy,0.4); EXPECT(0.4f);
2403 CONVERT_CY(VarR4FromCy,0.5); EXPECT(0.5f);
2404 CONVERT_CY(VarR4FromCy,0.6); EXPECT(0.6f);
2405 CONVERT_CY(VarR4FromCy,1.5); EXPECT(1.5f);
2406}
HRESULT WINAPI VarR4FromCy(CY cyIn, float *pFltOut)
Definition: vartype.c:2790

Referenced by START_TEST().

◆ test_VarR4FromDate()

static void test_VarR4FromDate ( void  )
static

Definition at line 2444 of file vartype.c.

2445{
2446 CONVVARS(DATE);
2447
2448 CONVERT(VarR4FromDate, -1.0); EXPECT(-1.0f);
2449 CONVERT(VarR4FromDate, 0.0); EXPECT(0.0f);
2450 CONVERT(VarR4FromDate, 1.0); EXPECT(1.0f);
2451}
HRESULT WINAPI VarR4FromDate(DATE dateIn, float *pFltOut)
Definition: vartype.c:2809

Referenced by START_TEST().

◆ test_VarR4FromDec()

static void test_VarR4FromDec ( void  )
static

Definition at line 2425 of file vartype.c.

2426{
2428
2430
2431 CONVERT_DEC(VarR4FromDec,0,0x80,0,32768); EXPECT(-32768.0f);
2432 CONVERT_DEC(VarR4FromDec,0,0x80,0,1); EXPECT(-1.0f);
2433 CONVERT_DEC(VarR4FromDec,0,0,0,0); EXPECT(0.0f);
2434 CONVERT_DEC(VarR4FromDec,0,0,0,1); EXPECT(1.0f);
2435 CONVERT_DEC(VarR4FromDec,0,0,0,32767); EXPECT(32767.0f);
2436
2437 CONVERT_DEC(VarR4FromDec,2,0x80,0,3276800); EXPECT(-32768.0f);
2438 CONVERT_DEC(VarR4FromDec,2,0,0,3276700); EXPECT(32767.0f);
2439 CONVERT_DEC(VarR4FromDec,10,0,0,3276700); EXPECT(0.00032767f);
2440
2441 CONVERT_DEC(VarR4FromDec,0,0,1,0); EXPECT(18446744073709551616.0f);
2442}
HRESULT WINAPI VarR4FromDec(DECIMAL *pDecIn, float *pFltOut)
Definition: vartype.c:2946

Referenced by START_TEST().

◆ test_VarR4FromI1()

static void test_VarR4FromI1 ( void  )
static

Definition at line 2314 of file vartype.c.

2315{
2316 CONVVARS(signed char);
2317 int i;
2318
2319 CONVERTRANGE(VarR4FromI1, -128, 128);
2320}
HRESULT WINAPI VarR4FromI1(signed char cIn, float *pFltOut)
Definition: vartype.c:2888

Referenced by START_TEST().

◆ test_VarR4FromI2()

static void test_VarR4FromI2 ( void  )
static

Definition at line 2330 of file vartype.c.

2331{
2332 CONVVARS(SHORT);
2333 int i;
2334
2335 CONVERTRANGE(VarR4FromI2, -32768, 32768);
2336}
HRESULT WINAPI VarR4FromI2(SHORT sIn, float *pFltOut)
Definition: vartype.c:2735

Referenced by START_TEST().

◆ test_VarR4FromI4()

static void test_VarR4FromI4 ( void  )
static

Definition at line 2346 of file vartype.c.

2347{
2348 CONVVARS(int);
2349
2350 CONVERT(VarR4FromI4, -2147483647-1); EXPECT(-2147483648.0f);
2351 CONVERT(VarR4FromI4, -1); EXPECT(-1.0f);
2352 CONVERT(VarR4FromI4, 0); EXPECT(0.0f);
2353 CONVERT(VarR4FromI4, 1); EXPECT(1.0f);
2354 CONVERT(VarR4FromI4, 2147483647); EXPECT(2147483647.0f);
2355}
HRESULT WINAPI VarR4FromI4(LONG lIn, float *pFltOut)
Definition: vartype.c:2752

Referenced by START_TEST().

◆ test_VarR4FromI8()

static void test_VarR4FromI8 ( void  )
static

Definition at line 2408 of file vartype.c.

2409{
2411
2412 CONVERT(VarR4FromI8, -1); EXPECT(-1.0f);
2413 CONVERT(VarR4FromI8, 0); EXPECT(0.0f);
2414 CONVERT(VarR4FromI8, 1); EXPECT(1.0f);
2415}
HRESULT WINAPI VarR4FromI8(LONG64 llIn, float *pFltOut)
Definition: vartype.c:2986

Referenced by START_TEST().

◆ test_VarR4FromR8()

static void test_VarR4FromR8 ( void  )
static

Definition at line 2368 of file vartype.c.

2369{
2370 CONVVARS(FLOAT);
2371
2372 CONVERT(VarR4FromR8, -1.0); EXPECT(-1.0f);
2373 CONVERT(VarR4FromR8, 0.0); EXPECT(0.0f);
2374 CONVERT(VarR4FromR8, 1.0); EXPECT(1.0f);
2375 CONVERT(VarR4FromR8, 1.5); EXPECT(1.5f);
2376
2377 /* Skip rounding tests - no rounding is done */
2378}
HRESULT WINAPI VarR4FromR8(double dblIn, float *pFltOut)
Definition: vartype.c:2770

Referenced by START_TEST().

◆ test_VarR4FromStr()

static void test_VarR4FromStr ( void  )
static

Definition at line 2453 of file vartype.c.

2454{
2455 CONVVARS(LCID);
2456 OLECHAR buff[128];
2457
2459
2461 CONVERT_STR(VarR4FromStr,"-1", 0); EXPECT(-1.0f);
2462 CONVERT_STR(VarR4FromStr,"0", 0); EXPECT(0.0f);
2463 CONVERT_STR(VarR4FromStr,"1", 0); EXPECT(1.0f);
2464
2473}
HRESULT WINAPI VarR4FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, float *pFltOut)
Definition: vartype.c:2830

Referenced by START_TEST().

◆ test_VarR4FromUI1()

static void test_VarR4FromUI1 ( void  )
static

Definition at line 2322 of file vartype.c.

2323{
2324 CONVVARS(BYTE);
2325 int i;
2326
2327 CONVERTRANGE(VarR4FromUI1, 0, 256);
2328}
HRESULT WINAPI VarR4FromUI1(BYTE bIn, float *pFltOut)
Definition: vartype.c:2718

Referenced by START_TEST().

◆ test_VarR4FromUI2()

static void test_VarR4FromUI2 ( void  )
static

Definition at line 2338 of file vartype.c.

2339{
2341 int i;
2342
2343 CONVERTRANGE(VarR4FromUI2, 0, 65536);
2344}
HRESULT WINAPI VarR4FromUI2(USHORT usIn, float *pFltOut)
Definition: vartype.c:2908

Referenced by START_TEST().

◆ test_VarR4FromUI4()

static void test_VarR4FromUI4 ( void  )
static

Definition at line 2357 of file vartype.c.

2358{
2359 CONVVARS(unsigned int);
2360
2361 CONVERT(VarR4FromUI4, 0); EXPECT(0.0f);
2362 CONVERT(VarR4FromUI4, 1); EXPECT(1.0f);
2363#if defined(__i386__) && (defined(_MSC_VER) || defined(__GNUC__))
2364 CONVERT(VarR4FromUI4, 0xffffffff); EXPECT(4294967296.0f);
2365#endif
2366}
HRESULT WINAPI VarR4FromUI4(ULONG ulIn, float *pFltOut)
Definition: vartype.c:2928

Referenced by START_TEST().

◆ test_VarR4FromUI8()

static void test_VarR4FromUI8 ( void  )
static

Definition at line 2417 of file vartype.c.

2418{
2420
2421 CONVERT(VarR4FromUI8, 0); EXPECT(0.0f);
2422 CONVERT(VarR4FromUI8, 1); EXPECT(1.0f);
2423}
HRESULT WINAPI VarR4FromUI8(ULONG64 ullIn, float *pFltOut)
Definition: vartype.c:3003

Referenced by START_TEST().

◆ test_VarR8ChangeTypeEx()

static void test_VarR8ChangeTypeEx ( void  )
static

Definition at line 2675 of file vartype.c.

2676{
2677#ifdef HAS_UINT64_TO_FLOAT
2678 HRESULT hres;
2679 double in;
2680 VARIANTARG vSrc, vDst;
2681
2682 in = 1.0;
2683
2684 INITIAL_TYPETEST(VT_R8, V_R8, "%g");
2686#endif
2687}

Referenced by START_TEST().

◆ test_VarR8Copy()

static void test_VarR8Copy ( void  )
static

Definition at line 2670 of file vartype.c.

2671{
2672 COPYTEST(77665544.0, VT_R8, V_R8(&vSrc), V_R8(&vDst), V_R8REF(&vSrc),V_R8REF(&vDst), "%16.16g");
2673}
#define V_R8REF(A)
Definition: oleauto.h:263

Referenced by START_TEST().

◆ test_VarR8FromBool()

static void test_VarR8FromBool ( void  )
static

Definition at line 2565 of file vartype.c.

2566{
2568
2569 CONVERT(VarR8FromBool, VARIANT_TRUE); EXPECT(VARIANT_TRUE * 1.0);
2570 CONVERT(VarR8FromBool, VARIANT_FALSE); EXPECT(VARIANT_FALSE * 1.0);
2571}
HRESULT WINAPI VarR8FromBool(VARIANT_BOOL boolIn, double *pDblOut)
Definition: vartype.c:3189

Referenced by START_TEST().

◆ test_VarR8FromCy()

static void test_VarR8FromCy ( void  )
static

Definition at line 2573 of file vartype.c.

2574{
2575 CONVVARS(CY);
2576
2577 CONVERT_CY(VarR8FromCy,-32769); EXPECT(-32769.0);
2578 CONVERT_CY(VarR8FromCy,-32768); EXPECT(-32768.0);
2579 CONVERT_CY(VarR8FromCy,-1); EXPECT(-1.0);
2580 CONVERT_CY(VarR8FromCy,0); EXPECT(0.0);
2581 CONVERT_CY(VarR8FromCy,1); EXPECT(1.0);
2582 CONVERT_CY(VarR8FromCy,32767); EXPECT(32767.0);
2583 CONVERT_CY(VarR8FromCy,32768); EXPECT(32768.0);
2584
2585 CONVERT_CY(VarR8FromCy,-1.5); EXPECT(-1.5);
2586 CONVERT_CY(VarR8FromCy,-0.6); EXPECT(-0.6);
2587 CONVERT_CY(VarR8FromCy,-0.5); EXPECT(-0.5);
2588 CONVERT_CY(VarR8FromCy,-0.4); EXPECT(-0.4);
2589 CONVERT_CY(VarR8FromCy,0.4); EXPECT(0.4);
2590 CONVERT_CY(VarR8FromCy,0.5); EXPECT(0.5);
2591 CONVERT_CY(VarR8FromCy,0.6); EXPECT(0.6);
2592 CONVERT_CY(VarR8FromCy,1.5); EXPECT(1.5);
2593}
HRESULT WINAPI VarR8FromCy(CY cyIn, double *pDblOut)
Definition: vartype.c:3113

Referenced by START_TEST().

◆ test_VarR8FromDate()

static void test_VarR8FromDate ( void  )
static

Definition at line 2636 of file vartype.c.

2637{
2638 CONVVARS(DATE);
2639
2640 CONVERT(VarR8FromDate, -1.0); EXPECT(-1.0);
2641 CONVERT(VarR8FromDate, -0.0); EXPECT(0.0);
2642 CONVERT(VarR8FromDate, 1.0); EXPECT(1.0);
2643}
HRESULT WINAPI VarR8FromDate(DATE dateIn, double *pDblOut)
Definition: vartype.c:3130

Referenced by START_TEST().

◆ test_VarR8FromDec()

static void test_VarR8FromDec ( void  )
static

Definition at line 2618 of file vartype.c.

2619{
2621
2623
2624 CONVERT_DEC(VarR8FromDec,0,0x80,0,32768); EXPECT(-32768.0);
2625 CONVERT_DEC(VarR8FromDec,0,0x80,0,1); EXPECT(-1.0);
2626 CONVERT_DEC(VarR8FromDec,0,0,0,0); EXPECT(0.0);
2627 CONVERT_DEC(VarR8FromDec,0,0,0,1); EXPECT(1.0);
2628 CONVERT_DEC(VarR8FromDec,0,0,0,32767); EXPECT(32767.0);
2629
2630 CONVERT_DEC(VarR8FromDec,2,0x80,0,3276800); EXPECT(-32768.0);
2631 CONVERT_DEC(VarR8FromDec,2,0,0,3276700); EXPECT(32767.0);
2632
2633 CONVERT_DEC(VarR8FromDec,0,0,1,0); EXPECT(18446744073709551616.0);
2634}
HRESULT WINAPI VarR8FromDec(const DECIMAL *pDecIn, double *pDblOut)
Definition: vartype.c:3267

Referenced by START_TEST().

◆ test_VarR8FromI1()

static void test_VarR8FromI1 ( void  )
static

Definition at line 2501 of file vartype.c.

2502{
2503 CONVVARS(signed char);
2504 int i;
2505
2506 CONVERTRANGE(VarR8FromI1, -128, 128);
2507}
HRESULT WINAPI VarR8FromI1(signed char cIn, double *pDblOut)
Definition: vartype.c:3209

Referenced by START_TEST().

◆ test_VarR8FromI2()

static void test_VarR8FromI2 ( void  )
static

Definition at line 2517 of file vartype.c.

2518{
2519 CONVVARS(SHORT);
2520 int i;
2521
2522 CONVERTRANGE(VarR8FromI2, -32768, 32768);
2523}
HRESULT WINAPI VarR8FromI2(SHORT sIn, double *pDblOut)
Definition: vartype.c:3062

Referenced by START_TEST().

◆ test_VarR8FromI4()

static void test_VarR8FromI4 ( void  )
static

Definition at line 2533 of file vartype.c.

2534{
2535 CONVVARS(int);
2536
2537 CONVERT(VarR8FromI4, -2147483647-1); EXPECT(-2147483648.0);
2538 CONVERT(VarR8FromI4, -1); EXPECT(-1.0);
2539 CONVERT(VarR8FromI4, 0); EXPECT(0.0);
2540 CONVERT(VarR8FromI4, 1); EXPECT(1.0);
2541 CONVERT(VarR8FromI4, 0x7fffffff); EXPECT(2147483647.0);
2542}
HRESULT WINAPI VarR8FromI4(LONG lIn, double *pDblOut)
Definition: vartype.c:3079

Referenced by START_TEST().

◆ test_VarR8FromI8()

static void test_VarR8FromI8 ( void  )
static

Definition at line 2595 of file vartype.c.

2596{
2598
2599 CONVERT(VarR8FromI8, -1); EXPECT(-1.0);
2600 CONVERT(VarR8FromI8, 0); EXPECT(0.0);
2601 CONVERT(VarR8FromI8, 1); EXPECT(1.0);
2602#if defined(__i386__) && (defined(_MSC_VER) || defined(__GNUC__))
2603 CONVERT_I8(VarR8FromI8, 0x7fffffff,0xffffffff); EXPECT(9223372036854775808.0);
2604#endif
2605}
HRESULT WINAPI VarR8FromI8(LONG64 llIn, double *pDblOut)
Definition: vartype.c:3306

Referenced by START_TEST().

◆ test_VarR8FromR4()

static void test_VarR8FromR4 ( void  )
static

Definition at line 2553 of file vartype.c.

2554{
2555 CONVVARS(FLOAT);
2556
2557 CONVERT(VarR8FromR4, -1.0f); EXPECT(-1.0);
2558 CONVERT(VarR8FromR4, 0.0f); EXPECT(0.0);
2559 CONVERT(VarR8FromR4, 1.0f); EXPECT(1.0);
2560 CONVERT(VarR8FromR4, 1.5f); EXPECT(1.5);
2561
2562 /* Skip rounding tests - no rounding is done */
2563}
HRESULT WINAPI VarR8FromR4(FLOAT fltIn, double *pDblOut)
Definition: vartype.c:3096

Referenced by START_TEST().

◆ test_VarR8FromStr()

static void test_VarR8FromStr ( void  )
static

Definition at line 2645 of file vartype.c.

2646{
2647 CONVVARS(LCID);
2648 OLECHAR buff[128];
2649
2651
2655
2666
2667 /* We already have exhaustive tests for number parsing, so skip those tests here */
2668}
HRESULT WINAPI VarR8FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, double *pDblOut)
Definition: vartype.c:3151

Referenced by START_TEST().

◆ test_VarR8FromUI1()

static void test_VarR8FromUI1 ( void  )
static

Definition at line 2509 of file vartype.c.

2510{
2511 CONVVARS(BYTE);
2512 int i;
2513
2514 CONVERTRANGE(VarR8FromUI1, 0, 256);
2515}
HRESULT WINAPI VarR8FromUI1(BYTE bIn, double *pDblOut)
Definition: vartype.c:3045

Referenced by START_TEST().

◆ test_VarR8FromUI2()

static void test_VarR8FromUI2 ( void  )
static

Definition at line 2525 of file vartype.c.

2526{
2528 int i;
2529
2530 CONVERTRANGE(VarR8FromUI2, 0, 65536);
2531}
HRESULT WINAPI VarR8FromUI2(USHORT usIn, double *pDblOut)
Definition: vartype.c:3229

Referenced by START_TEST().

◆ test_VarR8FromUI4()

static void test_VarR8FromUI4 ( void  )
static

Definition at line 2544 of file vartype.c.

2545{
2546 CONVVARS(unsigned int);
2547
2548 CONVERT(VarR8FromUI4, 0); EXPECT(0.0);
2549 CONVERT(VarR8FromUI4, 1); EXPECT(1.0);
2550 CONVERT(VarR8FromUI4, 0xffffffff); EXPECT(4294967295.0);
2551}
HRESULT WINAPI VarR8FromUI4(ULONG ulIn, double *pDblOut)
Definition: vartype.c:3249

Referenced by START_TEST().

◆ test_VarR8FromUI8()

static void test_VarR8FromUI8 ( void  )
static

Definition at line 2607 of file vartype.c.

2608{
2610
2611 CONVERT(VarR8FromUI8, 0); EXPECT(0.0);
2612 CONVERT(VarR8FromUI8, 1); EXPECT(1.0);
2613#if defined(__i386__) && (defined(_MSC_VER) || defined(__GNUC__))
2614 CONVERT_I8(VarR8FromUI8, 0x80000000,0); EXPECT(9223372036854775808.0);
2615#endif
2616}
HRESULT WINAPI VarR8FromUI8(ULONG64 ullIn, double *pDblOut)
Definition: vartype.c:3323

Referenced by START_TEST().

◆ test_VarR8Round()

static void test_VarR8Round ( void  )
static

Definition at line 2691 of file vartype.c.

2692{
2693 HRESULT hres;
2694 double left = 0.0, out;
2695 int right;
2696
2697 MATHRND(0.5432, 5); EXPECT(0.5432);
2698 MATHRND(0.5432, 4); EXPECT(0.5432);
2699 MATHRND(0.5432, 3); EXPECT(0.543);
2700 MATHRND(0.5432, 2); EXPECT(0.54);
2701 MATHRND(0.5432, 1); EXPECT(0.5);
2702 MATHRND(0.5532, 0); EXPECT(1);
2703 MATHRND(0.5532, -1); EXPECT_INVALID;
2704
2705 MATHRND(0.5568, 5); EXPECT(0.5568);
2706 MATHRND(0.5568, 4); EXPECT(0.5568);
2707 MATHRND(0.5568, 3); EXPECT(0.557);
2708 MATHRND(0.5568, 2); EXPECT(0.56);
2709 MATHRND(0.5568, 1); EXPECT(0.6);
2710 MATHRND(0.5568, 0); EXPECT(1);
2711 MATHRND(0.5568, -1); EXPECT_INVALID;
2712
2713 MATHRND(0.4999, 0); EXPECT(0);
2714 MATHRND(0.5000, 0); EXPECT(0);
2715 MATHRND(0.5001, 0); EXPECT(1);
2716 MATHRND(1.4999, 0); EXPECT(1);
2717 MATHRND(1.5000, 0); EXPECT(2);
2718 MATHRND(1.5001, 0); EXPECT(2);
2719
2720 MATHRND(-0.4999, 0); EXPECT(0);
2721 MATHRND(-0.5000, 0); EXPECT(0);
2722 MATHRND(-0.5001, 0); EXPECT(-1);
2723 MATHRND(-1.4999, 0); EXPECT(-1);
2724 MATHRND(-1.5000, 0); EXPECT(-2);
2725 MATHRND(-1.5001, 0); EXPECT(-2);
2726}

Referenced by START_TEST().

◆ test_VarUI1ChangeTypeEx()

static void test_VarUI1ChangeTypeEx ( void  )
static

Definition at line 930 of file vartype.c.

931{
933 BYTE in;
934 VARIANTARG vSrc, vDst;
935
936 in = 1;
937
941}

Referenced by START_TEST().

◆ test_VarUI1Copy()

static void test_VarUI1Copy ( void  )
static

Definition at line 925 of file vartype.c.

926{
927 COPYTEST(1, VT_UI1, V_UI1(&vSrc), V_UI1(&vDst), V_UI1REF(&vSrc), V_UI1REF(&vDst), "%d");
928}
#define V_UI1REF(A)
Definition: oleauto.h:267

Referenced by START_TEST().

◆ test_VarUI1FromBool()

static void test_VarUI1FromBool ( void  )
static

Definition at line 722 of file vartype.c.

723{
725 int i;
726
727 /* Note that conversions from bool overflow! */
728 CONVERT(VarUI1FromBool, -1); EXPECT(255);
730 CONVERT(VarUI1FromBool, 256); EXPECT(0);
731}
HRESULT WINAPI VarUI1FromBool(VARIANT_BOOL boolIn, BYTE *pbOut)
Definition: vartype.c:758

Referenced by START_TEST().

◆ test_VarUI1FromCy()

static void test_VarUI1FromCy ( void  )
static

Definition at line 804 of file vartype.c.

805{
806 CONVVARS(CY);
807
811 CONVERT_CY(VarUI1FromCy,255); EXPECT(255);
813
814 /* Rounding */
823}
HRESULT WINAPI VarUI1FromCy(CY cyIn, BYTE *pbOut)
Definition: vartype.c:676

Referenced by START_TEST().

◆ test_VarUI1FromDate()

static void test_VarUI1FromDate ( void  )
static

Definition at line 783 of file vartype.c.

784{
785 CONVVARS(DATE);
786
788 CONVERT(VarUI1FromDate, 0.0); EXPECT(0);
789 CONVERT(VarUI1FromDate, 1.0); EXPECT(1);
790 CONVERT(VarUI1FromDate, 255.0); EXPECT(255);
792
793 /* Rounding */
796 CONVERT(VarUI1FromDate, -0.5); EXPECT(0);
797 CONVERT(VarUI1FromDate, -0.4); EXPECT(0);
798 CONVERT(VarUI1FromDate, 0.4); EXPECT(0);
799 CONVERT(VarUI1FromDate, 0.5); EXPECT(0);
800 CONVERT(VarUI1FromDate, 0.6); EXPECT(1);
801 CONVERT(VarUI1FromDate, 1.5); EXPECT(2);
802}
HRESULT WINAPI VarUI1FromDate(DATE dateIn, BYTE *pbOut)
Definition: vartype.c:698

Referenced by START_TEST().

◆ test_VarUI1FromDec()

static void test_VarUI1FromDec ( void  )
static

Definition at line 825 of file vartype.c.

826{
828
830
832 CONVERT_DEC(VarUI1FromDec,0,0,0,0); EXPECT(0);
833 CONVERT_DEC(VarUI1FromDec,0,0,0,1); EXPECT(1);
834 CONVERT_DEC(VarUI1FromDec,0,0,0,255); EXPECT(255);
836
838 CONVERT_DEC(VarUI1FromDec,2,0,0,25500); EXPECT(255);
839}
HRESULT WINAPI VarUI1FromDec(DECIMAL *pdecIn, BYTE *pbOut)
Definition: vartype.c:834

Referenced by START_TEST().

◆ test_VarUI1FromDisp()

static void test_VarUI1FromDisp ( void  )
static

Definition at line 865 of file vartype.c.

866{
868 CONVVARS(LCID);
869 VARIANTARG vSrc, vDst;
870
871 /* FIXME
872 * Conversions from IDispatch should get the default 'value' property
873 * from the IDispatch pointer and return it. The following tests this.
874 * However, I can't get these tests to return a valid value under native
875 * oleaut32, regardless of the value returned in response to the Invoke()
876 * call (early versions of oleaut32 call AddRef/Release, but not Invoke.
877 * I'm obviously missing something, as these conversions work fine
878 * when called through VBA on an object to get its default value property.
879 *
880 * Should this test be corrected so that it works under native it should be
881 * generalised and the remaining types checked as well.
882 */
884
885 VariantInit(&vSrc);
886 VariantInit(&vDst);
887
889 V_VT(&vSrc) = VT_DISPATCH;
890 V_DISPATCH(&vSrc) = &dispatch.IDispatch_iface;
891
892 SET_EXPECT(dispatch_invoke);
893 out = 10;
894 hres = VarUI1FromDisp(&dispatch.IDispatch_iface, in, &out);
895 ok(broken(hres == DISP_E_BADVARTYPE) || hres == S_OK, "got 0x%08lx\n", hres);
896 ok(broken(out == 10) || out == 1, "got %d\n", out);
897 CHECK_CALLED(dispatch_invoke);
898
899 SET_EXPECT(dispatch_invoke);
900 V_VT(&vDst) = VT_EMPTY;
901 V_UI1(&vDst) = 0;
902 hres = VariantChangeTypeEx(&vDst, &vSrc, in, 0, VT_UI1);
903 ok(hres == S_OK, "got 0x%08lx\n", hres);
904 ok(V_VT(&vDst) == VT_UI1, "got %d\n", V_VT(&vDst));
905 ok(V_UI1(&vDst) == 1, "got %d\n", V_UI1(&vDst));
906 CHECK_CALLED(dispatch_invoke);
907
908 dispatch.bFailInvoke = TRUE;
909
910 SET_EXPECT(dispatch_invoke);
911 out = 10;
912 hres = VarUI1FromDisp(&dispatch.IDispatch_iface, in, &out);
913 ok(hres == DISP_E_TYPEMISMATCH, "got 0x%08lx\n", hres);
914 ok(out == 10, "got %d\n", out);
915 CHECK_CALLED(dispatch_invoke);
916
917 SET_EXPECT(dispatch_invoke);
918 V_VT(&vDst) = VT_EMPTY;
919 hres = VariantChangeTypeEx(&vDst, &vSrc, in, 0, VT_UI1);
920 ok(hres == DISP_E_TYPEMISMATCH, "got 0x%08lx\n", hres);
921 ok(V_VT(&vDst) == VT_EMPTY, "got %d\n", V_VT(&vDst));
922 CHECK_CALLED(dispatch_invoke);
923}
#define broken(x)
Definition: atltest.h:178
HRESULT WINAPI VarUI1FromDisp(IDispatch *pdispIn, LCID lcid, BYTE *pbOut)
Definition: vartype.c:741
#define SET_EXPECT(func)
Definition: vartype.c:262
#define CHECK_CALLED(func)
Definition: vartype.c:277

Referenced by START_TEST().

◆ test_VarUI1FromI1()

static void test_VarUI1FromI1 ( void  )
static

Definition at line 656 of file vartype.c.

657{
658 CONVVARS(signed char);
659 int i;
660
661 OVERFLOWRANGE(VarUI1FromI1, -128, 0);
662 CONVERTRANGE(VarUI1FromI1, 0, 128);
663}
HRESULT WINAPI VarUI1FromI1(signed char cIn, BYTE *pbOut)
Definition: vartype.c:777

Referenced by START_TEST().

◆ test_VarUI1FromI2()

static void test_VarUI1FromI2 ( void  )
static

Definition at line 665 of file vartype.c.

666{
668 int i;
669
670 OVERFLOWRANGE(VarUI1FromI2, -32768, 0);
671 CONVERTRANGE(VarUI1FromI2, 0, 256);
672 OVERFLOWRANGE(VarUI1FromI2, 256, 32768);
673}
HRESULT WINAPI VarUI1FromI2(SHORT sIn, BYTE *pbOut)
Definition: vartype.c:590

Referenced by START_TEST().

◆ test_VarUI1FromI4()

static void test_VarUI1FromI4 ( void  )
static

Definition at line 675 of file vartype.c.

676{
677 CONVVARS(LONG);
678 int i;
679
681 CONVERTRANGE(VarUI1FromI4, 0, 256);
683}
HRESULT WINAPI VarUI1FromI4(LONG iIn, BYTE *pbOut)
Definition: vartype.c:609

Referenced by START_TEST().

◆ test_VarUI1FromI8()

static void test_VarUI1FromI8 ( void  )
static

Definition at line 685 of file vartype.c.

686{
688 int i;
689
691 CONVERTRANGE(VarUI1FromI8, 0, 256);
693}
HRESULT WINAPI VarUI1FromI8(LONG64 llIn, BYTE *pbOut)
Definition: vartype.c:860

Referenced by START_TEST().

◆ test_VarUI1FromR4()

static void test_VarUI1FromR4 ( void  )
static

Definition at line 733 of file vartype.c.

734{
736
739 CONVERT(VarUI1FromR4, -0.5f); EXPECT(0);
740 CONVERT(VarUI1FromR4, 0.0f); EXPECT(0);
741 CONVERT(VarUI1FromR4, 1.0f); EXPECT(1);
742 CONVERT(VarUI1FromR4, 255.0f); EXPECT(255);
743 CONVERT(VarUI1FromR4, 255.49f); EXPECT(255);
746
747 /* Rounding */
750 CONVERT(VarUI1FromR4, -0.5f); EXPECT(0);
751 CONVERT(VarUI1FromR4, -0.4f); EXPECT(0);
752 CONVERT(VarUI1FromR4, 0.4f); EXPECT(0);
753 CONVERT(VarUI1FromR4, 0.5f); EXPECT(0);
754 CONVERT(VarUI1FromR4, 0.6f); EXPECT(1);
755 CONVERT(VarUI1FromR4, 1.5f); EXPECT(2);
756}
HRESULT WINAPI VarUI1FromR4(FLOAT fltIn, BYTE *pbOut)
Definition: vartype.c:629

Referenced by START_TEST().

◆ test_VarUI1FromR8()

static void test_VarUI1FromR8 ( void  )
static

Definition at line 758 of file vartype.c.

759{
761
764 CONVERT(VarUI1FromR8, -0.5); EXPECT(0);
765 CONVERT(VarUI1FromR8, 0.0); EXPECT(0);
766 CONVERT(VarUI1FromR8, 1.0); EXPECT(1);
767 CONVERT(VarUI1FromR8, 255.0); EXPECT(255);
768 CONVERT(VarUI1FromR8, 255.49); EXPECT(255);
771
772 /* Rounding */
775 CONVERT(VarUI1FromR8, -0.5); EXPECT(0);
776 CONVERT(VarUI1FromR8, -0.4); EXPECT(0);
777 CONVERT(VarUI1FromR8, 0.4); EXPECT(0);
778 CONVERT(VarUI1FromR8, 0.5); EXPECT(0);
779 CONVERT(VarUI1FromR8, 0.6); EXPECT(1);
780 CONVERT(VarUI1FromR8, 1.5); EXPECT(2);
781}
HRESULT WINAPI VarUI1FromR8(double dblIn, BYTE *pbOut)
Definition: vartype.c:651

Referenced by START_TEST().

◆ test_VarUI1FromStr()

static void test_VarUI1FromStr ( void  )
static

◆ test_VarUI1FromUI2()

static void test_VarUI1FromUI2 ( void  )
static

Definition at line 695 of file vartype.c.

696{
698 int i;
699
701 OVERFLOWRANGE(VarUI1FromUI2, 256, 65536);
702}
HRESULT WINAPI VarUI1FromUI2(USHORT usIn, BYTE *pbOut)
Definition: vartype.c:796

Referenced by START_TEST().

◆ test_VarUI1FromUI4()

static void test_VarUI1FromUI4 ( void  )
static

Definition at line 704 of file vartype.c.

705{
707 int i;
708
711}
HRESULT WINAPI VarUI1FromUI4(ULONG ulIn, BYTE *pbOut)
Definition: vartype.c:815

Referenced by START_TEST().

◆ test_VarUI1FromUI8()

static void test_VarUI1FromUI8 ( void  )
static

Definition at line 713 of file vartype.c.

714{
716 int i;
717
720}
HRESULT WINAPI VarUI1FromUI8(ULONG64 ullIn, BYTE *pbOut)
Definition: vartype.c:879

Referenced by START_TEST().

◆ test_VarUI2ChangeTypeEx()

static void test_VarUI2ChangeTypeEx ( void  )
static

Definition at line 1403 of file vartype.c.

1404{
1405 HRESULT hres;
1406 USHORT in;
1407 VARIANTARG vSrc, vDst;
1408
1409 in = 1;
1410
1414}

Referenced by START_TEST().

◆ test_VarUI2Copy()

static void test_VarUI2Copy ( void  )
static

Definition at line 1398 of file vartype.c.

1399{
1400 COPYTEST(1, VT_UI2, V_UI2(&vSrc), V_UI2(&vDst), V_UI2REF(&vSrc), V_UI2REF(&vDst), "%d");
1401}
#define V_UI2REF(A)
Definition: oleauto.h:269

Referenced by START_TEST().

◆ test_VarUI2FromBool()

static void test_VarUI2FromBool ( void  )
static

Definition at line 1256 of file vartype.c.

1257{
1259 int i;
1260
1261 CONVERT(VarUI2FromBool, -1); EXPECT(65535); /* Wraps! */
1262 CONVERTRANGE(VarUI2FromBool, 0, 32768);
1263}
HRESULT WINAPI VarUI2FromBool(VARIANT_BOOL boolIn, USHORT *pusOut)
Definition: vartype.c:1373

Referenced by START_TEST().

◆ test_VarUI2FromCy()

static void test_VarUI2FromCy ( void  )
static

Definition at line 1336 of file vartype.c.

1337{
1338 CONVVARS(CY);
1339
1343 CONVERT_CY(VarUI2FromCy,65535); EXPECT(65535);
1345
1346 /* Rounding */
1349 CONVERT_CY(VarUI2FromCy,-0.5); EXPECT(0);
1350 CONVERT_CY(VarUI2FromCy,-0.4); EXPECT(0);
1355}
HRESULT WINAPI VarUI2FromCy(CY cyIn, USHORT *pusOut)
Definition: vartype.c:1311

Referenced by START_TEST().

◆ test_VarUI2FromDate()

static void test_VarUI2FromDate ( void  )
static

Definition at line 1315 of file vartype.c.

1316{
1317 CONVVARS(DATE);
1318
1320 CONVERT(VarUI2FromDate, 0.0); EXPECT(0);
1321 CONVERT(VarUI2FromDate, 1.0); EXPECT(1);
1322 CONVERT(VarUI2FromDate, 65535.0); EXPECT(65535);
1324
1325 /* Rounding */
1328 CONVERT(VarUI2FromDate, -0.5); EXPECT(0);
1329 CONVERT(VarUI2FromDate, -0.4); EXPECT(0);
1330 CONVERT(VarUI2FromDate, 0.4); EXPECT(0);
1331 CONVERT(VarUI2FromDate, 0.5); EXPECT(0);
1332 CONVERT(VarUI2FromDate, 0.6); EXPECT(1);
1333 CONVERT(VarUI2FromDate, 1.5); EXPECT(2);
1334}
HRESULT WINAPI VarUI2FromDate(DATE dateIn, USHORT *pusOut)
Definition: vartype.c:1290

Referenced by START_TEST().

◆ test_VarUI2FromDec()

static void test_VarUI2FromDec ( void  )
static

Definition at line 1357 of file vartype.c.

1358{
1360
1362
1364 CONVERT_DEC(VarUI2FromDec,0,0,0,0); EXPECT(0);
1365 CONVERT_DEC(VarUI2FromDec,0,0,0,1); EXPECT(1);
1366 CONVERT_DEC(VarUI2FromDec,0,0,0,65535); EXPECT(65535);
1368
1370 CONVERT_DEC(VarUI2FromDec,2,0,0,6553500); EXPECT(65535);
1372}
HRESULT WINAPI VarUI2FromDec(DECIMAL *pdecIn, USHORT *pusOut)
Definition: vartype.c:1428

Referenced by START_TEST().

◆ test_VarUI2FromI1()

static void test_VarUI2FromI1 ( void  )
static

Definition at line 1190 of file vartype.c.

1191{
1192 CONVVARS(signed char);
1193 int i;
1194
1195 OVERFLOWRANGE(VarUI2FromI1, -128, 0);
1196 CONVERTRANGE(VarUI2FromI1, 0, 128);
1197}
HRESULT WINAPI VarUI2FromI1(signed char cIn, USHORT *pusOut)
Definition: vartype.c:1391

Referenced by START_TEST().

◆ test_VarUI2FromI2()

static void test_VarUI2FromI2 ( void  )
static

Definition at line 1199 of file vartype.c.

1200{
1201 CONVVARS(SHORT);
1202 int i;
1203
1204 OVERFLOWRANGE(VarUI2FromI2, -32768, 0);
1205 CONVERTRANGE(VarUI2FromI2, 0, 32768);
1206}
HRESULT WINAPI VarUI2FromI2(SHORT sIn, USHORT *pusOut)
Definition: vartype.c:1212

Referenced by START_TEST().

◆ test_VarUI2FromI4()

static void test_VarUI2FromI4 ( void  )
static

Definition at line 1208 of file vartype.c.

1209{
1210 CONVVARS(LONG);
1211 int i;
1212
1213 OVERFLOWRANGE(VarUI2FromI4, -32768, 0);
1214 CONVERT(VarUI2FromI4, 0); EXPECT(0);
1215 CONVERT(VarUI2FromI4, 65535); EXPECT(65535);
1217}
HRESULT WINAPI VarUI2FromI4(LONG iIn, USHORT *pusOut)
Definition: vartype.c:1230

Referenced by START_TEST().

◆ test_VarUI2FromI8()

static void test_VarUI2FromI8 ( void  )
static

Definition at line 1219 of file vartype.c.

1220{
1222 int i;
1223
1224 OVERFLOWRANGE(VarUI2FromI8, -32768, 0);
1225 CONVERT(VarUI2FromI8, 0); EXPECT(0);
1226 CONVERT(VarUI2FromI8, 65535); EXPECT(65535);
1228}
HRESULT WINAPI VarUI2FromI8(LONG64 llIn, USHORT *pusOut)
Definition: vartype.c:1453

Referenced by START_TEST().

◆ test_VarUI2FromR4()

static void test_VarUI2FromR4 ( void  )
static

Definition at line 1265 of file vartype.c.

1266{
1267 CONVVARS(FLOAT);
1268
1271 CONVERT(VarUI2FromR4, -0.5f); EXPECT(0);
1272 CONVERT(VarUI2FromR4, 0.0f); EXPECT(0);
1273 CONVERT(VarUI2FromR4, 1.0f); EXPECT(1);
1274 CONVERT(VarUI2FromR4, 65535.0f); EXPECT(65535);
1275 CONVERT(VarUI2FromR4, 65535.49f); EXPECT(65535);
1278
1279 /* Rounding */
1282 CONVERT(VarUI2FromR4, -0.5f); EXPECT(0);
1283 CONVERT(VarUI2FromR4, -0.4f); EXPECT(0);
1284 CONVERT(VarUI2FromR4, 0.4f); EXPECT(0);
1285 CONVERT(VarUI2FromR4, 0.5f); EXPECT(0);
1286 CONVERT(VarUI2FromR4, 0.6f); EXPECT(1);
1287 CONVERT(VarUI2FromR4, 1.5f); EXPECT(2);
1288}
HRESULT WINAPI VarUI2FromR4(FLOAT fltIn, USHORT *pusOut)
Definition: vartype.c:1248

Referenced by START_TEST().

◆ test_VarUI2FromR8()

static void test_VarUI2FromR8 ( void  )
static

Definition at line 1290 of file vartype.c.

1291{
1293
1296 CONVERT(VarUI2FromR8, -0.5); EXPECT(0);
1297 CONVERT(VarUI2FromR8, 0.0); EXPECT(0);
1298 CONVERT(VarUI2FromR8, 1.0); EXPECT(1);
1299 CONVERT(VarUI2FromR8, 65535.0); EXPECT(65535);
1300 CONVERT(VarUI2FromR8, 65535.49); EXPECT(65535);
1303
1304 /* Rounding */
1307 CONVERT(VarUI2FromR8, -0.5); EXPECT(0);
1308 CONVERT(VarUI2FromR8, -0.4); EXPECT(0);
1309 CONVERT(VarUI2FromR8, 0.4); EXPECT(0);
1310 CONVERT(VarUI2FromR8, 0.5); EXPECT(0);
1311 CONVERT(VarUI2FromR8, 0.6); EXPECT(1);
1312 CONVERT(VarUI2FromR8, 1.5); EXPECT(2);
1313}
HRESULT WINAPI VarUI2FromR8(double dblIn, USHORT *pusOut)
Definition: vartype.c:1269

Referenced by START_TEST().

◆ test_VarUI2FromStr()

static void test_VarUI2FromStr ( void  )
static

Definition at line 1374 of file vartype.c.

Referenced by START_TEST().

◆ test_VarUI2FromUI1()

static void test_VarUI2FromUI1 ( void  )
static

Definition at line 1230 of file vartype.c.

1231{
1232 CONVVARS(BYTE);
1233 int i;
1234
1235 CONVERTRANGE(VarUI2FromUI1, 0, 256);
1236}
HRESULT WINAPI VarUI2FromUI1(BYTE bIn, USHORT *pusOut)
Definition: vartype.c:1194

Referenced by START_TEST().

◆ test_VarUI2FromUI4()

static void test_VarUI2FromUI4 ( void  )
static

Definition at line 1238 of file vartype.c.

1239{
1240 CONVVARS(ULONG);
1241
1243 CONVERT(VarUI2FromUI4, 65535); EXPECT(65535);
1245}
HRESULT WINAPI VarUI2FromUI4(ULONG ulIn, USHORT *pusOut)
Definition: vartype.c:1409

Referenced by START_TEST().

◆ test_VarUI2FromUI8()

static void test_VarUI2FromUI8 ( void  )
static

Definition at line 1247 of file vartype.c.

1248{
1250
1252 CONVERT(VarUI2FromUI8, 65535); EXPECT(65535);
1254}
HRESULT WINAPI VarUI2FromUI8(ULONG64 ullIn, USHORT *pusOut)
Definition: vartype.c:1471

Referenced by START_TEST().

◆ test_VarUI4ChangeTypeEx()

static void test_VarUI4ChangeTypeEx ( void  )
static

Definition at line 1862 of file vartype.c.

1863{
1864 HRESULT hres;
1865 ULONG in;
1866 VARIANTARG vSrc, vDst;
1867
1868 in = 1;
1869
1870 INITIAL_TYPETEST(VT_UI4, V_UI4, "%lu");
1873}

Referenced by START_TEST().

◆ test_VarUI4Copy()

static void test_VarUI4Copy ( void  )
static

Definition at line 1857 of file vartype.c.

1858{
1859 COPYTEST(1lu, VT_UI4, V_UI4(&vSrc), V_UI4(&vDst), V_UI4REF(&vSrc), V_UI4REF(&vDst), "%lu");
1860}
#define V_UI4REF(A)
Definition: oleauto.h:271

Referenced by START_TEST().

◆ test_VarUI4FromBool()

static void test_VarUI4FromBool ( void  )
static

Definition at line 1723 of file vartype.c.

1724{
1726 int i;
1727
1728 CONVERTRANGE(VarUI4FromBool, -32768, 32768);
1729}
HRESULT WINAPI VarUI4FromBool(VARIANT_BOOL boolIn, ULONG *pulOut)
Definition: vartype.c:1958

Referenced by START_TEST().

◆ test_VarUI4FromCy()

static void test_VarUI4FromCy ( void  )
static

Definition at line 1797 of file vartype.c.

1798{
1799 CONVVARS(CY);
1800
1804 CONVERT_CY64(VarUI4FromCy,0,4294967295ul); EXPECT(4294967295ul);
1806
1809 CONVERT_CY(VarUI4FromCy,-0.5); EXPECT(0);
1810 CONVERT_CY(VarUI4FromCy,-0.4); EXPECT(0);
1815}
HRESULT WINAPI VarUI4FromCy(CY cyIn, ULONG *pulOut)
Definition: vartype.c:1897

Referenced by START_TEST().

◆ test_VarUI4FromDate()

static void test_VarUI4FromDate ( void  )
static

Definition at line 1777 of file vartype.c.

1778{
1780
1782 CONVERT(VarUI4FromDate, 0.0); EXPECT(0);
1783 CONVERT(VarUI4FromDate, 1.0); EXPECT(1);
1784 CONVERT(VarUI4FromDate, 4294967295.0); EXPECT(4294967295ul);
1785 CONVERT(VarUI4FromDate, 4294967296.0); EXPECT_OVERFLOW;
1786
1789 CONVERT(VarUI4FromDate, -0.5); EXPECT(0);
1790 CONVERT(VarUI4FromDate, -0.4); EXPECT(0);
1791 CONVERT(VarUI4FromDate, 0.4); EXPECT(0);
1792 CONVERT(VarUI4FromDate, 0.5); EXPECT(0);
1793 CONVERT(VarUI4FromDate, 0.6); EXPECT(1);
1794 CONVERT(VarUI4FromDate, 1.5); EXPECT(2);
1795}
HRESULT WINAPI VarUI4FromDate(DATE dateIn, ULONG *pulOut)
Definition: vartype.c:1879

Referenced by START_TEST().

◆ test_VarUI4FromDec()

static void test_VarUI4FromDec ( void  )
static

Definition at line 1817 of file vartype.c.

1818{
1820
1822
1824 CONVERT_DEC(VarUI4FromDec,0,0,0,0); EXPECT(0);
1825 CONVERT_DEC(VarUI4FromDec,0,0,0,1); EXPECT(1);
1826 CONVERT_DEC64(VarUI4FromDec,0,0,0,0,4294967295ul); EXPECT(4294967295ul);
1828
1829 CONVERT_DEC64(VarUI4FromDec,2,0,0,99,4294967196ul); EXPECT(4294967295ul);
1831}
HRESULT WINAPI VarUI4FromDec(DECIMAL *pdecIn, ULONG *pulOut)
Definition: vartype.c:2012

Referenced by START_TEST().

◆ test_VarUI4FromI1()

static void test_VarUI4FromI1 ( void  )
static

Definition at line 1658 of file vartype.c.

1659{
1660 CONVVARS(signed char);
1661 int i;
1662
1663 OVERFLOWRANGE(VarUI4FromI1, -127, 0);
1664 CONVERTRANGE(VarUI4FromI1, 0, 128);
1665}
HRESULT WINAPI VarUI4FromI1(signed char cIn, ULONG *pulOut)
Definition: vartype.c:1976

Referenced by START_TEST().

◆ test_VarUI4FromI2()

static void test_VarUI4FromI2 ( void  )
static

Definition at line 1667 of file vartype.c.

1668{
1669 CONVVARS(SHORT);
1670 int i;
1671
1672 OVERFLOWRANGE(VarUI4FromI2, -32768, 0);
1673 CONVERTRANGE(VarUI4FromI2, 0, 32768);
1674}
HRESULT WINAPI VarUI4FromI2(SHORT sIn, ULONG *pulOut)
Definition: vartype.c:1801

Referenced by START_TEST().

◆ test_VarUI4FromI4()

static void test_VarUI4FromI4 ( void  )
static

Definition at line 1703 of file vartype.c.

1704{
1705 CONVVARS(int);
1706
1708 CONVERT(VarUI4FromI4, 0); EXPECT(0);
1709 CONVERT(VarUI4FromI4, 1); EXPECT(1);
1710 CONVERT(VarUI4FromI4, 2147483647); EXPECT(2147483647);
1711}
HRESULT WINAPI VarUI4FromI4(LONG iIn, ULONG *pulOut)
Definition: vartype.c:1819

Referenced by START_TEST().

◆ test_VarUI4FromI8()

static void test_VarUI4FromI8 ( void  )
static

Definition at line 1684 of file vartype.c.

1685{
1687
1689 CONVERT(VarUI4FromI8, 0); EXPECT(0);
1690 CONVERT(VarUI4FromI8, 1); EXPECT(1);
1691 CONVERT(VarUI4FromI8, 4294967295ul); EXPECT(4294967295ul);
1693}
HRESULT WINAPI VarUI4FromI8(LONG64 llIn, ULONG *pulOut)
Definition: vartype.c:2037

Referenced by START_TEST().

◆ test_VarUI4FromR4()

static void test_VarUI4FromR4 ( void  )
static

Definition at line 1731 of file vartype.c.

1732{
1733 CONVVARS(FLOAT);
1734
1735 /* We can't test max values as they are not exactly representable in a float */
1738 CONVERT(VarUI4FromR4, -0.5f); EXPECT(0);
1739 CONVERT(VarUI4FromR4, 0.0f); EXPECT(0);
1740 CONVERT(VarUI4FromR4, 1.0f); EXPECT(1);
1741
1744 CONVERT(VarUI4FromR4, -0.5f); EXPECT(0);
1745 CONVERT(VarUI4FromR4, -0.4f); EXPECT(0);
1746 CONVERT(VarUI4FromR4, 0.4f); EXPECT(0);
1747 CONVERT(VarUI4FromR4, 0.5f); EXPECT(0);
1748 CONVERT(VarUI4FromR4, 0.6f); EXPECT(1);
1749 CONVERT(VarUI4FromR4, 1.5f); EXPECT(2);
1750
1751}
HRESULT WINAPI VarUI4FromR4(FLOAT fltIn, ULONG *pulOut)
Definition: vartype.c:1837

Referenced by START_TEST().

◆ test_VarUI4FromR8()

static void test_VarUI4FromR8 ( void  )
static

Definition at line 1753 of file vartype.c.

1754{
1756
1759 CONVERT(VarUI4FromR4, -0.5f); EXPECT(0);
1760 CONVERT(VarUI4FromR8, 0.0); EXPECT(0);
1761 CONVERT(VarUI4FromR8, 1.0); EXPECT(1);
1762 CONVERT(VarUI4FromR8, 4294967295.0); EXPECT(4294967295ul);
1763 CONVERT(VarUI4FromR8, 4294967295.49); EXPECT(4294967295ul);
1764 CONVERT(VarUI4FromR8, 4294967295.5); EXPECT_OVERFLOW;
1765 CONVERT(VarUI4FromR8, 4294967296.0); EXPECT_OVERFLOW;
1766
1769 CONVERT(VarUI4FromR8, -0.5); EXPECT(0);
1770 CONVERT(VarUI4FromR8, -0.4); EXPECT(0);
1771 CONVERT(VarUI4FromR8, 0.4); EXPECT(0);
1772 CONVERT(VarUI4FromR8, 0.5); EXPECT(0);
1773 CONVERT(VarUI4FromR8, 0.6); EXPECT(1);
1774 CONVERT(VarUI4FromR8, 1.5); EXPECT(2);
1775}
HRESULT WINAPI VarUI4FromR8(double dblIn, ULONG *pulOut)
Definition: vartype.c:1858

Referenced by START_TEST().

◆ test_VarUI4FromStr()

static void test_VarUI4FromStr ( void  )
static

Definition at line 1833 of file vartype.c.

Referenced by START_TEST().

◆ test_VarUI4FromUI1()

static void test_VarUI4FromUI1 ( void  )
static

Definition at line 1695 of file vartype.c.

1696{
1697 CONVVARS(BYTE);
1698 int i;
1699
1700 CONVERTRANGE(VarUI4FromUI1, 0, 256);
1701}
HRESULT WINAPI VarUI4FromUI1(BYTE bIn, ULONG *pulOut)
Definition: vartype.c:1783

Referenced by START_TEST().

◆ test_VarUI4FromUI2()

static void test_VarUI4FromUI2 ( void  )
static

Definition at line 1676 of file vartype.c.

1677{
1679 int i;
1680
1681 CONVERTRANGE(VarUI4FromUI2, 0, 65536);
1682}
HRESULT WINAPI VarUI4FromUI2(USHORT usIn, ULONG *pulOut)
Definition: vartype.c:1993

Referenced by START_TEST().

◆ test_VarUI4FromUI8()

static void test_VarUI4FromUI8 ( void  )
static

Definition at line 1713 of file vartype.c.

1714{
1716
1719 CONVERT(VarUI4FromI8, 4294967295ul); EXPECT(4294967295ul);
1721}
HRESULT WINAPI VarUI4FromUI8(ULONG64 ullIn, ULONG *pulOut)
Definition: vartype.c:2055

Referenced by START_TEST().

◆ test_VarUI8ChangeTypeEx()

static void test_VarUI8ChangeTypeEx ( void  )
static

Definition at line 2287 of file vartype.c.

2288{
2289 HRESULT hres;
2290 ULONG64 in;
2291 VARIANTARG vSrc, vDst;
2292
2293 if (!has_i8)
2294 {
2295 win_skip("I8 and UI8 data types are not available\n");
2296 return;
2297 }
2298
2299 in = 1;
2300
2303}

Referenced by START_TEST().

◆ test_VarUI8Copy()

static void test_VarUI8Copy ( void  )
static

Definition at line 2276 of file vartype.c.

2277{
2278 if (!has_i8)
2279 {
2280 win_skip("I8 and UI8 data types are not available\n");
2281 return;
2282 }
2283
2284 COPYTEST(1ull, VT_UI8, V_UI8(&vSrc), V_UI8(&vDst), V_UI8REF(&vSrc), V_UI8REF(&vDst), "%I64u");
2285}
#define V_UI8REF(A)
Definition: oleauto.h:273

Referenced by START_TEST().

◆ test_VarUI8FromBool()

static void test_VarUI8FromBool ( void  )
static

Definition at line 2195 of file vartype.c.

2196{
2198 int i;
2199
2200 CONVERTRANGE(VarUI8FromBool, -32768, 32768);
2201}
HRESULT WINAPI VarUI8FromBool(VARIANT_BOOL boolIn, ULONG64 *pui64Out)
Definition: vartype.c:2594

Referenced by START_TEST().

◆ test_VarUI8FromCy()

static void test_VarUI8FromCy ( void  )
static

Definition at line 2212 of file vartype.c.

2213{
2214 CONVVARS(CY);
2215
2219 CONVERT_CY(VarUI8FromCy,255); EXPECT(255);
2220
2223 CONVERT_CY(VarUI8FromCy,-0.5); EXPECT(0);
2224 CONVERT_CY(VarUI8FromCy,-0.4); EXPECT(0);
2229}
HRESULT WINAPI VarUI8FromCy(CY cyIn, ULONG64 *pui64Out)
Definition: vartype.c:2498

Referenced by START_TEST().

◆ test_VarUI8FromDate()

static void test_VarUI8FromDate ( void  )
static

Definition at line 2176 of file vartype.c.

2177{
2178 CONVVARS(DATE);
2179
2181 CONVERT(VarUI8FromDate, 0.0); EXPECT(0);
2182 CONVERT(VarUI8FromDate, 1.0); EXPECT(1);
2183 CONVERT(VarUI8FromDate, 255.0); EXPECT(255);
2184
2187 CONVERT(VarUI8FromDate, -0.5); EXPECT(0);
2188 CONVERT(VarUI8FromDate, -0.4); EXPECT(0);
2189 CONVERT(VarUI8FromDate, 0.4); EXPECT(0);
2190 CONVERT(VarUI8FromDate, 0.5); EXPECT(0);
2191 CONVERT(VarUI8FromDate, 0.6); EXPECT(1);
2192 CONVERT(VarUI8FromDate, 1.5); EXPECT(2);
2193}
HRESULT WINAPI VarUI8FromDate(DATE dateIn, ULONG64 *pui64Out)
Definition: vartype.c:2533

Referenced by START_TEST().

◆ test_VarUI8FromDec()

static void test_VarUI8FromDec ( void  )
static

Definition at line 2231 of file vartype.c.

2232{
2234
2236
2237 /* This returns 1 under native; Wine fixes this bug and returns overflow */
2238 if (0)
2239 {
2240 CONVERT_DEC(VarUI8FromDec,0,0x80,0,1);
2241 }
2242
2243 CONVERT_DEC(VarUI8FromDec,0,0,0,0); EXPECT(0);
2244 CONVERT_DEC(VarUI8FromDec,0,0,0,1); EXPECT(1);
2245 CONVERT_DEC(VarUI8FromDec,0,0,0,255); EXPECT(255);
2246
2248 CONVERT_DEC(VarUI8FromDec,2,0,0,25500); EXPECT(255);
2249}
HRESULT WINAPI VarUI8FromDec(DECIMAL *pdecIn, ULONG64 *pui64Out)
Definition: vartype.c:2670

Referenced by START_TEST().

◆ test_VarUI8FromI1()

static void test_VarUI8FromI1 ( void  )
static

Definition at line 2096 of file vartype.c.

2097{
2098 CONVVARS(signed char);
2099 int i;
2100
2101 OVERFLOWRANGE(VarUI8FromI1, -128, 0);
2102 CONVERTRANGE(VarUI8FromI1, 0, 128);
2103}
HRESULT WINAPI VarUI8FromI1(signed char cIn, ULONG64 *pui64Out)
Definition: vartype.c:2611

Referenced by START_TEST().

◆ test_VarUI8FromI2()

static void test_VarUI8FromI2 ( void  )
static

Definition at line 2113 of file vartype.c.

2114{
2115 CONVVARS(SHORT);
2116 int i;
2117
2118 OVERFLOWRANGE(VarUI8FromI2, -32768, 0);
2119 CONVERTRANGE(VarUI8FromI2, 0, 32768);
2120}
HRESULT WINAPI VarUI8FromI2(SHORT sIn, ULONG64 *pui64Out)
Definition: vartype.c:2433

Referenced by START_TEST().

◆ test_VarUI8FromI8()

static void test_VarUI8FromI8 ( void  )
static

Definition at line 2203 of file vartype.c.

2204{
2206
2208 CONVERT(VarUI8FromI8, 0); EXPECT(0);
2209 CONVERT(VarUI8FromI8, 1); EXPECT(1);
2210}
HRESULT WINAPI VarUI8FromI8(LONG64 llIn, ULONG64 *pui64Out)
Definition: vartype.c:2399

Referenced by START_TEST().

◆ test_VarUI8FromR4()

static void test_VarUI8FromR4 ( void  )
static

Definition at line 2138 of file vartype.c.

2139{
2140 CONVVARS(FLOAT);
2141
2143 CONVERT(VarUI8FromR4, 0.0f); EXPECT(0);
2144 CONVERT(VarUI8FromR4, 1.0f); EXPECT(1);
2145 CONVERT(VarUI8FromR4, 255.0f); EXPECT(255);
2146
2149 CONVERT(VarUI8FromR4, -0.5f); EXPECT(0);
2150 CONVERT(VarUI8FromR4, -0.4f); EXPECT(0);
2151 CONVERT(VarUI8FromR4, 0.4f); EXPECT(0);
2152 CONVERT(VarUI8FromR4, 0.5f); EXPECT(0);
2153 CONVERT(VarUI8FromR4, 0.6f); EXPECT(1);
2154 CONVERT(VarUI8FromR4, 1.5f); EXPECT(2);
2155}
HRESULT WINAPI VarUI8FromR4(FLOAT fltIn, ULONG64 *pui64Out)
Definition: vartype.c:2451

Referenced by START_TEST().

◆ test_VarUI8FromR8()

static void test_VarUI8FromR8 ( void  )
static

Definition at line 2157 of file vartype.c.

2158{
2160
2162 CONVERT(VarUI8FromR8, 0.0); EXPECT(0);
2163 CONVERT(VarUI8FromR8, 1.0); EXPECT(1);
2164 CONVERT(VarUI8FromR8, 255.0); EXPECT(255);
2165
2168 CONVERT(VarUI8FromR8, -0.5); EXPECT(0);
2169 CONVERT(VarUI8FromR8, -0.4); EXPECT(0);
2170 CONVERT(VarUI8FromR8, 0.4); EXPECT(0);
2171 CONVERT(VarUI8FromR8, 0.5); EXPECT(0);
2172 CONVERT(VarUI8FromR8, 0.6); EXPECT(1);
2173 CONVERT(VarUI8FromR8, 1.5); EXPECT(2);
2174}
HRESULT WINAPI VarUI8FromR8(double dblIn, ULONG64 *pui64Out)
Definition: vartype.c:2473

Referenced by START_TEST().

◆ test_VarUI8FromStr()

static void test_VarUI8FromStr ( void  )
static

Definition at line 2251 of file vartype.c.

2252{
2253 CONVVARS(LCID);
2254 OLECHAR buff[128];
2255
2257
2259 CONVERT_STR(VarUI8FromStr,"0",0); EXPECT(0);
2261 CONVERT_STR(VarUI8FromStr,"2147483647",0); EXPECT(2147483647);
2262 CONVERT_STR(VarUI8FromStr,"18446744073709551614",0); EXPECT(0xFFFFFFFFFFFFFFFEull);
2263 CONVERT_STR(VarUI8FromStr,"18446744073709551615",0); EXPECT(0xFFFFFFFFFFFFFFFFull);
2264 CONVERT_STR(VarUI8FromStr,"18446744073709551616",0); EXPECT_OVERFLOW;
2265
2274}
HRESULT WINAPI VarUI8FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, ULONG64 *pui64Out)
Definition: vartype.c:2555

Referenced by START_TEST().

◆ test_VarUI8FromUI1()

static void test_VarUI8FromUI1 ( void  )
static

Definition at line 2105 of file vartype.c.

2106{
2107 CONVVARS(BYTE);
2108 int i;
2109
2110 CONVERTRANGE(VarUI8FromUI1, 0, 256);
2111}
HRESULT WINAPI VarUI8FromUI1(BYTE bIn, ULONG64 *pui64Out)
Definition: vartype.c:2416

Referenced by START_TEST().

◆ test_VarUI8FromUI2()

static void test_VarUI8FromUI2 ( void  )
static

Definition at line 2122 of file vartype.c.

2123{
2125 int i;
2126
2127 CONVERTRANGE(VarUI8FromUI2, 0, 65535);
2128}
HRESULT WINAPI VarUI8FromUI2(USHORT usIn, ULONG64 *pui64Out)
Definition: vartype.c:2628

Referenced by START_TEST().

◆ test_VarUI8FromUI4()

static void test_VarUI8FromUI4 ( void  )
static

Definition at line 2130 of file vartype.c.

2131{
2132 CONVVARS(ULONG);
2133
2135 CONVERT(VarUI8FromUI4, 0xffffffff); EXPECT(0xffffffff);
2136}
HRESULT WINAPI VarUI8FromUI4(ULONG ulIn, ULONG64 *pui64Out)
Definition: vartype.c:2645

Referenced by START_TEST().

◆ void()

static void ( WINAPI pSysFreeString)
static

◆ write_typelib()

static void write_typelib ( int  res_no,
const char filename 
)
static

Definition at line 6099 of file vartype.c.

6100{
6101 DWORD written;
6102 HANDLE file;
6103 HRSRC res;
6104 void *ptr;
6105
6107 ok( file != INVALID_HANDLE_VALUE, "file creation failed\n" );
6108 if (file == INVALID_HANDLE_VALUE) return;
6109 res = FindResourceA( GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(res_no), "TYPELIB" );
6110 ok( res != 0, "couldn't find resource\n" );
6113 ok( written == SizeofResource( GetModuleHandleA(NULL), res ), "couldn't write resource\n" );
6114 CloseHandle( file );
6115}
#define CloseHandle
Definition: compat.h:739
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:740
#define GENERIC_READ
Definition: compat.h:135
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
Definition: rw.c:25
HRSRC WINAPI FindResourceA(HMODULE hModule, LPCSTR name, LPCSTR type)
Definition: res.c:155
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:568
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
unsigned long DWORD
Definition: ntddk_ex.h:95
#define CREATE_ALWAYS
Definition: disk.h:72
#define GENERIC_WRITE
Definition: nt_native.h:90
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
Definition: fci.c:127

Referenced by create_test_typelib().

◆ wtoascii()

static const char * wtoascii ( LPWSTR  lpszIn)
static

Definition at line 3095 of file vartype.c.

3096{
3097 static char buff[256];
3098 WideCharToMultiByte(CP_ACP, 0, lpszIn, -1, buff, sizeof(buff), NULL, NULL);
3099 return buff;
3100}

Referenced by test_VarBstrFromR4(), and test_VarDateChangeTypeEx().

Variable Documentation

◆ BadDateStrings

const char* const BadDateStrings[]
static

Definition at line 2893 of file vartype.c.

Referenced by test_VarDateFromStr().

◆ DummyDispatch_VTable

const IDispatchVtbl DummyDispatch_VTable
static
Initial value:
=
{
}
static ULONG WINAPI DummyDispatch_Release(IDispatch *iface)
Definition: vartype.c:311
static HRESULT WINAPI DummyDispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT cnames, LCID lcid, DISPID *dispid)
Definition: vartype.c:345
static ULONG WINAPI DummyDispatch_AddRef(IDispatch *iface)
Definition: vartype.c:305
static HRESULT WINAPI DummyDispatch_Invoke(IDispatch *iface, DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, UINT *arg_err)
Definition: vartype.c:352
static HRESULT WINAPI DummyDispatch_GetTypeInfo(IDispatch *iface, UINT tinfo, LCID lcid, ITypeInfo **ti)
Definition: vartype.c:339
static HRESULT WINAPI DummyDispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
Definition: vartype.c:333
static HRESULT WINAPI DummyDispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppvObject)
Definition: vartype.c:317

Definition at line 390 of file vartype.c.

Referenced by init_test_dispatch().

◆ has_i8

◆ has_locales

BOOL has_locales
static

◆ hOleaut32

HMODULE hOleaut32
static

Definition at line 60 of file vartype.c.

Referenced by START_TEST().