129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi/*
229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project
329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi *
429dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi * you may not use this file except in compliance with the License.
629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi * You may obtain a copy of the License at
729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi *
829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi *      http://www.apache.org/licenses/LICENSE-2.0
929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi *
1029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
1129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
1229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi * See the License for the specific language governing permissions and
1429dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi * limitations under the License.
1529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi */
1629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
1729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi#include "utils/char_utils.h"
1829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
1929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi#include <gtest/gtest.h>
2029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
2129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi#include "defines.h"
2229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
2329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanaginamespace latinime {
2429dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanaginamespace {
2529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
2629dcf97e7472bde94d591c743c5311b641fd8238Keisuke KuroyanagiTEST(CharUtilsTest, TestIsAsciiUpper) {
2729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_TRUE(CharUtils::isAsciiUpper('A'));
2829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_TRUE(CharUtils::isAsciiUpper('Z'));
2929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper('a'));
3029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper('z'));
3129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper('@'));
3229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper(' '));
3329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper(0x00C0 /* LATIN CAPITAL LETTER A WITH GRAVE */));
3429dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper(0x00E0 /* LATIN SMALL LETTER A WITH GRAVE */));
3529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper(0x03C2 /* GREEK SMALL LETTER FINAL SIGMA */));
3629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper(0x0410 /* CYRILLIC CAPITAL LETTER A */));
3729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper(0x0430 /* CYRILLIC SMALL LETTER A */));
3829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper(0x3042 /* HIRAGANA LETTER A */));
3929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isAsciiUpper(0x1F36A /* COOKIE */));
4029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi}
4129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
4229dcf97e7472bde94d591c743c5311b641fd8238Keisuke KuroyanagiTEST(CharUtilsTest, TestToLowerCase) {
4329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('a', CharUtils::toLowerCase('A'));
4429dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('z', CharUtils::toLowerCase('Z'));
4529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('a', CharUtils::toLowerCase('a'));
4629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('z', CharUtils::toLowerCase('z'));
4729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('@', CharUtils::toLowerCase('@'));
4829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(' ', CharUtils::toLowerCase(' '));
4929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x00E0 /* LATIN SMALL LETTER A WITH GRAVE */,
5029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toLowerCase(0x00C0 /* LATIN CAPITAL LETTER A WITH GRAVE */));
5129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x00E0 /* LATIN SMALL LETTER A WITH GRAVE */,
5229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toLowerCase(0x00E0 /* LATIN SMALL LETTER A WITH GRAVE */));
5329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x03C2 /* GREEK SMALL LETTER FINAL SIGMA */,
5429dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toLowerCase(0x03C2 /* GREEK SMALL LETTER FINAL SIGMA */));
5529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x0430 /* CYRILLIC SMALL LETTER A */,
5629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toLowerCase(0x0410 /* CYRILLIC CAPITAL LETTER A */));
5729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x0430 /* CYRILLIC SMALL LETTER A */,
5829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toLowerCase(0x0430 /* CYRILLIC SMALL LETTER A */));
5929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x3042 /* HIRAGANA LETTER A */,
6029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toLowerCase(0x3042 /* HIRAGANA LETTER A */));
6129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x1F36A /* COOKIE */, CharUtils::toLowerCase(0x1F36A /* COOKIE */));
6229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi}
6329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
6429dcf97e7472bde94d591c743c5311b641fd8238Keisuke KuroyanagiTEST(CharUtilsTest, TestToBaseLowerCase) {
6529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('a', CharUtils::toBaseLowerCase('A'));
6629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('z', CharUtils::toBaseLowerCase('Z'));
6729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('a', CharUtils::toBaseLowerCase('a'));
6829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('z', CharUtils::toBaseLowerCase('z'));
6929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('@', CharUtils::toBaseLowerCase('@'));
7029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(' ', CharUtils::toBaseLowerCase(' '));
7129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('a', CharUtils::toBaseLowerCase(0x00C0 /* LATIN CAPITAL LETTER A WITH GRAVE */));
7229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('a', CharUtils::toBaseLowerCase(0x00E0 /* LATIN SMALL LETTER A WITH GRAVE */));
7329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x03C2 /* GREEK SMALL LETTER FINAL SIGMA */,
7429dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toBaseLowerCase(0x03C2 /* GREEK SMALL LETTER FINAL SIGMA */));
7529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x0430 /* CYRILLIC SMALL LETTER A */,
7629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toBaseLowerCase(0x0410 /* CYRILLIC CAPITAL LETTER A */));
7729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x0430 /* CYRILLIC SMALL LETTER A */,
7829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toBaseLowerCase(0x0430 /* CYRILLIC SMALL LETTER A */));
7929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x3042 /* HIRAGANA LETTER A */,
8029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toBaseLowerCase(0x3042 /* HIRAGANA LETTER A */));
8129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x1F36A /* COOKIE */, CharUtils::toBaseLowerCase(0x1F36A /* COOKIE */));
8229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi}
8329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
8429dcf97e7472bde94d591c743c5311b641fd8238Keisuke KuroyanagiTEST(CharUtilsTest, TestToBaseCodePoint) {
8529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('A', CharUtils::toBaseCodePoint('A'));
8629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('Z', CharUtils::toBaseCodePoint('Z'));
8729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('a', CharUtils::toBaseCodePoint('a'));
8829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('z', CharUtils::toBaseCodePoint('z'));
8929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('@', CharUtils::toBaseCodePoint('@'));
9029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(' ', CharUtils::toBaseCodePoint(' '));
9129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('A', CharUtils::toBaseCodePoint(0x00C0 /* LATIN CAPITAL LETTER A WITH GRAVE */));
9229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ('a', CharUtils::toBaseCodePoint(0x00E0 /* LATIN SMALL LETTER A WITH GRAVE */));
9329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x03C2 /* GREEK SMALL LETTER FINAL SIGMA */,
9429dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toBaseLowerCase(0x03C2 /* GREEK SMALL LETTER FINAL SIGMA */));
9529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x0410 /* CYRILLIC CAPITAL LETTER A */,
9629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toBaseCodePoint(0x0410 /* CYRILLIC CAPITAL LETTER A */));
9729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x0430 /* CYRILLIC SMALL LETTER A */,
9829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toBaseCodePoint(0x0430 /* CYRILLIC SMALL LETTER A */));
9929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x3042 /* HIRAGANA LETTER A */,
10029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi            CharUtils::toBaseCodePoint(0x3042 /* HIRAGANA LETTER A */));
10129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_EQ(0x1F36A /* COOKIE */, CharUtils::toBaseCodePoint(0x1F36A /* COOKIE */));
10229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi}
10329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
10429dcf97e7472bde94d591c743c5311b641fd8238Keisuke KuroyanagiTEST(CharUtilsTest, TestIsIntentionalOmissionCodePoint) {
10529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_TRUE(CharUtils::isIntentionalOmissionCodePoint('\''));
10629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_TRUE(CharUtils::isIntentionalOmissionCodePoint('-'));
10729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isIntentionalOmissionCodePoint('a'));
10829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isIntentionalOmissionCodePoint('?'));
10929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isIntentionalOmissionCodePoint('/'));
11029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi}
11129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
11229dcf97e7472bde94d591c743c5311b641fd8238Keisuke KuroyanagiTEST(CharUtilsTest, TestIsInUnicodeSpace) {
11329dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isInUnicodeSpace(NOT_A_CODE_POINT));
11429dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_FALSE(CharUtils::isInUnicodeSpace(CODE_POINT_BEGINNING_OF_SENTENCE));
11529dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_TRUE(CharUtils::isInUnicodeSpace('a'));
11629dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_TRUE(CharUtils::isInUnicodeSpace(0x0410 /* CYRILLIC CAPITAL LETTER A */));
11729dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_TRUE(CharUtils::isInUnicodeSpace(0x3042 /* HIRAGANA LETTER A */));
11829dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi    EXPECT_TRUE(CharUtils::isInUnicodeSpace(0x1F36A /* COOKIE */));
11929dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi}
12029dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi
12129dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi}  // namespace
12229dcf97e7472bde94d591c743c5311b641fd8238Keisuke Kuroyanagi}  // namespace latinime
123