140b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi/*
240b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project
340b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi *
440b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
540b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi * you may not use this file except in compliance with the License.
640b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi * You may obtain a copy of the License at
740b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi *
840b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi *      http://www.apache.org/licenses/LICENSE-2.0
940b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi *
1040b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
1140b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
1240b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1340b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi * See the License for the specific language governing permissions and
1440b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi * limitations under the License.
1540b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi */
1640b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
1740b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi#include "suggest/core/dicnode/dic_node_pool.h"
1840b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
1940b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi#include <gtest/gtest.h>
2040b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
2140b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanaginamespace latinime {
2240b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanaginamespace {
2340b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
2440b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke KuroyanagiTEST(DicNodePoolTest, TestGet) {
2540b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    static const int CAPACITY = 10;
2640b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    DicNodePool dicNodePool(CAPACITY);
2740b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
2840b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    for (int i = 0; i < CAPACITY; ++i) {
2940b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi        EXPECT_NE(nullptr, dicNodePool.getInstance());
3040b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    }
3140b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    EXPECT_EQ(nullptr, dicNodePool.getInstance());
3240b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi}
3340b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
3440b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke KuroyanagiTEST(DicNodePoolTest, TestPlaceBack) {
3540b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    static const int CAPACITY = 1;
3640b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    DicNodePool dicNodePool(CAPACITY);
3740b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
3840b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    DicNode *const dicNode = dicNodePool.getInstance();
3940b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    EXPECT_NE(nullptr, dicNode);
4040b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    EXPECT_EQ(nullptr, dicNodePool.getInstance());
4140b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    dicNodePool.placeBackInstance(dicNode);
4240b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    EXPECT_EQ(dicNode, dicNodePool.getInstance());
4340b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi}
4440b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
4540b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke KuroyanagiTEST(DicNodePoolTest, TestReset) {
4640b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    static const int CAPACITY_SMALL = 2;
4740b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    static const int CAPACITY_LARGE = 10;
4840b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    DicNodePool dicNodePool(CAPACITY_SMALL);
4940b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
5040b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    for (int i = 0; i < CAPACITY_SMALL; ++i) {
5140b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi        EXPECT_NE(nullptr, dicNodePool.getInstance());
5240b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    }
5340b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    EXPECT_EQ(nullptr, dicNodePool.getInstance());
5440b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
5540b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    dicNodePool.reset(CAPACITY_LARGE);
5640b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    for (int i = 0; i < CAPACITY_LARGE; ++i) {
5740b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi        EXPECT_NE(nullptr, dicNodePool.getInstance());
5840b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    }
5940b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    EXPECT_EQ(nullptr, dicNodePool.getInstance());
6040b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
6140b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    dicNodePool.reset(CAPACITY_SMALL);
6240b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    for (int i = 0; i < CAPACITY_SMALL; ++i) {
6340b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi        EXPECT_NE(nullptr, dicNodePool.getInstance());
6440b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    }
6540b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi    EXPECT_EQ(nullptr, dicNodePool.getInstance());
6640b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi}
6740b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi
6840b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi}  // namespace
6940b6d6cbd11f4cdcff2ffbb756e8a4e3fb148ab7Keisuke Kuroyanagi}  // namespace latinime
70