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