• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Guava Authors
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 package com.google.common.cache;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import junit.framework.TestCase;
22 
23 /**
24  * Unit test for {@link CacheStats}.
25  *
26  * @author Charles Fry
27  */
28 public class CacheStatsTest extends TestCase {
29 
testEmpty()30   public void testEmpty() {
31     CacheStats stats = new CacheStats(0, 0, 0, 0, 0, 0);
32     assertEquals(0, stats.requestCount());
33     assertEquals(0, stats.hitCount());
34     assertThat(stats.hitRate()).isEqualTo(1.0);
35     assertEquals(0, stats.missCount());
36     assertThat(stats.missRate()).isEqualTo(0.0);
37     assertEquals(0, stats.loadSuccessCount());
38     assertEquals(0, stats.loadExceptionCount());
39     assertThat(stats.loadExceptionRate()).isEqualTo(0.0);
40     assertEquals(0, stats.loadCount());
41     assertEquals(0, stats.totalLoadTime());
42     assertThat(stats.averageLoadPenalty()).isEqualTo(0.0);
43     assertEquals(0, stats.evictionCount());
44   }
45 
testSingle()46   public void testSingle() {
47     CacheStats stats = new CacheStats(11, 13, 17, 19, 23, 27);
48     assertEquals(24, stats.requestCount());
49     assertEquals(11, stats.hitCount());
50     assertThat(stats.hitRate()).isEqualTo(11.0 / 24);
51     assertEquals(13, stats.missCount());
52     assertThat(stats.missRate()).isEqualTo(13.0 / 24);
53     assertEquals(17, stats.loadSuccessCount());
54     assertEquals(19, stats.loadExceptionCount());
55     assertThat(stats.loadExceptionRate()).isEqualTo(19.0 / 36);
56     assertEquals(17 + 19, stats.loadCount());
57     assertEquals(23, stats.totalLoadTime());
58     assertThat(stats.averageLoadPenalty()).isEqualTo(23.0 / (17 + 19));
59     assertEquals(27, stats.evictionCount());
60   }
61 
testMinus()62   public void testMinus() {
63     CacheStats one = new CacheStats(11, 13, 17, 19, 23, 27);
64     CacheStats two = new CacheStats(53, 47, 43, 41, 37, 31);
65 
66     CacheStats diff = two.minus(one);
67     assertEquals(76, diff.requestCount());
68     assertEquals(42, diff.hitCount());
69     assertThat(diff.hitRate()).isEqualTo(42.0 / 76);
70     assertEquals(34, diff.missCount());
71     assertThat(diff.missRate()).isEqualTo(34.0 / 76);
72     assertEquals(26, diff.loadSuccessCount());
73     assertEquals(22, diff.loadExceptionCount());
74     assertThat(diff.loadExceptionRate()).isEqualTo(22.0 / 48);
75     assertEquals(26 + 22, diff.loadCount());
76     assertEquals(14, diff.totalLoadTime());
77     assertThat(diff.averageLoadPenalty()).isEqualTo(14.0 / (26 + 22));
78     assertEquals(4, diff.evictionCount());
79 
80     assertEquals(new CacheStats(0, 0, 0, 0, 0, 0), one.minus(two));
81   }
82 
testPlus()83   public void testPlus() {
84     CacheStats one = new CacheStats(11, 13, 15, 13, 11, 9);
85     CacheStats two = new CacheStats(53, 47, 41, 39, 37, 35);
86 
87     CacheStats sum = two.plus(one);
88     assertEquals(124, sum.requestCount());
89     assertEquals(64, sum.hitCount());
90     assertThat(sum.hitRate()).isEqualTo(64.0 / 124);
91     assertEquals(60, sum.missCount());
92     assertThat(sum.missRate()).isEqualTo(60.0 / 124);
93     assertEquals(56, sum.loadSuccessCount());
94     assertEquals(52, sum.loadExceptionCount());
95     assertThat(sum.loadExceptionRate()).isEqualTo(52.0 / 108);
96     assertEquals(56 + 52, sum.loadCount());
97     assertEquals(48, sum.totalLoadTime());
98     assertThat(sum.averageLoadPenalty()).isEqualTo(48.0 / (56 + 52));
99     assertEquals(44, sum.evictionCount());
100 
101     assertEquals(sum, one.plus(two));
102   }
103 
testPlusLarge()104   public void testPlusLarge() {
105     CacheStats maxCacheStats =
106         new CacheStats(
107             Long.MAX_VALUE,
108             Long.MAX_VALUE,
109             Long.MAX_VALUE,
110             Long.MAX_VALUE,
111             Long.MAX_VALUE,
112             Long.MAX_VALUE);
113     CacheStats smallCacheStats = new CacheStats(1, 1, 1, 1, 1, 1);
114 
115     CacheStats sum = smallCacheStats.plus(maxCacheStats);
116     assertEquals(Long.MAX_VALUE, sum.requestCount());
117     assertEquals(Long.MAX_VALUE, sum.hitCount());
118     assertThat(sum.hitRate()).isEqualTo(1.0);
119     assertEquals(Long.MAX_VALUE, sum.missCount());
120     assertThat(sum.missRate()).isEqualTo(1.0);
121     assertEquals(Long.MAX_VALUE, sum.loadSuccessCount());
122     assertEquals(Long.MAX_VALUE, sum.loadExceptionCount());
123     assertThat(sum.loadExceptionRate()).isEqualTo(1.0);
124     assertEquals(Long.MAX_VALUE, sum.loadCount());
125     assertEquals(Long.MAX_VALUE, sum.totalLoadTime());
126     assertThat(sum.averageLoadPenalty()).isEqualTo(1.0);
127     assertEquals(Long.MAX_VALUE, sum.evictionCount());
128 
129     assertEquals(sum, maxCacheStats.plus(smallCacheStats));
130   }
131 }
132