-
Notifications
You must be signed in to change notification settings - Fork 0
/
hamt-test.cpp
82 lines (60 loc) · 1.74 KB
/
hamt-test.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <gtest/gtest.h>
#include <bitset>
#include "hamt.hpp"
static const auto show = [](auto indices) {
std::size_t shift = 0;
for(auto i: indices) {
std::cout << i << "/" << (i << shift) << ", ";
if(shift)
shift += 5;
else
shift += 4;
}
std::cout << std::endl;
};
TEST(hamt, iter) {
const std::size_t indices[] = {0, 4, 15, 16, 24, 31};
const double values[] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
std::size_t mask = 0;
for(auto i: indices) {
mask |= 1ul << i;
}
sparse::storage<double, 32, 6> test(
mask, values[0], values[1], values[2], values[3], values[4], values[5]);
const std::size_t* ri = indices;
const double* rj = values;
test.iter(0, [&](std::size_t i, double j) {
// std::cout << i << ": " << j << std::endl;
ASSERT_EQ(i, *ri++);
ASSERT_EQ(j, *rj++);
});
hamt::array<double, 5, 4> x;
x = x.set(1, 1.0);
x = x.set(2, 2.0);
x = x.set(16, 3.0);
x = x.set(32, 32.0);
x = x.set(47, 33.0);
x = x.set(48, 33.0);
x = x.set(100000, 10.0);
using traits = hamt::traits<5, 4>;
std::clog << std::bitset<64>(traits::masks[0]) << std::endl;
std::clog << std::bitset<64>(traits::masks[1]) << std::endl;
std::clog << std::bitset<64>(traits::masks[2]) << std::endl;
show(traits::split(47, traits::level_indices{}));
show(traits::split(48, traits::level_indices{}));
std::clog << x.get(48) << std::endl;
x.iter([](auto i, auto j) {
std::clog << i << " " << j << std::endl;
});
}
TEST(hamt, quirks) {
hamt::array<double> x;
using traits = hamt::traits<5, 4>;
const std::size_t keys[] = {105965433143312, 105965433145616};
for(auto key: keys) {
x = x.set(key, 1.0);
}
for(auto key: keys) {
std::clog << x.get(key) << std::endl;
}
}