123 lines
3.7 KiB
C++
123 lines
3.7 KiB
C++
// Copyright (C) 2006 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/reference_counter.h>
|
|
#include "tester.h"
|
|
|
|
namespace
|
|
{
|
|
|
|
using namespace test;
|
|
using namespace std;
|
|
using namespace dlib;
|
|
|
|
logger dlog("test.reference_counter");
|
|
|
|
template <
|
|
typename ref_counter
|
|
>
|
|
void reference_counter_test (
|
|
)
|
|
/*!
|
|
requires
|
|
- ref_counter is an implementation of reference_counter/reference_counter_kernel_abstract.h
|
|
and is instantiated to contain an int
|
|
ensures
|
|
- runs tests on reference_counter for compliance with the specs
|
|
!*/
|
|
{
|
|
|
|
ref_counter a, b, c;
|
|
|
|
for (long i = 0; i < 10; ++i)
|
|
{
|
|
print_spinner();
|
|
for (long j = 0; j < 10000; ++j)
|
|
{
|
|
a.modify() = j;
|
|
b.modify() = j+1;
|
|
c.modify() = j+2;
|
|
DLIB_ASSERT(a.access() == j,"");
|
|
DLIB_ASSERT(b.access() == j+1,"");
|
|
DLIB_ASSERT(c.access() == j+2,"");
|
|
DLIB_ASSERT(a.modify() == j,"");
|
|
DLIB_ASSERT(b.modify() == j+1,"");
|
|
DLIB_ASSERT(c.modify() == j+2,"");
|
|
DLIB_ASSERT(a.access() == j,"");
|
|
DLIB_ASSERT(b.access() == j+1,"");
|
|
DLIB_ASSERT(c.access() == j+2,"");
|
|
DLIB_ASSERT(a.modify() == j,"");
|
|
DLIB_ASSERT(b.modify() == j+1,"");
|
|
DLIB_ASSERT(c.modify() == j+2,"");
|
|
a = c;
|
|
DLIB_ASSERT(a.access() == j+2,"");
|
|
DLIB_ASSERT(b.access() == j+1,"");
|
|
DLIB_ASSERT(c.access() == j+2,"");
|
|
DLIB_ASSERT(a.modify() == j+2,"");
|
|
DLIB_ASSERT(b.modify() == j+1,"");
|
|
DLIB_ASSERT(c.modify() == j+2,"");
|
|
DLIB_ASSERT(a.access() == j+2,"");
|
|
DLIB_ASSERT(b.access() == j+1,"");
|
|
DLIB_ASSERT(c.access() == j+2,"");
|
|
DLIB_ASSERT(a.modify() == j+2,"");
|
|
DLIB_ASSERT(b.modify() == j+1,"");
|
|
DLIB_ASSERT(c.modify() == j+2,"");
|
|
|
|
a = b = c;
|
|
DLIB_ASSERT(a.access() == b.access(),"");
|
|
DLIB_ASSERT(a.access() == c.access(),"");
|
|
DLIB_ASSERT(c.access() == b.access(),"");
|
|
a.modify() = j;
|
|
DLIB_ASSERT(a.access() == j,"");
|
|
DLIB_ASSERT(a.access() != b.access(),"");
|
|
DLIB_ASSERT(a.access() != c.access(),"");
|
|
DLIB_ASSERT(c.access() == b.access(),"");
|
|
DLIB_ASSERT(c.access() == j+2,"");
|
|
DLIB_ASSERT(b.access() == j+2,"");
|
|
|
|
DLIB_ASSERT(a.access() == j,"");
|
|
a = a;
|
|
DLIB_ASSERT(a.access() == j,"");
|
|
c = c;
|
|
DLIB_ASSERT(c.access() == j+2,"");
|
|
DLIB_ASSERT(b.access() == j+2,"");
|
|
swap(a,c);
|
|
DLIB_ASSERT(a.access() == j+2,"");
|
|
DLIB_ASSERT(c.access() == j,"");
|
|
DLIB_ASSERT(b.access() == j+2,"");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class reference_counter_tester : public tester
|
|
{
|
|
public:
|
|
reference_counter_tester (
|
|
) :
|
|
tester ("test_reference_counter",
|
|
"Runs tests on the reference_counter component.")
|
|
{}
|
|
|
|
void perform_test (
|
|
)
|
|
{
|
|
dlog << LINFO << "testing kernel_1a";
|
|
reference_counter_test<reference_counter<int>::kernel_1a> ();
|
|
}
|
|
} a;
|
|
|
|
}
|
|
|
|
|