108894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi/* 208894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project 308894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * 408894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); 508894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * you may not use this file except in compliance with the License. 608894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * You may obtain a copy of the License at 708894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * 808894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 908894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * 1008894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 1108894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, 1208894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1308894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * See the License for the specific language governing permissions and 1408894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi * limitations under the License. 1508894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi */ 1608894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 1788bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/structure/v4/content/probability_entry.h" 1808894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 1908894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi#include <gtest/gtest.h> 2008894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 2108894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi#include "defines.h" 2208894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 2308894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanaginamespace latinime { 2408894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanaginamespace { 2508894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 2608894842662eff666a713a7f4deb79204a322f8cKeisuke KuroyanagiTEST(ProbabilityEntryTest, TestEncodeDecode) { 2708894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi const int flag = 0xFF; 2808894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi const int probability = 10; 2908894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 3008894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi const ProbabilityEntry entry(flag, probability); 3108894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi const uint64_t encodedEntry = entry.encode(false /* hasHistoricalInfo */); 3208894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi const ProbabilityEntry decodedEntry = 3308894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi ProbabilityEntry::decode(encodedEntry, false /* hasHistoricalInfo */); 3408894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi EXPECT_EQ(0xFF0Aull, encodedEntry); 3508894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi EXPECT_EQ(flag, decodedEntry.getFlags()); 3608894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi EXPECT_EQ(probability, decodedEntry.getProbability()); 3708894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi} 3808894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 3908894842662eff666a713a7f4deb79204a322f8cKeisuke KuroyanagiTEST(ProbabilityEntryTest, TestEncodeDecodeWithHistoricalInfo) { 4008894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi const int flag = 0xF0; 4108894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi const int timestamp = 0x3FFFFFFF; 422383575d2d695efcca093e69ed2daa88aec58862Keisuke Kuroyanagi const int count = 0xABCD; 4308894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 442383575d2d695efcca093e69ed2daa88aec58862Keisuke Kuroyanagi const HistoricalInfo historicalInfo(timestamp, 0 /* level */, count); 45623067a183caf62fbe33223675430a246b5ae13dKeisuke Kuroyanagi const ProbabilityEntry entry(flag, &historicalInfo); 4608894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 4708894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi const uint64_t encodedEntry = entry.encode(true /* hasHistoricalInfo */); 482383575d2d695efcca093e69ed2daa88aec58862Keisuke Kuroyanagi EXPECT_EQ(0xF03FFFFFFFABCDull, encodedEntry); 4908894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi const ProbabilityEntry decodedEntry = 5008894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi ProbabilityEntry::decode(encodedEntry, true /* hasHistoricalInfo */); 5108894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 5208894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi EXPECT_EQ(flag, decodedEntry.getFlags()); 53287e155e44b4e937f2a62d010805702bc813c43bKeisuke Kuroyanagi EXPECT_EQ(timestamp, decodedEntry.getHistoricalInfo()->getTimestamp()); 5408894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi EXPECT_EQ(count, decodedEntry.getHistoricalInfo()->getCount()); 5508894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi} 5608894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi 5708894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi} // namespace 5808894842662eff666a713a7f4deb79204a322f8cKeisuke Kuroyanagi} // namespace latinime 59