greenplumn CSyncListTest 源码
greenplumn CSyncListTest 代码
文件路径:/src/backend/gporca/libgpos/server/src/unittest/gpos/common/CSyncListTest.cpp
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2011 EMC Corp.
//
// @filename:
// CSyncListTest.cpp
//
// @doc:
// Tests for CSyncList
//---------------------------------------------------------------------------
#include "unittest/gpos/common/CSyncListTest.h"
#include "gpos/base.h"
#include "gpos/error/CAutoTrace.h"
#include "gpos/memory/CAutoMemoryPool.h"
#include "gpos/task/CAutoTaskProxy.h"
#include "gpos/task/CWorkerPoolManager.h"
#include "gpos/test/CUnittest.h"
#define GPOS_SLIST_SIZE 10
using namespace gpos;
//---------------------------------------------------------------------------
// @function:
// CSyncListTest::EresUnittest
//
// @doc:
// Unittest for sync list
//
//---------------------------------------------------------------------------
GPOS_RESULT
CSyncListTest::EresUnittest()
{
CUnittest rgut[] = {GPOS_UNITTEST_FUNC(CSyncListTest::EresUnittest_Basics)};
return CUnittest::EresExecute(rgut, GPOS_ARRAY_SIZE(rgut));
}
//---------------------------------------------------------------------------
// @function:
// CSyncListTest::EresUnittest_Basics
//
// @doc:
// Various sync list operations
//
//---------------------------------------------------------------------------
GPOS_RESULT
CSyncListTest::EresUnittest_Basics()
{
CSyncList<SElem> list;
list.Init(GPOS_OFFSET(SElem, m_link));
SElem rgelem[GPOS_SLIST_SIZE];
// insert all elements
for (ULONG i = 0; i < GPOS_ARRAY_SIZE(rgelem); i++)
{
list.Push(&rgelem[i]);
GPOS_ASSERT(GPOS_OK == list.Find(&rgelem[i]));
}
#ifdef GPOS_DEBUG
// scope for auto trace
{
CAutoMemoryPool amp;
CMemoryPool *mp = amp.Pmp();
CAutoTrace trace(mp);
IOstream &os(trace.Os());
os << GPOS_WSZ_LIT("Sync list contents:") << std::endl;
list.OsPrint(os);
}
#endif // GPOS_DEBUG
// pop elements until empty
for (ULONG i = 0; i < GPOS_ARRAY_SIZE(rgelem); i++)
{
SElem *pe GPOS_ASSERTS_ONLY = list.Pop();
GPOS_ASSERT(pe == &rgelem[GPOS_ARRAY_SIZE(rgelem) - i - 1]);
}
GPOS_ASSERT(nullptr == list.Pop());
// insert all elements in reverse order
for (ULONG i = GPOS_ARRAY_SIZE(rgelem); i > 0; i--)
{
list.Push(&rgelem[i - 1]);
GPOS_ASSERT(GPOS_OK == list.Find(&rgelem[i - 1]));
}
// pop elements until empty
for (ULONG i = 0; i < GPOS_ARRAY_SIZE(rgelem); i++)
{
SElem *pe GPOS_ASSERTS_ONLY = list.Pop();
GPOS_ASSERT(pe == &rgelem[i]);
}
GPOS_ASSERT(nullptr == list.Pop());
return GPOS_OK;
}
// EOF
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦