mirror of
https://gitcode.com/gh_mirrors/ope/OpenFace.git
synced 2026-05-14 19:27:56 +00:00
207 lines
5.1 KiB
C++
207 lines
5.1 KiB
C++
// Copyright (C) 2005 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
|
|
|
|
#include <sstream>
|
|
#include <string>
|
|
#include <cstdlib>
|
|
#include <ctime>
|
|
|
|
#include <dlib/queue.h>
|
|
#include <dlib/static_set.h>
|
|
#include <dlib/set.h>
|
|
#include "tester.h"
|
|
|
|
namespace
|
|
{
|
|
|
|
using namespace test;
|
|
using namespace std;
|
|
using namespace dlib;
|
|
|
|
logger dlog("test.static_set");
|
|
|
|
template <
|
|
typename set
|
|
>
|
|
void static_set_kernel_test (
|
|
)
|
|
/*!
|
|
requires
|
|
- set is an implementation of static_set/static_set_kernel_abstract.h and
|
|
is instantiated to hold ints
|
|
ensures
|
|
- runs tests on set for compliance with the specs
|
|
!*/
|
|
{
|
|
|
|
print_spinner();
|
|
|
|
srand(static_cast<unsigned int>(time(0)));
|
|
|
|
typedef queue<int>::kernel_2a_c queue_of_int;
|
|
typedef dlib::set<int>::kernel_1a_c set_of_int;
|
|
|
|
queue_of_int q, qb, qc;
|
|
set_of_int ds;
|
|
|
|
set S;
|
|
S.load(ds);
|
|
|
|
for (int k = 1; k < 1000; ++k)
|
|
{
|
|
q.clear();
|
|
qb.clear();
|
|
qc.clear();
|
|
unsigned long num = k;
|
|
for (unsigned long i = 0; i < num; ++i)
|
|
{
|
|
int a = ::rand()&0xFF;
|
|
int b = a;
|
|
int c = a;
|
|
q.enqueue(a);
|
|
qb.enqueue(b);
|
|
qc.enqueue(c);
|
|
}
|
|
|
|
|
|
|
|
set s;
|
|
|
|
DLIB_TEST(s.size() == 0);
|
|
DLIB_TEST(s.at_start());
|
|
DLIB_TEST(s.current_element_valid() == false);
|
|
DLIB_TEST(s.move_next() == false);
|
|
DLIB_TEST(s.current_element_valid() == false);
|
|
DLIB_TEST(s.at_start() == false);
|
|
|
|
s.load(q);
|
|
DLIB_TEST(s.at_start());
|
|
set se;
|
|
se.load(q);
|
|
|
|
DLIB_TEST(se.size() == 0);
|
|
DLIB_TEST(se.at_start() == true);
|
|
DLIB_TEST(se.current_element_valid() == false);
|
|
DLIB_TEST(se.move_next() == false);
|
|
DLIB_TEST(se.at_start() == false);
|
|
DLIB_TEST(se.current_element_valid() == false);
|
|
|
|
|
|
DLIB_TEST(s.size() == qb.size());
|
|
DLIB_TEST(s.at_start() == true);
|
|
DLIB_TEST(s.current_element_valid() == false);
|
|
DLIB_TEST(s.move_next() == true);
|
|
DLIB_TEST(s.at_start() == false);
|
|
DLIB_TEST(s.current_element_valid() == true);
|
|
s.reset();
|
|
se.reset();
|
|
|
|
swap(se,s);
|
|
|
|
DLIB_TEST(s.size() == 0);
|
|
DLIB_TEST(s.at_start() == true);
|
|
DLIB_TEST(s.current_element_valid() == false);
|
|
DLIB_TEST(s.move_next() == false);
|
|
DLIB_TEST(s.at_start() == false);
|
|
DLIB_TEST(s.current_element_valid() == false);
|
|
|
|
DLIB_TEST(se.size() == qb.size());
|
|
DLIB_TEST(se.at_start() == true);
|
|
DLIB_TEST(se.current_element_valid() == false);
|
|
DLIB_TEST(se.move_next() == true);
|
|
DLIB_TEST(se.at_start() == false);
|
|
DLIB_TEST(se.current_element_valid() == true);
|
|
s.reset();
|
|
se.reset();
|
|
|
|
swap(se,s);
|
|
|
|
|
|
|
|
int last = 0;
|
|
while (s.move_next())
|
|
{
|
|
DLIB_TEST(last <= s.element());
|
|
last = s.element();
|
|
}
|
|
|
|
|
|
|
|
while (qb.move_next())
|
|
{
|
|
int a;
|
|
qb.dequeue(a);
|
|
DLIB_TEST(s.is_member(a));
|
|
DLIB_TEST(!se.is_member(a));
|
|
|
|
// make sure is_member() doesn't hang
|
|
for (int l = 0; l < 100; ++l)
|
|
{
|
|
int a = ::rand();
|
|
s.is_member(a);
|
|
}
|
|
}
|
|
|
|
swap(s,se);
|
|
|
|
// serialize the state of se, then clear se, then
|
|
// load the state back into se.
|
|
ostringstream sout;
|
|
serialize(se,sout);
|
|
DLIB_TEST(se.at_start() == true);
|
|
istringstream sin(sout.str());
|
|
se.clear();
|
|
deserialize(se,sin);
|
|
DLIB_TEST(se.at_start() == true);
|
|
|
|
|
|
last = 0;
|
|
while (se.move_next())
|
|
{
|
|
DLIB_TEST(last <= se.element());
|
|
last = se.element();
|
|
}
|
|
|
|
|
|
DLIB_TEST(s.size() == 0);
|
|
DLIB_TEST(se.size() == qc.size());
|
|
|
|
while (qc.move_next())
|
|
{
|
|
int a;
|
|
qc.dequeue(a);
|
|
DLIB_TEST(se.is_member(a));
|
|
DLIB_TEST(!s.is_member(a));
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class static_set_tester : public tester
|
|
{
|
|
public:
|
|
static_set_tester (
|
|
) :
|
|
tester ("test_static_set",
|
|
"Runs tests on the static_set component.")
|
|
{}
|
|
|
|
void perform_test (
|
|
)
|
|
{
|
|
dlog << LINFO << "testing kernel_1a";
|
|
static_set_kernel_test<static_set<int>::kernel_1a> ();
|
|
dlog << LINFO << "testing kernel_1a_c";
|
|
static_set_kernel_test<static_set<int>::kernel_1a_c>();
|
|
}
|
|
} a;
|
|
|
|
}
|
|
|