38 #include <gtest/gtest.h>
53 return fibonacci(
n-1) + fibonacci(
n-2);
56 using FibonacciMemoizer = decltype(
Memoizer(fibonacci));
58 class FibonacciMemoizerFixture :
public FibonacciMemoizer,
59 public ::testing::Test
62 FibonacciMemoizerFixture()
63 : FibonacciMemoizer(fibonacci)
73 TEST_F(FibonacciMemoizerFixture, Uncached)
75 const auto res10 = fibonacci(10);
78 ASSERT_FALSE(cached(10));
82 EXPECT_EQ((*
this)(10), res10);
85 ASSERT_TRUE(cached(10));
91 TEST_F(FibonacciMemoizerFixture, MultipleValues)
93 const auto res0 = fibonacci(0);
94 const auto res10 = fibonacci(10);
95 const auto res20 = fibonacci(20);
97 EXPECT_EQ((*
this)(0),
res0);
98 EXPECT_EQ((*
this)(10), res10);
99 EXPECT_EQ((*
this)(20), res20);
101 EXPECT_EQ(cacheSize(), 3);
103 EXPECT_TRUE(cached(0));
104 EXPECT_TRUE(cached(10));
105 EXPECT_TRUE(cached(20));
108 EXPECT_FALSE(cached(30));
114 TEST_F(FibonacciMemoizerFixture, CacheFlush)
116 const auto res10 = fibonacci(10);
118 ASSERT_EQ(cacheSize(), 0);
121 EXPECT_EQ((*
this)(10), res10);
122 ASSERT_EQ(cacheSize(), 1);
128 ASSERT_EQ(cacheSize(), 0);