1fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi/*
2fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project
3fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi *
4fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
5fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi * you may not use this file except in compliance with the License.
6fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi * You may obtain a copy of the License at
7fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi *
8fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi *      http://www.apache.org/licenses/LICENSE-2.0
9fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi *
10fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
11fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
12fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi * See the License for the specific language governing permissions and
14fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi * limitations under the License.
15fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi */
16fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
1788bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/header/header_read_write_utils.h"
18fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
19fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi#include <gtest/gtest.h>
20fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
21fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi#include <cstring>
22fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi#include <vector>
23fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
2488bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/interface/dictionary_header_structure_policy.h"
25fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
26fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanaginamespace latinime {
27fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanaginamespace {
28fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
29fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke KuroyanagiTEST(HeaderReadWriteUtilsTest, TestInsertCharactersIntoVector) {
30fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    DictionaryHeaderStructurePolicy::AttributeMap::key_type vector;
31fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
32fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    HeaderReadWriteUtils::insertCharactersIntoVector("", &vector);
33fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_TRUE(vector.empty());
34fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
35fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    static const char *str = "abc-xyz!?";
36fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    HeaderReadWriteUtils::insertCharactersIntoVector(str, &vector);
37fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_EQ(strlen(str) , vector.size());
38fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    for (size_t i = 0; i < vector.size(); ++i) {
39fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi        EXPECT_EQ(str[i], vector[i]);
40fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    }
41fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi}
42fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
43fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke KuroyanagiTEST(HeaderReadWriteUtilsTest, TestAttributeMapForInt) {
44fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    DictionaryHeaderStructurePolicy::AttributeMap attributeMap;
45fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
46fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    // Returns default value if not exists.
47fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_EQ(-1, HeaderReadWriteUtils::readIntAttributeValue(&attributeMap, "", -1));
48fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_EQ(100, HeaderReadWriteUtils::readIntAttributeValue(&attributeMap, "abc", 100));
49fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
50fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    HeaderReadWriteUtils::setIntAttribute(&attributeMap, "abc", 10);
51fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_EQ(10, HeaderReadWriteUtils::readIntAttributeValue(&attributeMap, "abc", 100));
52fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    HeaderReadWriteUtils::setIntAttribute(&attributeMap, "abc", 20);
53fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_EQ(20, HeaderReadWriteUtils::readIntAttributeValue(&attributeMap, "abc", 100));
54fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    HeaderReadWriteUtils::setIntAttribute(&attributeMap, "abcd", 30);
55fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_EQ(30, HeaderReadWriteUtils::readIntAttributeValue(&attributeMap, "abcd", 100));
56fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_EQ(20, HeaderReadWriteUtils::readIntAttributeValue(&attributeMap, "abc", 100));
57fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi}
58fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
59fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke KuroyanagiTEST(HeaderReadWriteUtilsTest, TestAttributeMapCodeForPoints) {
60fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    DictionaryHeaderStructurePolicy::AttributeMap attributeMap;
61fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
62fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    // Returns empty vector if not exists.
63fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_TRUE(HeaderReadWriteUtils::readCodePointVectorAttributeValue(&attributeMap, "").empty());
64fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_TRUE(HeaderReadWriteUtils::readCodePointVectorAttributeValue(
65fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi            &attributeMap, "abc").empty());
66fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
67fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    HeaderReadWriteUtils::setCodePointVectorAttribute(&attributeMap, "abc", {});
68fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_TRUE(HeaderReadWriteUtils::readCodePointVectorAttributeValue(
69fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi            &attributeMap, "abc").empty());
70fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
71fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    const std::vector<int> codePoints = { 0x0, 0x20, 0x1F, 0x100000 };
72fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    HeaderReadWriteUtils::setCodePointVectorAttribute(&attributeMap, "abc", codePoints);
73fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi    EXPECT_EQ(codePoints, HeaderReadWriteUtils::readCodePointVectorAttributeValue(
74fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi            &attributeMap, "abc"));
75fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi}
76fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi
77fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi}  // namespace
78fbddeedff617d101b7617995bdf7c9c7ce7eaf24Keisuke Kuroyanagi}  // namespace latinime
79