File: marked_ptr_test.cpp

package info (click to toggle)
xenium 0.0.2%2Bds-10
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,152 kB
  • sloc: cpp: 12,299; makefile: 20
file content (52 lines) | stat: -rw-r--r-- 960 bytes parent folder | download | duplicates (3)
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
#include <xenium/marked_ptr.hpp>

#include <gtest/gtest.h>

namespace {
 
struct Foo {
  int x;
  [[maybe_unused]] static constexpr int number_of_mark_bits = 0;
};

TEST(marked_ptr, get_returns_correct_pointer)
{
  Foo f;
  xenium::marked_ptr<Foo, 2> p(&f, 3);
  EXPECT_EQ(&f, p.get());

  xenium::marked_ptr<Foo, 18> p2(&f, (1 << 18) - 1);
  EXPECT_EQ(&f, p2.get());
}

TEST(marked_ptr, mark_returns_correct_value) {
  Foo f;
  
  xenium::marked_ptr<Foo, 2> p(&f, 3);
  EXPECT_EQ(3, p.mark());

  auto mark = (1 << 18) - 1;
  xenium::marked_ptr<Foo, 18> p2(&f, mark);
  EXPECT_EQ(mark, p2.mark());
}

TEST(marked_ptr, deref_works_correctly)
{
  Foo f;
  xenium::marked_ptr<Foo, 2> p(&f, 3);
  p->x = 42;
  EXPECT_EQ(42, f.x);

  (*p).x = 43;
  EXPECT_EQ(43, f.x);
}

TEST(marked_ptr, reset_sets_ptr_to_null)
{
  Foo f;
  xenium::marked_ptr<Foo, 2> p(&f, 3);
  p.reset();
  EXPECT_EQ(nullptr, p.get());
}

}