Skip to content
This repository was archived by the owner on Mar 22, 2023. It is now read-only.

Commit d58afc4

Browse files
committed
tests: fix radix_tx_abort test
Fix value() function which was creating an empty string (wrong input parameter) and add testcases for basic_inline_string<uint8_t> and basic_inline_string<wchar_t> as value types.
1 parent aff4ddb commit d58afc4

File tree

3 files changed

+39
-17
lines changed

3 files changed

+39
-17
lines changed

tests/radix/radix.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ using container_int_string =
2525
nvobjex::radix_tree<unsigned, nvobjex::inline_string>;
2626

2727
using container_inline_s_wchart = nvobjex::radix_tree<nvobjex::basic_inline_string<wchar_t>, nvobj::p<unsigned>>;
28-
using container_inline_s_u8t = nvobjex::radix_tree<nvobjex::basic_inline_string<uint8_t>, nvobj::p<unsigned>>;
28+
using container_inline_s_wchart_wchart = nvobjex::radix_tree<nvobjex::basic_inline_string<wchar_t>, nvobjex::basic_inline_string<wchar_t>>;
29+
using container_inline_s_u8t = nvobjex::radix_tree<nvobjex::basic_inline_string<uint8_t>, nvobjex::basic_inline_string<uint8_t>>;
2930

3031
struct root {
3132
nvobj::persistent_ptr<container_int> radix_int;
@@ -35,6 +36,7 @@ struct root {
3536
nvobj::persistent_ptr<container_int_string> radix_int_str;
3637

3738
nvobj::persistent_ptr<container_inline_s_wchart> radix_inline_s_wchart;
39+
nvobj::persistent_ptr<container_inline_s_wchart_wchart> radix_inline_s_wchart_wchart;
3840
nvobj::persistent_ptr<container_inline_s_u8t> radix_inline_s_u8t;
3941
};
4042

@@ -60,7 +62,7 @@ value(unsigned v, int repeats = 1)
6062
auto s = std::basic_string<CharT>{};
6163
for (int i = 0; i < repeats; i++) {
6264
auto str = std::to_string(v);
63-
s += std::basic_string<CharT>(s.begin(), s.end());
65+
s += std::basic_string<CharT>(str.begin(), str.end());
6466
}
6567

6668
return s;
@@ -100,7 +102,7 @@ template <typename CharT, typename Traits>
100102
bool
101103
operator==(pmem::obj::experimental::basic_inline_string<CharT, Traits> &lhs, const std::basic_string<CharT, Traits> &rhs)
102104
{
103-
return pmem::obj::basic_string_view<CharT, Traits>(lhs.data()).compare(rhs) == 0;
105+
return pmem::obj::basic_string_view<CharT, Traits>(lhs.data(), lhs.size()).compare(rhs) == 0;
104106
}
105107

106108
template <typename Container, typename K, typename F>

tests/radix/radix_basic.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -809,31 +809,35 @@ test_inline_string_u8t_key(nvobj::pool<root> &pop)
809809

810810
for (unsigned i = 0; i < 10; i++) {
811811
auto key = std::basic_string<uint8_t>(i + 10, 99);
812-
auto ret = m.try_emplace(key, i);
812+
auto ret = m.try_emplace(
813+
key, std::basic_string<uint8_t>({uint8_t(i)}));
813814
UT_ASSERT(ret.second);
814815
UT_ASSERT(key.compare(ret.first->key().data()) == 0);
815-
UT_ASSERT(ret.first->value() == i);
816+
UT_ASSERT(ret.first->value() ==
817+
std::basic_string<uint8_t>({uint8_t(i)}));
816818
UT_ASSERT(m.size() == i + 1);
817819
}
818820

819821
for (unsigned i = 0; i < 10; i++) {
820822
auto key = std::basic_string<uint8_t>(i + 10, 99);
821-
auto ret = m.insert_or_assign(key, i + 1);
823+
auto ret = m.insert_or_assign(
824+
key, std::basic_string<uint8_t>({uint8_t(i + 1)}));
822825
UT_ASSERT(!ret.second);
823826
UT_ASSERT(key.compare(ret.first->key().data()) == 0);
824-
UT_ASSERT(ret.first->value() == i + 1);
827+
UT_ASSERT(ret.first->value() ==
828+
std::basic_string<uint8_t>({uint8_t(i + 1)}));
825829
UT_ASSERT(m.size() == 10);
826830
}
827831

828832
auto key = std::basic_string<uint8_t>(15, 99);
829833
auto it = m.find(key);
830834
UT_ASSERT(key.compare(it->key().data()) == 0);
831-
UT_ASSERT(it->value() == 6);
835+
UT_ASSERT(it->value() == std::basic_string<uint8_t>({uint8_t(6)}));
832836

833837
it = m.erase(it);
834838
UT_ASSERT(std::basic_string<uint8_t>(16, 99).compare(
835839
it->key().data()) == 0);
836-
UT_ASSERT(it->value() == 7);
840+
UT_ASSERT(it->value() == std::basic_string<uint8_t>({uint8_t(7)}));
837841

838842
nvobj::transaction::run(pop, [&] {
839843
nvobj::delete_persistent<container_inline_s_u8t>(

tests/radix/radix_tx_abort.cpp

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,8 @@ test_assign(nvobj::pool<root> &pop, nvobj::persistent_ptr<Container> &ptr)
247247

248248
/* Iterators and references for inline_string are not
249249
* stable. */
250-
if (std::is_same<typename Container::mapped_type,
251-
nvobjex::inline_string>::value) {
250+
if (pmem::detail::is_inline_string<
251+
typename Container::mapped_type>::value) {
252252
it = ptr->find(key<Container>(test_key));
253253
}
254254

@@ -303,8 +303,8 @@ test_assign_internal_leaf(nvobj::pool<root> &pop,
303303

304304
/* Iterators and references for inline_string are not
305305
* stable. */
306-
if (std::is_same<typename Container::mapped_type,
307-
nvobjex::inline_string>::value) {
306+
if (pmem::detail::is_inline_string<
307+
typename Container::mapped_type>::value) {
308308
it = ptr->find("");
309309
}
310310

@@ -322,8 +322,8 @@ test_assign_internal_leaf(nvobj::pool<root> &pop,
322322

323323
/* Iterators and references for inline_string are not
324324
* stable. */
325-
if (std::is_same<typename Container::mapped_type,
326-
nvobjex::inline_string>::value) {
325+
if (pmem::detail::is_inline_string<
326+
typename Container::mapped_type>::value) {
327327
it = ptr->find("aaa");
328328
}
329329

@@ -366,8 +366,8 @@ test_assign_root(nvobj::pool<root> &pop, nvobj::persistent_ptr<Container> &ptr)
366366

367367
/* Iterators and references for inline_string are not
368368
* stable. */
369-
if (std::is_same<typename Container::mapped_type,
370-
nvobjex::inline_string>::value) {
369+
if (pmem::detail::is_inline_string<
370+
typename Container::mapped_type>::value) {
371371
it = ptr->find(key<Container>(0));
372372
}
373373

@@ -562,6 +562,22 @@ test(int argc, char *argv[])
562562
test_try_emplace<container_inline_s_wchart, 1>(
563563
pop, pop.root()->radix_inline_s_wchart);
564564

565+
test_emplace(pop, pop.root()->radix_inline_s_wchart_wchart);
566+
test_assign<container_inline_s_wchart_wchart, 1>(
567+
pop, pop.root()->radix_inline_s_wchart_wchart);
568+
test_assign<container_inline_s_wchart_wchart, 1024>(
569+
pop, pop.root()->radix_inline_s_wchart_wchart);
570+
test_assign_root<container_inline_s_wchart_wchart, 1>(
571+
pop, pop.root()->radix_inline_s_wchart_wchart);
572+
test_assign_root<container_inline_s_wchart_wchart, 1024>(
573+
pop, pop.root()->radix_inline_s_wchart_wchart);
574+
test_erase<container_inline_s_wchart_wchart, 1024>(
575+
pop, pop.root()->radix_inline_s_wchart_wchart);
576+
test_insert_or_assign<container_inline_s_wchart_wchart, 1>(
577+
pop, pop.root()->radix_inline_s_wchart_wchart);
578+
test_try_emplace<container_inline_s_wchart_wchart, 1>(
579+
pop, pop.root()->radix_inline_s_wchart_wchart);
580+
565581
pop.close();
566582
}
567583

0 commit comments

Comments
 (0)