From b5400f9a3542aef31a63b8d797e445253d1ff17b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Thu, 30 Mar 2023 13:08:52 +0300 Subject: [PATCH] =?UTF-8?q?mdbx-test:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=B8=D0=BD=D0=B8-?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20MainDB=20=D1=81=20?= =?UTF-8?q?=D1=86=D0=B5=D0=BB=D0=BE=D1=87=D0=B8=D1=81=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=BC=D0=B8=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/CMakeLists.txt | 10 +++++++ test/extra/maindb_ordinal.c++ | 55 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 test/extra/maindb_ordinal.c++ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 3a80eb67..65dddb72 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -71,6 +71,16 @@ if(UNIX AND NOT SUBPROJECT) add_executable(test_extra_upsert_alldups extra/upsert_alldups.c) target_include_directories(test_extra_upsert_alldups PRIVATE "${PROJECT_SOURCE_DIR}") target_link_libraries(test_extra_upsert_alldups ${TOOL_MDBX_LIB}) + + if(MDBX_BUILD_CXX) + add_executable(test_extra_maindb_ordinal extra/maindb_ordinal.c++) + target_include_directories(test_extra_maindb_ordinal PRIVATE "${PROJECT_SOURCE_DIR}") + target_link_libraries(test_extra_maindb_ordinal ${TOOL_MDBX_LIB}) + if(MDBX_CXX_STANDARD) + set_target_properties(test_extra_maindb_ordinal PROPERTIES + CXX_STANDARD ${MDBX_CXX_STANDARD} CXX_STANDARD_REQUIRED ON) + endif() + endif() endif() ################################################################################ diff --git a/test/extra/maindb_ordinal.c++ b/test/extra/maindb_ordinal.c++ new file mode 100644 index 00000000..f61d779e --- /dev/null +++ b/test/extra/maindb_ordinal.c++ @@ -0,0 +1,55 @@ +#include "mdbx.h++" +#include +#include + +int main(int argc, const char *argv[]) { + (void)argc; + (void)argv; + + unlink("." MDBX_DATANAME); + unlink("." MDBX_LOCKNAME); + + mdbx::env_managed env(".", mdbx::env_managed::create_parameters(), + mdbx::env::operate_parameters()); + + using buffer = + mdbx::buffer; + auto txn = env.start_write(); + auto map = txn.create_map(nullptr, mdbx::key_mode::ordinal, + mdbx::value_mode::single); +#if 0 /* workaround */ + txn.commit(); + env.close(); + env = mdbx::env_managed(".", mdbx::env_managed::create_parameters(), + mdbx::env::operate_parameters()); + txn = env.start_write(); +#endif + + txn.insert(map, buffer::key_from_u64(UINT64_C(8) << 8 * 0), buffer("a")); + txn.insert(map, buffer::key_from_u64(UINT64_C(7) << 8 * 1), buffer("b")); + txn.insert(map, buffer::key_from_u64(UINT64_C(6) << 8 * 2), buffer("c")); + txn.insert(map, buffer::key_from_u64(UINT64_C(5) << 8 * 3), buffer("d")); + txn.insert(map, buffer::key_from_u64(UINT64_C(4) << 8 * 4), buffer("e")); + txn.insert(map, buffer::key_from_u64(UINT64_C(3) << 8 * 5), buffer("f")); + txn.insert(map, buffer::key_from_u64(UINT64_C(2) << 8 * 6), buffer("g")); + txn.insert(map, buffer::key_from_u64(UINT64_C(1) << 8 * 7), buffer("h")); + txn.commit(); + + txn = env.start_read(); + auto cursor = txn.open_cursor(map); + if (cursor.to_first().value.string_view() == "a" && + cursor.to_next().value.string_view() == "b" && + cursor.to_next().value.string_view() == "c" && + cursor.to_next().value.string_view() == "d" && + cursor.to_next().value.string_view() == "e" && + cursor.to_next().value.string_view() == "f" && + cursor.to_next().value.string_view() == "g" && + cursor.to_next().value.string_view() == "h" && + !cursor.to_next(false).done && cursor.eof()) { + std::cout << "OK\n"; + return 0; + } + + std::cerr << "Fail\n"; + return EXIT_FAILURE; +}