General Purpose library for Freestanding C++ and POSIX systems
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 

113 linhas
2.0 KiB

#include "test_scaffold.h"
#include "gp/array.hpp"
#include "gp/allocator/buddy.hpp"
#include "gp/allocator/dummy.hpp"
#include <thread>
#include <chrono>
#include <set>
#include <numeric>
#include <iomanip>
#include <fstream>
struct arraysum_test : public test_scaffold {
arraysum_test() {
name = __FILE__ ":1";
}
virtual int run() {
gp::array<uint32_t, 16> test;
for(auto& elem : test)
{
elem = 12;
}
return std::accumulate(test.begin(), test.end(), 0) != 12*test.size();
}
};
append_test dummy_sd45uisd3(new arraysum_test{});
struct optional_test : public test_scaffold {
optional_test() {
name = __FILE__ ":1";
}
virtual int run() {
int res = 0;
{
gp::optional<uint32_t> test;
if(test.has_value())
{
res++;
}
test = 12;
if(test.has_value())
{
if(test.value()!=12)
{
res++;
}
}
else
{
res++;
}
}
{
gp::optional<std::ifstream> test;
if(test.has_value())
{
res++;
}
test = std::ifstream("/proc/cpuinfo");
if(!test.has_value())
{
res++;
}
}
return res;
}
};
append_test dummy_mlyusisd3(new optional_test{});
struct buddy_test : public test_scaffold {
buddy_test() {
name = __FILE__ ":3";
}
gp::array<char, 4096> store;
virtual int run() {
int res = 0;
{
gp::buddy<gp::dummy_allocator, gp::math::msb<uint64_t>(4096)> bud{&*store.begin(), store.size()};
std::set<void*> ptr_set;
for(int i = 0; i < 4096 / 8; i++)
{
void* v = bud.allocate(8);
if(v == nullptr) throw gp::runtime_error("allocation failed");
ptr_set.insert(v);
}
std::cout << ptr_set.size() << "//" << ptr_set.count(nullptr);
if(ptr_set.count(nullptr)!=0 || ptr_set.size()!=(4096/8)) throw gp::runtime_error("some allocations failed");
res++;
res += nullptr == bud.allocate(8);
if(nullptr != bud.allocate(8)) throw gp::runtime_error("allocation succeeded, failure was expected");
++res;
}
return res;
}
};
append_test dummy_654sisd3(new buddy_test{});