📄 enumerator_sequence_unittest_.h
字号:
guids[13] = IID_IPersist;
ss_bool_t bSuccess = true;
LPUNKNOWN punkEnum = NULL;
HRESULT hr = winstl::dl_call<HRESULT>(hinst, winstl::fn_desc<STLSOFT_STDCALL_VALUE>(MAKEINTRESOURCE(146)), guids, STLSOFT_NUM_ELEMENTS(guids), reinterpret_cast<void**>(&punkEnum));
if(FAILED(hr))
{
r->report("Failed to create GUID enumerator from Synesis COM server");
bSuccess = false;
}
else
{
// 1. input_cloning_policy
{
r->report("input_cloning_policy", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, input_cloning_policy<IEnumGUID>
, 10
> enumerator_t;
{ for(cs_size_t q = 0; q < enumerator_t::retrievalQuanta; ++q)
{
LPENUMGUID lpenStr;
hr = punkEnum->QueryInterface(IID_IEnumGUID_(), reinterpret_cast<void**>(&lpenStr));
if(FAILED(hr))
{
r->report("Failed to retrieve required enumerator interface from enumerator object", __LINE__);
bSuccess = false;
}
else
{
enumerator_t en(lpenStr, false, q); // Eat the reference
char msg[101];
::sprintf(&msg[0], "Enumerating GUIDs using IEnumGUID; quanta=%u", q);
r->report(msg, -1, NULL);
enumerator_t::iterator b = en.begin();
enumerator_t::iterator e = en.end();
{ for(size_t i = 0; i < STLSOFT_NUM_ELEMENTS(guids); ++i)
{
if(en.end() == b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
else
{
if(*b != guids[i])
{
r->report("Enumerator sequence element contains the wrong value", __LINE__);
bSuccess = false;
}
++b;
}
}}
if(en.end() != b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
}
}}
}
// 2. input_cloning_policy with copying
{
r->report("input_cloning_policy with copying", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, input_cloning_policy<IEnumGUID>
, 10
> enumerator_t;
{ for(cs_size_t q = 0; q < enumerator_t::retrievalQuanta; ++q)
{
LPENUMGUID lpenStr;
hr = punkEnum->QueryInterface(IID_IEnumGUID_(), reinterpret_cast<void**>(&lpenStr));
if(FAILED(hr))
{
r->report("Failed to retrieve required enumerator interface from enumerator object", __LINE__);
bSuccess = false;
}
else
{
enumerator_t en(lpenStr, false, q); // Eat the reference
char msg[101];
::sprintf(&msg[0], "Enumerating GUIDs using IEnumGUID; quanta=%u", q);
r->report(msg, -1, NULL);
enumerator_t::iterator b = en.begin();
enumerator_t::iterator e = en.end();
{ for(size_t i = 0; i < STLSOFT_NUM_ELEMENTS(guids); ++i)
{
enumerator_t::iterator b2 = b;
b = b2;
if(en.end() == b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
else
{
if(*b != guids[i])
{
r->report("Enumerator sequence element contains the wrong value", __LINE__);
bSuccess = false;
}
b2 = b;
++b2;
b = b2;
}
}}
if(en.end() != b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
}
}}
}
// 3. cloneable_cloning_policy
{
r->report("cloneable_cloning_policy", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, cloneable_cloning_policy<IEnumGUID>
, 10
> enumerator_t;
{ for(cs_size_t q = 0; q < enumerator_t::retrievalQuanta; ++q)
{
LPENUMGUID lpenStr;
hr = punkEnum->QueryInterface(IID_IEnumGUID_(), reinterpret_cast<void**>(&lpenStr));
if(FAILED(hr))
{
r->report("Failed to retrieve required enumerator interface from enumerator object", __LINE__);
bSuccess = false;
}
else
{
enumerator_t en(lpenStr, false, q); // Eat the reference
char msg[101];
::sprintf(&msg[0], "Enumerating GUIDs using IEnumGUID; quanta=%u", q);
r->report(msg, -1, NULL);
enumerator_t::iterator b = en.begin();
enumerator_t::iterator e = en.end();
{ for(size_t i = 0; i < STLSOFT_NUM_ELEMENTS(guids); ++i)
{
if(en.end() == b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
else
{
if(*b != guids[i])
{
r->report("Enumerator sequence element contains the wrong value", __LINE__);
bSuccess = false;
}
++b;
}
}}
if(en.end() != b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
}
}}
}
// 4. cloneable_cloning_policy with copying
{
r->report("cloneable_cloning_policy with copying", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, cloneable_cloning_policy<IEnumGUID>
, 10
> enumerator_t;
{ for(cs_size_t q = 0; q < enumerator_t::retrievalQuanta; ++q)
{
LPENUMGUID lpenStr;
hr = punkEnum->QueryInterface(IID_IEnumGUID_(), reinterpret_cast<void**>(&lpenStr));
if(FAILED(hr))
{
r->report("Failed to retrieve required enumerator interface from enumerator object", __LINE__);
bSuccess = false;
}
else
{
enumerator_t en(lpenStr, false, q); // Eat the reference
char msg[101];
::sprintf(&msg[0], "Enumerating GUIDs using IEnumGUID; quanta=%u", q);
r->report(msg, -1, NULL);
enumerator_t::iterator b = en.begin();
enumerator_t::iterator e = en.end();
{ for(size_t i = 0; i < STLSOFT_NUM_ELEMENTS(guids); ++i)
{
enumerator_t::iterator b2 = b;
b = b2;
if(en.end() == b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
else
{
if(*b != guids[i])
{
r->report("Enumerator sequence element contains the wrong value", __LINE__);
bSuccess = false;
}
b2 = b;
++b2;
b = b2;
}
}}
if(en.end() != b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
}
}}
}
// 5. forward_cloning_policy with copying
{
r->report("forward_cloning_policy with copying", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, forward_cloning_policy<IEnumGUID>
, 10
> enumerator_t;
{ for(cs_size_t q = 0; q < enumerator_t::retrievalQuanta; ++q)
{
LPENUMGUID lpenStr;
hr = punkEnum->QueryInterface(IID_IEnumGUID_(), reinterpret_cast<void**>(&lpenStr));
if(FAILED(hr))
{
r->report("Failed to retrieve required enumerator interface from enumerator object", __LINE__);
bSuccess = false;
}
else
{
enumerator_t en(lpenStr, false, q); // Eat the reference
char msg[101];
::sprintf(&msg[0], "Enumerating GUIDs using IEnumGUID; quanta=%u", q);
r->report(msg, -1, NULL);
enumerator_t::iterator b = en.begin();
enumerator_t::iterator e = en.end();
{ for(size_t i = 0; i < STLSOFT_NUM_ELEMENTS(guids); ++i)
{
enumerator_t::iterator b2 = b;
b = b2;
if(en.end() == b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
else
{
if(*b != guids[i])
{
r->report("Enumerator sequence element contains the wrong value", __LINE__);
bSuccess = false;
}
b2 = b;
++b2;
b = b2;
}
}}
if(en.end() != b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
}
}}
}
// 6. forward_cloning_policy with comparison
{
r->report("forward_cloning_policy with comparison", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, forward_cloning_policy<IEnumGUID>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -