Home | History | Annotate | Download | only in utils
      1 /*
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include "scoped_hashtable.h"
     18 
     19 #include "common_runtime_test.h"
     20 
     21 using utils::ScopedHashtable;
     22 
     23 namespace art {
     24 
     25 class Value {
     26  public:
     27   explicit Value(int v):value_(v) {}
     28   int value_;
     29 };
     30 
     31 class ScopedHashtableTest : public testing::Test {};
     32 
     33 TEST_F(ScopedHashtableTest, Basics) {
     34   ScopedHashtable<int, Value*> sht;
     35   // Check table is empty when no scope is open.
     36   EXPECT_TRUE(NULL == sht.Lookup(1));
     37 
     38   // Check table is empty when scope open.
     39   sht.OpenScope();
     40   EXPECT_TRUE(NULL == sht.Lookup(1));
     41   // Check table is empty after closing scope.
     42   EXPECT_EQ(sht.CloseScope(), true);
     43   // Check closing scope on empty table is no-op.
     44   EXPECT_EQ(sht.CloseScope(), false);
     45   // Check that find in current scope works.
     46   sht.OpenScope();
     47   sht.Add(1, new Value(1));
     48   EXPECT_EQ(sht.Lookup(1)->value_, 1);
     49   // Check that updating values in current scope works.
     50   sht.Add(1, new Value(2));
     51   EXPECT_EQ(sht.Lookup(1)->value_, 2);
     52   // Check that find works in previous scope.
     53   sht.OpenScope();
     54   EXPECT_EQ(sht.Lookup(1)->value_, 2);
     55   // Check that shadowing scopes works.
     56   sht.Add(1, new Value(3));
     57   EXPECT_EQ(sht.Lookup(1)->value_, 3);
     58   // Check that having multiple keys work correctly.
     59   sht.Add(2, new Value(4));
     60   EXPECT_EQ(sht.Lookup(1)->value_, 3);
     61   EXPECT_EQ(sht.Lookup(2)->value_, 4);
     62   // Check that scope removal works corectly.
     63   sht.CloseScope();
     64   EXPECT_EQ(sht.Lookup(1)->value_, 2);
     65   EXPECT_TRUE(NULL == sht.Lookup(2));
     66 }
     67 
     68 }  // namespace art
     69