diff options
| author | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
|---|---|---|
| committer | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
| commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
| tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/containers/comptrie/loader | |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/containers/comptrie/loader')
| -rw-r--r-- | library/cpp/containers/comptrie/loader/loader.cpp | 1 | ||||
| -rw-r--r-- | library/cpp/containers/comptrie/loader/loader.h | 22 | ||||
| -rw-r--r-- | library/cpp/containers/comptrie/loader/loader_ut.cpp | 30 | ||||
| -rw-r--r-- | library/cpp/containers/comptrie/loader/ut/dummy.trie | bin | 0 -> 25 bytes | |||
| -rw-r--r-- | library/cpp/containers/comptrie/loader/ut/ya.make | 18 | ||||
| -rw-r--r-- | library/cpp/containers/comptrie/loader/ya.make | 15 |
6 files changed, 86 insertions, 0 deletions
diff --git a/library/cpp/containers/comptrie/loader/loader.cpp b/library/cpp/containers/comptrie/loader/loader.cpp new file mode 100644 index 00000000000..4811e9d5216 --- /dev/null +++ b/library/cpp/containers/comptrie/loader/loader.cpp @@ -0,0 +1 @@ +#include "loader.h" diff --git a/library/cpp/containers/comptrie/loader/loader.h b/library/cpp/containers/comptrie/loader/loader.h new file mode 100644 index 00000000000..ee10e9b451e --- /dev/null +++ b/library/cpp/containers/comptrie/loader/loader.h @@ -0,0 +1,22 @@ +#pragma once + +#include <library/cpp/archive/yarchive.h> +#include <util/generic/string.h> +#include <util/generic/ptr.h> +#include <util/generic/yexception.h> +#include <util/memory/blob.h> + +template <class TrieType, size_t N> +TrieType LoadTrieFromArchive(const TString& key, + const unsigned char (&data)[N], + bool ignoreErrors = false) { + TArchiveReader archive(TBlob::NoCopy(data, sizeof(data))); + if (archive.Has(key)) { + TAutoPtr<IInputStream> trie = archive.ObjectByKey(key); + return TrieType(TBlob::FromStream(*trie)); + } + if (!ignoreErrors) { + ythrow yexception() << "Resource " << key << " not found"; + } + return TrieType(); +} diff --git a/library/cpp/containers/comptrie/loader/loader_ut.cpp b/library/cpp/containers/comptrie/loader/loader_ut.cpp new file mode 100644 index 00000000000..345063a31e4 --- /dev/null +++ b/library/cpp/containers/comptrie/loader/loader_ut.cpp @@ -0,0 +1,30 @@ +#include <library/cpp/testing/unittest/registar.h> +#include <library/cpp/containers/comptrie/comptrie.h> +#include <library/cpp/containers/comptrie/loader/loader.h> + +using TDummyTrie = TCompactTrie<char, i32>; + +namespace { + const unsigned char DATA[] = { +#include "data.inc" + }; +} + +Y_UNIT_TEST_SUITE(ArchiveLoaderTests) { + Y_UNIT_TEST(BaseTest) { + TDummyTrie trie = LoadTrieFromArchive<TDummyTrie>("/dummy.trie", DATA, true); + UNIT_ASSERT_EQUAL(trie.Size(), 3); + + const TString TrieKyes[3] = { + "zero", "one", "two"}; + i32 val = -1; + for (i32 i = 0; i < 3; ++i) { + UNIT_ASSERT(trie.Find(TrieKyes[i].data(), TrieKyes[i].size(), &val)); + UNIT_ASSERT_EQUAL(i, val); + } + + UNIT_CHECK_GENERATED_EXCEPTION( + LoadTrieFromArchive<TDummyTrie>("/noname.trie", DATA), + yexception); + } +} diff --git a/library/cpp/containers/comptrie/loader/ut/dummy.trie b/library/cpp/containers/comptrie/loader/ut/dummy.trie Binary files differnew file mode 100644 index 00000000000..4af18add2ff --- /dev/null +++ b/library/cpp/containers/comptrie/loader/ut/dummy.trie diff --git a/library/cpp/containers/comptrie/loader/ut/ya.make b/library/cpp/containers/comptrie/loader/ut/ya.make new file mode 100644 index 00000000000..6c0334d3ea7 --- /dev/null +++ b/library/cpp/containers/comptrie/loader/ut/ya.make @@ -0,0 +1,18 @@ +UNITTEST_FOR(library/cpp/containers/comptrie/loader) + +OWNER(my34) + +ARCHIVE( + NAME data.inc + dummy.trie +) + +SRCS( + loader_ut.cpp +) + +PEERDIR( + library/cpp/containers/comptrie/loader +) + +END() diff --git a/library/cpp/containers/comptrie/loader/ya.make b/library/cpp/containers/comptrie/loader/ya.make new file mode 100644 index 00000000000..1e23e442a01 --- /dev/null +++ b/library/cpp/containers/comptrie/loader/ya.make @@ -0,0 +1,15 @@ +LIBRARY() + +OWNER(my34) + +SRCS( + loader.h + loader.cpp +) + +PEERDIR( + library/cpp/archive + library/cpp/containers/comptrie +) + +END() |
