localhost1978's picture
download
raw
7.02 kB
//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2026
//
// 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๏ธโƒฃ"));
ASSERT_TRUE(td::is_emoji("2โƒฃ"));
ASSERT_TRUE(!td::is_emoji(" 2โƒฃ"));
ASSERT_TRUE(!td::is_emoji("2โƒฃ "));
ASSERT_TRUE(!td::is_emoji(" "));
ASSERT_TRUE(!td::is_emoji(""));
ASSERT_TRUE(!td::is_emoji("1234567890123456789012345678901234567890123456789012345678901234567890"));
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("ยฉ๏ธ๏ธ"));
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) {
ASSERT_EQ(result, td::get_fitzpatrick_modifier(emoji));
}
TEST(Emoji, get_fitzpatrick_modifier) {
test_get_fitzpatrick_modifier("", 0);
test_get_fitzpatrick_modifier("๐Ÿ‘ฉ๐Ÿผโ€โคโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", 2);
test_get_fitzpatrick_modifier("๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", 2);
test_get_fitzpatrick_modifier("๐Ÿ‘‹", 0);
test_get_fitzpatrick_modifier("๐Ÿ‘‹๐Ÿป", 2);
test_get_fitzpatrick_modifier("๐Ÿ‘‹๐Ÿผ", 3);
test_get_fitzpatrick_modifier("๐Ÿ‘‹๐Ÿฝ", 4);
test_get_fitzpatrick_modifier("๐Ÿ‘‹๐Ÿพ", 5);
test_get_fitzpatrick_modifier("๐Ÿ‘‹๐Ÿฟ", 6);
test_get_fitzpatrick_modifier("๐Ÿป", 2);
test_get_fitzpatrick_modifier("๐Ÿผ", 3);
test_get_fitzpatrick_modifier("๐Ÿฝ", 4);
test_get_fitzpatrick_modifier("๐Ÿพ", 5);
test_get_fitzpatrick_modifier("๐Ÿฟ", 6);
test_get_fitzpatrick_modifier("โŒš", 0);
test_get_fitzpatrick_modifier("โ†”", 0);
test_get_fitzpatrick_modifier("๐Ÿช—", 0);
test_get_fitzpatrick_modifier("2๏ธโƒฃ", 0);
test_get_fitzpatrick_modifier("2โƒฃ", 0);
test_get_fitzpatrick_modifier("โค๏ธ", 0);
test_get_fitzpatrick_modifier("โค", 0);
test_get_fitzpatrick_modifier("โŒš", 0);
test_get_fitzpatrick_modifier("๐ŸŽ„", 0);
test_get_fitzpatrick_modifier("๐Ÿง‘โ€๐ŸŽ„", 0);
}
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, 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("๐Ÿ‘‹๐Ÿฝ", "๐Ÿ‘‹");
test_remove_emoji_modifiers("๐Ÿ‘‹๐Ÿพ", "๐Ÿ‘‹");
test_remove_emoji_modifiers("๐Ÿ‘‹๐Ÿฟ", "๐Ÿ‘‹");
test_remove_emoji_modifiers("๐Ÿป", "๐Ÿป");
test_remove_emoji_modifiers("๐Ÿผ", "๐Ÿผ");
test_remove_emoji_modifiers("๐Ÿฝ", "๐Ÿฝ");
test_remove_emoji_modifiers("๐Ÿพ", "๐Ÿพ");
test_remove_emoji_modifiers("๐Ÿฟ", "๐Ÿฟ");
test_remove_emoji_modifiers("โŒš", "โŒš");
test_remove_emoji_modifiers("โ†”", "โ†”");
test_remove_emoji_modifiers("๐Ÿช—", "๐Ÿช—");
test_remove_emoji_modifiers("2๏ธโƒฃ", "2โƒฃ");
test_remove_emoji_modifiers("2โƒฃ", "2โƒฃ");
test_remove_emoji_modifiers("โค๏ธ", "โค");
test_remove_emoji_modifiers("โค", "โค");
test_remove_emoji_modifiers("โŒš", "โŒš");
test_remove_emoji_modifiers("๏ธ", "๏ธ");
test_remove_emoji_modifiers("๏ธ๏ธ๏ธ๐Ÿป", "๏ธ๏ธ๏ธ๐Ÿป");
test_remove_emoji_modifiers("๏ธ๏ธ๏ธ๐Ÿปa", "a");
test_remove_emoji_modifiers("๐ŸŽ„", "๐ŸŽ„");
test_remove_emoji_modifiers("๐Ÿง‘โ€๐ŸŽ„", "๐Ÿง‘โ€๐ŸŽ„");
}
static void test_remove_emoji_selectors(td::string emoji, const td::string &result) {
ASSERT_STREQ(result, td::remove_emoji_selectors(result));
ASSERT_STREQ(result, td::remove_emoji_selectors(emoji));
}
TEST(Emoji, remove_emoji_selectors) {
test_remove_emoji_selectors("", "");
test_remove_emoji_selectors("๐Ÿ‘ฉ๐Ÿผโ€โคโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", "๐Ÿ‘ฉ๐Ÿผโ€โคโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป");
test_remove_emoji_selectors("๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป", "๐Ÿ‘ฉ๐Ÿผโ€โคโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป");
test_remove_emoji_selectors("๐Ÿ‘‹๐Ÿป", "๐Ÿ‘‹๐Ÿป");
test_remove_emoji_selectors("๐Ÿ‘‹๐Ÿผ", "๐Ÿ‘‹๐Ÿผ");
test_remove_emoji_selectors("๐Ÿ‘‹๐Ÿฝ", "๐Ÿ‘‹๐Ÿฝ");
test_remove_emoji_selectors("๐Ÿ‘‹๐Ÿพ", "๐Ÿ‘‹๐Ÿพ");
test_remove_emoji_selectors("๐Ÿ‘‹๐Ÿฟ", "๐Ÿ‘‹๐Ÿฟ");
test_remove_emoji_selectors("๐Ÿป", "๐Ÿป");
test_remove_emoji_selectors("๐Ÿผ", "๐Ÿผ");
test_remove_emoji_selectors("๐Ÿฝ", "๐Ÿฝ");
test_remove_emoji_selectors("๐Ÿพ", "๐Ÿพ");
test_remove_emoji_selectors("๐Ÿฟ", "๐Ÿฟ");
test_remove_emoji_selectors("โŒš", "โŒš");
test_remove_emoji_selectors("โ†”", "โ†”");
test_remove_emoji_selectors("๐Ÿช—", "๐Ÿช—");
test_remove_emoji_selectors("2๏ธโƒฃ", "2โƒฃ");
test_remove_emoji_selectors("2โƒฃ", "2โƒฃ");
test_remove_emoji_selectors("โค๏ธ", "โค");
test_remove_emoji_selectors("โค", "โค");
test_remove_emoji_selectors("โŒš", "โŒš");
test_remove_emoji_selectors("๐ŸŽ„", "๐ŸŽ„");
test_remove_emoji_selectors("๐Ÿง‘โ€๐ŸŽ„", "๐Ÿง‘โ€๐ŸŽ„");
}

Xet Storage Details

Size:
7.02 kB
ยท
Xet hash:
401191a2e1a74417543ce4b9b58d529739ae0e2e7be4c70fff0b96abbbbe14dd

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.