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