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