Files
CyberPanel/install/openlitespeed-1.4.28/test/util/gpointerlisttest.cpp
2017-12-09 22:30:10 +05:00

107 lines
3.7 KiB
C++

/*****************************************************************************
* Open LiteSpeed is an open source HTTP server. *
* Copyright (C) 2013 - 2015 LiteSpeed Technologies, Inc. *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see http://www.gnu.org/licenses/. *
*****************************************************************************/
#ifdef RUN_TEST
#include <util/gpointerlist.h>
#include "unittest-cpp/UnitTest++.h"
#include <string.h>
static int s_mycmp(const void *p1, const void *p2)
{
return (strcmp(*(char **)p1, *(char **)p2));
}
static int f_mycmp(const void *p1, const void *p2)
{
return (strcmp((char *)p1, (char *)p2));
}
TEST(GPointerListTest_test)
{
int size;
unsigned int capacity;
GPointerList *pglist2;
GPointerList glist3;
GPointerList::const_iterator iter;
static const char *myptrs[] = { "ptr3", "ptr2", "ptr4", "ptr1" };
char *ptrs[sizeof(myptrs) / sizeof(myptrs[0])];
capacity = 10;
pglist2 = new GPointerList(capacity);
CHECK(pglist2 != NULL);
CHECK(pglist2->capacity() == capacity);
capacity *= 3;
pglist2->reserve(capacity);
CHECK(pglist2->capacity() == capacity);
CHECK(pglist2->size() == 0);
pglist2->unsafe_push_back((void **)myptrs, 2);
CHECK(pglist2->size() == 2);
pglist2->unsafe_pop_back((void **)ptrs, 1);
CHECK(pglist2->size() == 1);
CHECK(ptrs[0] == myptrs[1]);
pglist2->clear();
CHECK(pglist2->capacity() == capacity);
CHECK(pglist2->size() == 0);
capacity = 15;
CHECK(glist3.capacity() == 0);
glist3.reserve(capacity);
for (size = 0; size < (int)(sizeof(myptrs) / sizeof(myptrs[0])); ++size)
{
glist3.push_back((void *)myptrs[size]);
pglist2->push_back((void *)myptrs[size]);
}
CHECK(glist3.capacity() == capacity);
CHECK(glist3.size() == size);
glist3.reserve(size);
CHECK(glist3.capacity() == (unsigned)size);
CHECK(glist3.size() == size);
CHECK(pglist2->size() == size);
--size;
glist3.pop_front((void **)ptrs, size);
while (--size >= 0)
CHECK(ptrs[size] == myptrs[size]);
glist3.push_back(*pglist2);
size = sizeof(myptrs) / sizeof(myptrs[0]) + 1;
CHECK(glist3.size() == size);
glist3.push_back((void *)myptrs[0]);
++size;
CHECK(glist3.capacity() >= (unsigned)size);
glist3.pop_front((void **)ptrs, 1);
--size;
CHECK(glist3.pop_back() == (void *)myptrs[0]);
--size;
CHECK(glist3.size() == size);
CHECK(sizeof(myptrs) / sizeof(myptrs[0]) == size);
glist3.sort(s_mycmp);
iter = glist3.bfind((const void *)myptrs[0], f_mycmp);
CHECK(*(const char **)iter == myptrs[0]);
glist3.erase((GPointerList::iterator)iter);
--size;
CHECK(glist3.size() == size);
delete pglist2;
}
#endif