diff options
Diffstat (limited to 'protocols/Telegram/tdlib/td/tdutils/test')
33 files changed, 257 insertions, 64 deletions
diff --git a/protocols/Telegram/tdlib/td/tdutils/test/ChainScheduler.cpp b/protocols/Telegram/tdlib/td/tdutils/test/ChainScheduler.cpp index d3bcb934fc..029a4ff366 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/ChainScheduler.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/ChainScheduler.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -139,7 +139,7 @@ TEST(ChainScheduler, Stress) { int chain_n = rnd.fast(1, ChainsN); td::vector<ChainId> chain_ids(ChainsN); std::iota(chain_ids.begin(), chain_ids.end(), 0); - td::random_shuffle(td::as_mutable_span(chain_ids), rnd); + td::rand_shuffle(td::as_mutable_span(chain_ids), rnd); chain_ids.resize(chain_n); for (auto chain_id : chain_ids) { chains[td::narrow_cast<size_t>(chain_id)].push_back(query); diff --git a/protocols/Telegram/tdlib/td/tdutils/test/ConcurrentHashMap.cpp b/protocols/Telegram/tdlib/td/tdutils/test/ConcurrentHashMap.cpp index a90f11d525..5ab1f85ad2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/ConcurrentHashMap.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/ConcurrentHashMap.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -163,7 +163,7 @@ class ConcurrentHashMapJunction { ConcurrentHashMapJunction(const ConcurrentHashMapJunction &) = delete; ConcurrentHashMapJunction &operator=(const ConcurrentHashMapJunction &) = delete; - ConcurrentHashMapJunction(ConcurrentHashMapJunction &&other) = delete; + ConcurrentHashMapJunction(ConcurrentHashMapJunction &&) = delete; ConcurrentHashMapJunction &operator=(ConcurrentHashMapJunction &&) = delete; ~ConcurrentHashMapJunction() { junction::DefaultQSBR.flush(); diff --git a/protocols/Telegram/tdlib/td/tdutils/test/Enumerator.cpp b/protocols/Telegram/tdlib/td/tdutils/test/Enumerator.cpp index 210ab415cc..6f40ae7b5f 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/Enumerator.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/Enumerator.cpp @@ -1,14 +1,17 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // +#include "td/utils/benchmark.h" +#include "td/utils/common.h" #include "td/utils/Enumerator.h" +#include "td/utils/Random.h" #include "td/utils/tests.h" TEST(Enumerator, simple) { - td::Enumerator<std::string> e; + td::Enumerator<td::string> e; auto b = e.add("b"); auto a = e.add("a"); auto d = e.add("d"); @@ -22,3 +25,21 @@ TEST(Enumerator, simple) { ASSERT_EQ(c, e.add("c")); ASSERT_EQ(d, e.add("d")); } + +TEST(Enumerator, add_benchmark) { + class EnumeratorAddBenchmark final : public td::Benchmark { + public: + td::string get_description() const final { + return "EnumeratorAdd"; + } + + void run(int n) final { + td::Enumerator<int> enumerator; + for (int i = 0; i < n; i++) { + enumerator.add(td::Random::fast(1, 10000000)); + } + td::do_not_optimize_away(enumerator.size()); + } + }; + bench(EnumeratorAddBenchmark()); +} diff --git a/protocols/Telegram/tdlib/td/tdutils/test/EpochBasedMemoryReclamation.cpp b/protocols/Telegram/tdlib/td/tdutils/test/EpochBasedMemoryReclamation.cpp index c97679bb83..e219d38254 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/EpochBasedMemoryReclamation.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/EpochBasedMemoryReclamation.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/HashSet.cpp b/protocols/Telegram/tdlib/td/tdutils/test/HashSet.cpp index 94ebf8733b..19c4c1ca35 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/HashSet.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/HashSet.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -92,6 +92,20 @@ static bool operator==(const A &lhs, const A &rhs) { return lhs.a == rhs.a; } +TEST(FlatHashSet, init) { + td::FlatHashSet<td::Slice, td::SliceHash> s{"1", "22", "333", "4444"}; + ASSERT_TRUE(s.size() == 4); + td::string str("1"); + ASSERT_TRUE(s.count(str) == 1); + ASSERT_TRUE(s.count("1") == 1); + ASSERT_TRUE(s.count("22") == 1); + ASSERT_TRUE(s.count("333") == 1); + ASSERT_TRUE(s.count("4444") == 1); + ASSERT_TRUE(s.count("4") == 0); + ASSERT_TRUE(s.count("222") == 0); + ASSERT_TRUE(s.count("") == 0); +} + TEST(FlatHashSet, foreach) { td::FlatHashSet<A, AHash> s; for (auto it : s) { diff --git a/protocols/Telegram/tdlib/td/tdutils/test/HazardPointers.cpp b/protocols/Telegram/tdlib/td/tdutils/test/HazardPointers.cpp index 0c4174db0f..5148626cb2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/HazardPointers.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/HazardPointers.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/HttpUrl.cpp b/protocols/Telegram/tdlib/td/tdutils/test/HttpUrl.cpp index 6e91d48803..6d97c08770 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/HttpUrl.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/HttpUrl.cpp @@ -1,15 +1,104 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #include "td/utils/common.h" #include "td/utils/HttpUrl.h" +#include "td/utils/misc.h" +#include "td/utils/Slice.h" +#include "td/utils/SliceBuilder.h" +#include "td/utils/StringBuilder.h" #include "td/utils/tests.h" #include <utility> +static void test_parse_url(const td::string &url, td::string userinfo, td::string host, bool is_ipv6, + int specified_port, int port) { + for (auto query : {"", "/.com", "#", "?t=1"}) { + auto http_url = td::parse_url(url + query).move_as_ok(); + ASSERT_EQ(userinfo, http_url.userinfo_); + ASSERT_EQ(host, http_url.host_); + ASSERT_EQ(is_ipv6, http_url.is_ipv6_); + ASSERT_EQ(specified_port, http_url.specified_port_); + ASSERT_EQ(port, http_url.port_); + } +} + +static void test_parse_url(const td::string &url, td::Slice error_message) { + for (auto query : {"", "/.com", "#", "?t=1"}) { + auto error = td::parse_url(url + query).move_as_error(); + ASSERT_EQ(error_message, error.message()); + } +} + +TEST(HttpUrl, parse_url) { + test_parse_url("http://localhost:8080", "", "localhost", false, 8080, 8080); + test_parse_url("http://lOcAlhOsT:8080", "", "localhost", false, 8080, 8080); + test_parse_url("http://UsEr:PaSs@lOcAlhOsT:8080", "UsEr:PaSs", "localhost", false, 8080, 8080); + test_parse_url("http://example.com", "", "example.com", false, 0, 80); + test_parse_url("https://example.com", "", "example.com", false, 0, 443); + test_parse_url("https://example.com:65535", "", "example.com", false, 65535, 65535); + test_parse_url("https://example.com:00000071", "", "example.com", false, 71, 71); + test_parse_url("example.com?://", "", "example.com", false, 0, 80); + test_parse_url("example.com/://", "", "example.com", false, 0, 80); + test_parse_url("example.com#://", "", "example.com", false, 0, 80); + test_parse_url("@example.com#://", "", "example.com", false, 0, 80); + test_parse_url("test@example.com#://", "test", "example.com", false, 0, 80); + test_parse_url("test:pass@example.com#://", "test:pass", "example.com", false, 0, 80); + test_parse_url("te%ffst:pa%8Dss@examp%9Ele.com#://", "te%ffst:pa%8Dss", "examp%9ele.com", false, 0, 80); + test_parse_url("http://[2001:db8:85a3:8d3:1319:8a2e:370:7348]", "", "[2001:db8:85a3:8d3:1319:8a2e:370:7348]", true, 0, + 80); + test_parse_url("https://test@[2001:db8:85a3:8d3:1319:8a2e:370:7348]:443/", "test", + "[2001:db8:85a3:8d3:1319:8a2e:370:7348]", true, 443, 443); + test_parse_url("http://[64:ff9b::255.255.255.255]", "", "[64:ff9b::255.255.255.255]", true, 0, 80); + test_parse_url("http://255.255.255.255", "", "255.255.255.255", false, 0, 80); + test_parse_url("http://255.255.255.com", "", "255.255.255.com", false, 0, 80); + test_parse_url("https://exam%00ple.com", "", "exam%00ple.com", false, 0, 443); + + test_parse_url("example.com://", "Unsupported URL protocol"); + test_parse_url("https://example.com:65536", "Wrong port number specified in the URL"); + test_parse_url("https://example.com:0", "Wrong port number specified in the URL"); + test_parse_url("https://example.com:0x1", "Wrong port number specified in the URL"); + test_parse_url("https://example.com:", "Wrong port number specified in the URL"); + test_parse_url("https://example.com:-1", "Wrong port number specified in the URL"); + test_parse_url("example.com@://", "Wrong port number specified in the URL"); + test_parse_url("example.com@:1//", "URL host is empty"); + test_parse_url("example.com@.:1//", "Host is invalid"); + test_parse_url("exam%0gple.com", "Wrong percent-encoded symbol in URL host"); + test_parse_url("a%g0b@example.com", "Wrong percent-encoded symbol in URL userinfo"); + + for (int c = 1; c <= 255; c++) { + if (c == '%') { + continue; + } + auto ch = static_cast<char>(c); + if (td::is_alnum(ch) || c >= 128 || td::string(".-_!$,~*\'();&+=").find(ch) != td::string::npos) { + // allowed character + test_parse_url(PSTRING() << ch << "a@b" << ch, td::string(1, ch) + "a", "b" + td::string(1, td::to_lower(ch)), + false, 0, 80); + } else if (c == ':') { + // allowed in userinfo character + test_parse_url(PSTRING() << ch << "a@b" << ch << 1, td::string(1, ch) + "a", "b", false, 1, 1); + test_parse_url(PSTRING() << ch << "a@b" << ch, "Wrong port number specified in the URL"); + test_parse_url(PSTRING() << ch << "a@b", td::string(1, ch) + "a", "b", false, 0, 80); + } else if (c == '#' || c == '?' || c == '/') { + // special disallowed character + test_parse_url(PSTRING() << ch << "a@b" << ch, "URL host is empty"); + } else if (c == '@') { + // special disallowed character + test_parse_url(PSTRING() << ch << "a@b" << ch, "URL host is empty"); + test_parse_url(PSTRING() << ch << "a@b" << ch << '1', "Disallowed character in URL userinfo"); + } else { + // generic disallowed character + test_parse_url(PSTRING() << ch << "a@b" << ch, "Disallowed character in URL host"); + test_parse_url(PSTRING() << "a@b" << ch, "Disallowed character in URL host"); + test_parse_url(PSTRING() << ch << "a@b", "Disallowed character in URL userinfo"); + } + } +} + static void test_get_url_query_file_name(const char *prefix, const char *suffix, const char *file_name) { auto path = td::string(prefix) + td::string(file_name) + td::string(suffix); ASSERT_STREQ(file_name, td::get_url_query_file_name(path)); diff --git a/protocols/Telegram/tdlib/td/tdutils/test/List.cpp b/protocols/Telegram/tdlib/td/tdutils/test/List.cpp index 02ab080d89..1008ed730a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/List.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/List.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/MpmcQueue.cpp b/protocols/Telegram/tdlib/td/tdutils/test/MpmcQueue.cpp index c038303c37..c2fbf56074 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/MpmcQueue.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/MpmcQueue.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/MpmcWaiter.cpp b/protocols/Telegram/tdlib/td/tdutils/test/MpmcWaiter.cpp index 4ac882dcaf..9bdabfac57 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/MpmcWaiter.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/MpmcWaiter.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/MpscLinkQueue.cpp b/protocols/Telegram/tdlib/td/tdutils/test/MpscLinkQueue.cpp index 43b0ccf086..49822896f3 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/MpscLinkQueue.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/MpscLinkQueue.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/OptionParser.cpp b/protocols/Telegram/tdlib/td/tdutils/test/OptionParser.cpp index 8600eb9f19..5580be0e85 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/OptionParser.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/OptionParser.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/OrderedEventsProcessor.cpp b/protocols/Telegram/tdlib/td/tdutils/test/OrderedEventsProcessor.cpp index c5c963bedc..fb31366a7a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/OrderedEventsProcessor.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/OrderedEventsProcessor.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/SharedObjectPool.cpp b/protocols/Telegram/tdlib/td/tdutils/test/SharedObjectPool.cpp index a4762e25f3..935b9b8358 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/SharedObjectPool.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/SharedObjectPool.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/SharedSlice.cpp b/protocols/Telegram/tdlib/td/tdutils/test/SharedSlice.cpp index 7327f0dbb3..8cdfb1533f 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/SharedSlice.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/SharedSlice.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/StealingQueue.cpp b/protocols/Telegram/tdlib/td/tdutils/test/StealingQueue.cpp index 453a63179f..c0ccabf793 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/StealingQueue.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/StealingQueue.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashMap.cpp b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashMap.cpp index 38def77772..722ab6f85e 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashMap.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashMap.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashSet.cpp b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashSet.cpp index ec4096c850..f92cf253c0 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashSet.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashSet.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeVector.cpp b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeVector.cpp index 0f0cc58796..ca101e4ab8 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeVector.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeVector.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/bitmask.cpp b/protocols/Telegram/tdlib/td/tdutils/test/bitmask.cpp index e81c406bbe..23aea6c9ec 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/bitmask.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/bitmask.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/buffer.cpp b/protocols/Telegram/tdlib/td/tdutils/test/buffer.cpp index 4bc406cc64..0f155efc54 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/buffer.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/buffer.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/crypto.cpp b/protocols/Telegram/tdlib/td/tdutils/test/crypto.cpp index 9e81ef132c..5b4fd37e69 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/crypto.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/crypto.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -23,7 +23,7 @@ static td::vector<td::string> strings{"", "1", "short test string", td::string(1 TEST(Crypto, Aes) { td::Random::Xorshift128plus rnd(123); td::UInt256 key; - rnd.bytes(as_slice(key)); + rnd.bytes(as_mutable_slice(key)); td::string plaintext(16, '\0'); td::string encrypted(16, '\0'); td::string decrypted(16, '\0'); @@ -34,8 +34,8 @@ TEST(Crypto, Aes) { td::AesState decryptor; decryptor.init(as_slice(key), false); - encryptor.encrypt(td::as_slice(plaintext).ubegin(), td::as_slice(encrypted).ubegin(), 16); - decryptor.decrypt(td::as_slice(encrypted).ubegin(), td::as_slice(decrypted).ubegin(), 16); + encryptor.encrypt(td::as_slice(plaintext).ubegin(), td::as_mutable_slice(encrypted).ubegin(), 16); + decryptor.decrypt(td::as_slice(encrypted).ubegin(), td::as_mutable_slice(decrypted).ubegin(), 16); CHECK(decrypted == plaintext); CHECK(decrypted != encrypted); @@ -135,7 +135,7 @@ TEST(Crypto, AesIgeState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.encrypt(td::Slice(s).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_ige_encrypt(as_slice(key), as_slice(iv_copy), td::Slice(s).substr(pos, len), + td::aes_ige_encrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(s).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -149,7 +149,7 @@ TEST(Crypto, AesIgeState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.decrypt(td::Slice(t).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_ige_decrypt(as_slice(key), as_slice(iv_copy), td::Slice(u).substr(pos, len), + td::aes_ige_decrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(u).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -191,7 +191,7 @@ TEST(Crypto, AesCbcState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.encrypt(td::Slice(s).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_cbc_encrypt(as_slice(key), as_slice(iv_copy), td::Slice(s).substr(pos, len), + td::aes_cbc_encrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(s).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -205,7 +205,7 @@ TEST(Crypto, AesCbcState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.decrypt(td::Slice(t).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_cbc_decrypt(as_slice(key), as_slice(iv_copy), td::Slice(u).substr(pos, len), + td::aes_cbc_decrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(u).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -221,7 +221,7 @@ TEST(Crypto, Sha256State) { for (auto length : {0, 1, 31, 32, 33, 9999, 10000, 10001, 999999, 1000001}) { auto s = td::rand_string(std::numeric_limits<char>::min(), std::numeric_limits<char>::max(), length); td::UInt256 baseline; - td::sha256(s, as_slice(baseline)); + td::sha256(s, as_mutable_slice(baseline)); td::Sha256State state; state.init(); @@ -232,7 +232,7 @@ TEST(Crypto, Sha256State) { } state = std::move(state2); td::UInt256 result; - state.extract(as_slice(result)); + state.extract(as_mutable_slice(result)); ASSERT_TRUE(baseline == result); } } @@ -367,7 +367,7 @@ TEST(Crypto, crc32c_benchmark) { explicit Crc32cExtendBenchmark(size_t chunk_size) : chunk_size_(chunk_size) { } td::string get_description() const final { - return PSTRING() << "Crc32c with chunk_size=" << chunk_size_; + return PSTRING() << "CRC32C with chunk_size = " << chunk_size_; } void start_up_n(int n) final { if (n > (1 << 20)) { diff --git a/protocols/Telegram/tdlib/td/tdutils/test/emoji.cpp b/protocols/Telegram/tdlib/td/tdutils/test/emoji.cpp index c8e6539a99..0efb17429b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/emoji.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/emoji.cpp @@ -1,18 +1,22 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // +#include "td/utils/common.h" #include "td/utils/emoji.h" #include "td/utils/tests.h" TEST(Emoji, is_emoji) { ASSERT_TRUE(!td::is_emoji("")); ASSERT_TRUE(td::is_emoji("đŠđŧââ¤âđâđŠđģ")); + ASSERT_TRUE(td::is_emoji("đŠđŧââ¤âđâđŠđģī¸")); // not in RGI emoji ZWJ sequence set ASSERT_TRUE(td::is_emoji("đŠđŧââ¤ī¸âđâđŠđģ")); + ASSERT_TRUE(td::is_emoji("đŠđŧââ¤ī¸âđâđŠđģī¸")); ASSERT_TRUE(!td::is_emoji("đŠđŧââ¤ī¸ī¸âđâđŠđģ")); ASSERT_TRUE(td::is_emoji("â")); + ASSERT_TRUE(td::is_emoji("âī¸")); ASSERT_TRUE(td::is_emoji("â")); ASSERT_TRUE(td::is_emoji("đĒ")); ASSERT_TRUE(td::is_emoji("2ī¸âŖ")); @@ -27,6 +31,21 @@ TEST(Emoji, is_emoji) { ASSERT_TRUE(td::is_emoji("â")); ASSERT_TRUE(td::is_emoji("đ")); ASSERT_TRUE(td::is_emoji("đ§âđ")); + ASSERT_TRUE(td::is_emoji("Šī¸")); + ASSERT_TRUE(td::is_emoji("Š")); + ASSERT_TRUE(!td::is_emoji("Šī¸ī¸")); + ASSERT_TRUE(td::is_emoji("đĩī¸ââī¸")); + ASSERT_TRUE(td::is_emoji("đĩââī¸")); // not in RGI emoji ZWJ sequence set + ASSERT_TRUE(td::is_emoji("đĩī¸ââ")); // not in RGI emoji ZWJ sequence set + ASSERT_TRUE(td::is_emoji("đĩââ")); + ASSERT_TRUE(td::is_emoji("đī¸ââī¸")); + ASSERT_TRUE(td::is_emoji("đī¸ââī¸")); + ASSERT_TRUE(td::is_emoji("đââī¸")); // not in RGI emoji ZWJ sequence set + ASSERT_TRUE(td::is_emoji("đââī¸")); // not in RGI emoji ZWJ sequence set + ASSERT_TRUE(!td::is_emoji("aâđ¤âđ¨")); + ASSERT_TRUE(!td::is_emoji("đŠâaâđ¨")); + ASSERT_TRUE(!td::is_emoji("đŠâđ¤âa")); + ASSERT_TRUE(td::is_emoji("đŠâđ¤âđ¨")); // not in RGI emoji ZWJ sequence set } static void test_get_fitzpatrick_modifier(td::string emoji, int result) { @@ -60,17 +79,18 @@ TEST(Emoji, get_fitzpatrick_modifier) { test_get_fitzpatrick_modifier("đ§âđ", 0); } -static void test_remove_emoji_modifiers(td::string emoji, const td::string &result) { - ASSERT_STREQ(result, td::remove_emoji_modifiers(emoji)); - td::remove_emoji_modifiers_in_place(emoji); +static void test_remove_emoji_modifiers(td::string emoji, const td::string &result, bool remove_selectors = true) { + ASSERT_STREQ(result, td::remove_emoji_modifiers(emoji, remove_selectors)); + td::remove_emoji_modifiers_in_place(emoji, remove_selectors); ASSERT_STREQ(result, emoji); - ASSERT_STREQ(emoji, td::remove_emoji_modifiers(emoji)); + ASSERT_STREQ(emoji, td::remove_emoji_modifiers(emoji, remove_selectors)); } TEST(Emoji, remove_emoji_modifiers) { test_remove_emoji_modifiers("", ""); test_remove_emoji_modifiers("đŠđŧââ¤âđâđŠđģ", "đŠââ¤âđâđŠ"); test_remove_emoji_modifiers("đŠđŧââ¤ī¸âđâđŠđģ", "đŠââ¤âđâđŠ"); + test_remove_emoji_modifiers("đŠđŧââ¤ī¸âđâđŠđģ", "đŠââ¤ī¸âđâđŠ", false); test_remove_emoji_modifiers("đđģ", "đ"); test_remove_emoji_modifiers("đđŧ", "đ"); test_remove_emoji_modifiers("đđŊ", "đ"); diff --git a/protocols/Telegram/tdlib/td/tdutils/test/filesystem.cpp b/protocols/Telegram/tdlib/td/tdutils/test/filesystem.cpp index de2def1e5e..0102aee036 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/filesystem.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/filesystem.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/gzip.cpp b/protocols/Telegram/tdlib/td/tdutils/test/gzip.cpp index 32d75474e8..d22c329dd2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/gzip.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/gzip.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -34,7 +34,7 @@ static void test_gzencode(const td::string &s) { auto r = td::gzencode(s, td::max(2, static_cast<int>(100 / s.size()))); ASSERT_TRUE(!r.empty()); LOG(INFO) << "Encoded string of size " << s.size() << " in " << (td::Time::now() - begin_time) - << " with compression ratio " << static_cast<double>(r.size()) / static_cast<double>(s.size()); + << " seconds with compression ratio " << static_cast<double>(r.size()) / static_cast<double>(s.size()); } TEST(Gzip, gzencode) { diff --git a/protocols/Telegram/tdlib/td/tdutils/test/hashset_benchmark.cpp b/protocols/Telegram/tdlib/td/tdutils/test/hashset_benchmark.cpp index f07f58c8f0..dbfcaa992b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/hashset_benchmark.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/hashset_benchmark.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -17,6 +17,7 @@ #include "td/utils/Slice.h" #include "td/utils/Span.h" #include "td/utils/StringBuilder.h" +#include "td/utils/tests.h" #include "td/utils/Time.h" #include "td/utils/VectorQueue.h" @@ -204,7 +205,7 @@ static void BM_Get(benchmark::State &state) { } std::size_t key_i = 0; - td::random_shuffle(td::as_mutable_span(keys), rnd); + td::rand_shuffle(td::as_mutable_span(keys), rnd); auto next_key = [&] { key_i++; if (key_i == data.size()) { diff --git a/protocols/Telegram/tdlib/td/tdutils/test/heap.cpp b/protocols/Telegram/tdlib/td/tdutils/test/heap.cpp index 02b6d81424..43072fb97e 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/heap.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/heap.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -23,7 +23,7 @@ TEST(Heap, sort_random_perm) { v[i] = i; } td::Random::Xorshift128plus rnd(123); - td::random_shuffle(td::as_mutable_span(v), rnd); + td::rand_shuffle(td::as_mutable_span(v), rnd); td::vector<td::HeapNode> nodes(n); td::KHeap<int> kheap; for (int i = 0; i < n; i++) { @@ -46,10 +46,12 @@ class CheckedHeap { nodes[i].value = i; } } + static void xx(int key, const td::HeapNode *heap_node) { const Node *node = static_cast<const Node *>(heap_node); std::fprintf(stderr, "(%d;%d)", node->key, node->value); } + void check() const { for (auto p : set_heap) { std::fprintf(stderr, "(%d;%d)", p.first, p.second); @@ -59,13 +61,16 @@ class CheckedHeap { std::fprintf(stderr, "\n"); kheap.check(); } + int random_id() const { CHECK(!empty()); return ids[td::Random::fast(0, static_cast<int>(ids.size() - 1))]; } + std::size_t size() const { return ids.size(); } + bool empty() const { return ids.empty(); } @@ -77,8 +82,8 @@ class CheckedHeap { ASSERT_EQ(res, kheap.top_key()); return res; } + int insert(int key) { - // std::fprintf(stderr, "insert %d\n", key); int id; if (free_ids.empty()) { UNREACHABLE(); @@ -96,15 +101,15 @@ class CheckedHeap { set_heap.emplace(key, id); return id; } + void fix_key(int new_key, int id) { - // std::fprintf(stderr, "fix key %d %d (old_key = %d)\n", new_key, id, nodes[id].key); set_heap.erase(std::make_pair(nodes[id].key, id)); nodes[id].key = new_key; kheap.fix(new_key, &nodes[id]); set_heap.emplace(new_key, id); } + void erase(int id) { - // std::fprintf(stderr, "erase %d\n", id); int pos = rev_ids[id]; CHECK(pos != -1); ids[pos] = ids.back(); @@ -116,8 +121,8 @@ class CheckedHeap { kheap.erase(&nodes[id]); set_heap.erase(std::make_pair(nodes[id].key, id)); } + void pop() { - // std::fprintf(stderr, "pop\n"); CHECK(!empty()); Node *node = static_cast<Node *>(kheap.pop()); int id = node->value; diff --git a/protocols/Telegram/tdlib/td/tdutils/test/json.cpp b/protocols/Telegram/tdlib/td/tdutils/test/json.cpp index 4e57b2d562..8b42751a3d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/json.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/json.cpp @@ -1,9 +1,10 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // +#include "td/utils/common.h" #include "td/utils/JsonBuilder.h" #include "td/utils/logging.h" #include "td/utils/Slice.h" diff --git a/protocols/Telegram/tdlib/td/tdutils/test/log.cpp b/protocols/Telegram/tdlib/td/tdutils/test/log.cpp index 34af21353c..707300248c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/log.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/log.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -168,7 +168,7 @@ TEST(Log, Bench) { class AsyncFileLog final : public td::LogInterface { public: AsyncFileLog() { - file_log_.init("tmplog", std::numeric_limits<td::int64>::max()).ensure(); + file_log_.init("tmplog", std::numeric_limits<td::int64>::max(), false).ensure(); } void do_append(int log_level, td::CSlice slice) final { static_cast<td::LogInterface &>(file_log_).do_append(log_level, slice); diff --git a/protocols/Telegram/tdlib/td/tdutils/test/misc.cpp b/protocols/Telegram/tdlib/td/tdutils/test/misc.cpp index 7db990dad1..e1612a9924 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/misc.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/misc.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -40,6 +40,7 @@ #include "td/utils/translit.h" #include "td/utils/uint128.h" #include "td/utils/unicode.h" +#include "td/utils/unique_value_ptr.h" #include "td/utils/utf8.h" #include <algorithm> @@ -440,7 +441,7 @@ static void test_to_double_one(td::CSlice str, td::Slice expected, int precision auto result = PSTRING() << td::StringBuilder::FixedDouble(to_double(str), precision); if (expected != result) { LOG(ERROR) << "To double conversion failed: have " << str << ", expected " << expected << ", parsed " - << to_double(str) << ", got " << result; + << to_double(str) << ", receive " << result; } } @@ -516,7 +517,8 @@ TEST(Misc, print_uint) { static void test_idn_to_ascii_one(const td::string &host, const td::string &result) { if (result != td::idn_to_ascii(host).ok()) { - LOG(ERROR) << "Failed to convert " << host << " to " << result << ", got \"" << td::idn_to_ascii(host).ok() << "\""; + LOG(ERROR) << "Failed to convert " << host << " to " << result << ", receive \"" << td::idn_to_ascii(host).ok() + << "\""; } } @@ -834,9 +836,9 @@ TEST(Misc, StringBuilder) { if (use_buf) { ASSERT_EQ(res, sb.as_cslice()); } else { - auto got = sb.as_cslice(); - res.resize(got.size()); - ASSERT_EQ(res, got); + auto sb_result = sb.as_cslice(); + res.resize(sb_result.size()); + ASSERT_EQ(res, sb_result); } } } @@ -1260,3 +1262,32 @@ TEST(FloodControl, Fast) { LOG(INFO) << ++count << ": " << now; } } + +TEST(UniqueValuePtr, Basic) { + auto a = td::make_unique_value<int>(5); + td::unique_value_ptr<int> b; + ASSERT_TRUE(b == nullptr); + ASSERT_TRUE(a != nullptr); + ASSERT_TRUE(a != b); + b = a; + ASSERT_TRUE(a != nullptr); + ASSERT_TRUE(b != nullptr); + ASSERT_TRUE(a == b); + *a = 6; + ASSERT_TRUE(a != nullptr); + ASSERT_TRUE(b != nullptr); + ASSERT_TRUE(a != b); + b = std::move(a); + ASSERT_TRUE(a == nullptr); + ASSERT_TRUE(b != nullptr); + ASSERT_TRUE(a != b); + auto c = td::make_unique_value<td::unique_value_ptr<int>>(a); + ASSERT_TRUE(*c == a); + ASSERT_TRUE(*c == nullptr); + c = td::make_unique_value<td::unique_value_ptr<int>>(b); + ASSERT_TRUE(*c == b); + ASSERT_TRUE(**c == 6); + auto d = c; + ASSERT_TRUE(c == d); + ASSERT_TRUE(6 == **d); +} diff --git a/protocols/Telegram/tdlib/td/tdutils/test/port.cpp b/protocols/Telegram/tdlib/td/tdutils/test/port.cpp index 92b1729977..4b01169fa4 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/port.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/port.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -14,6 +14,7 @@ #include "td/utils/port/path.h" #include "td/utils/port/signals.h" #include "td/utils/port/sleep.h" +#include "td/utils/port/Stat.h" #include "td/utils/port/thread.h" #include "td/utils/port/thread_local.h" #include "td/utils/Random.h" @@ -54,7 +55,7 @@ TEST(Port, files) { const int ITER_COUNT = 1000; for (int i = 0; i < ITER_COUNT; i++) { td::walk_path(main_dir, [&](td::CSlice name, td::WalkPath::Type type) { - if (type == td::WalkPath::Type::NotDir) { + if (type == td::WalkPath::Type::RegularFile) { ASSERT_TRUE(name == fd_path || name == fd2_path); } cnt++; @@ -105,6 +106,7 @@ TEST(Port, files) { fd.seek(0).ensure(); ASSERT_EQ(13u, fd.read(buf_slice.substr(0, 13)).move_as_ok()); ASSERT_STREQ("Habcd world?!", buf_slice.substr(0, 13)); + td::rmrf(main_dir).ensure(); } TEST(Port, SparseFiles) { @@ -167,6 +169,14 @@ TEST(Port, Writev) { td::string content(expected_content.size(), '\0'); ASSERT_EQ(content.size(), fd.read(content).move_as_ok()); ASSERT_EQ(expected_content, content); + + auto stat = td::stat(test_file_path).move_as_ok(); + CHECK(!stat.is_dir_); + CHECK(stat.is_reg_); + CHECK(!stat.is_symbolic_link_); + CHECK(stat.size_ == static_cast<td::int64>(expected_content.size())); + + td::unlink(test_file_path).ignore(); } #if TD_PORT_POSIX && !TD_THREAD_UNSUPPORTED diff --git a/protocols/Telegram/tdlib/td/tdutils/test/pq.cpp b/protocols/Telegram/tdlib/td/tdutils/test/pq.cpp index d919d661b5..0983ea814c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/pq.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/pq.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/variant.cpp b/protocols/Telegram/tdlib/td/tdutils/test/variant.cpp index 755acdfa98..a05ff24a2d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/variant.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/variant.cpp @@ -1,9 +1,10 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // +#include "td/utils/common.h" #include "td/utils/Slice.h" #include "td/utils/StringBuilder.h" #include "td/utils/tests.h" |