Skip to content

Commit

Permalink
Migrate JUnit double equality assertions to Truth.
Browse files Browse the repository at this point in the history
This addresses some https://errorprone.info/bugpattern/JUnit3FloatingPointComparisonWithoutDelta warnings, and it moves us off the bug-prone 3-`double`-arg `assertEquals` overload.

In some cases, it results in a slightly awkward mix of JUnit and Truth assertions. I think it's still worthwhile for the benefits, but obviously we can consider migrating to even more Truth assertions in the future. (We would have to be a little careful about mass migration of arbitrary assertions, since migration might [replace `assertEquals` with `isEqualTo` for testing `equals` implementations](google/truth#268), etc. But we could look at migrating, say, all equality assertions on `int` and similar types—assuming that we never use those assertions to differentiate between, say, `Integer(0)` and `Long(0)`, which Truth treats as equivalent....)

PiperOrigin-RevId: 649135877
  • Loading branch information
cpovirk authored and Google Java Core Libraries committed Jul 3, 2024
1 parent 8b0d007 commit c8829bf
Show file tree
Hide file tree
Showing 26 changed files with 223 additions and 180 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@ public void testGet_primitives() {
assertEquals(Long.valueOf(0), ArbitraryInstances.get(Long.class));
assertEquals(Float.valueOf(0), ArbitraryInstances.get(float.class));
assertEquals(Float.valueOf(0), ArbitraryInstances.get(Float.class));
assertEquals(Double.valueOf(0), ArbitraryInstances.get(double.class));
assertEquals(Double.valueOf(0), ArbitraryInstances.get(Double.class));
assertThat(ArbitraryInstances.get(double.class)).isEqualTo(Double.valueOf(0));
assertThat(ArbitraryInstances.get(Double.class)).isEqualTo(Double.valueOf(0));
assertEquals(UnsignedInteger.ZERO, ArbitraryInstances.get(UnsignedInteger.class));
assertEquals(UnsignedLong.ZERO, ArbitraryInstances.get(UnsignedLong.class));
assertEquals(0, ArbitraryInstances.get(BigDecimal.class).intValue());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.google.common.base;

import static com.google.common.truth.Truth.assertThat;

import com.google.common.annotations.GwtIncompatible;
import junit.framework.TestCase;

Expand All @@ -34,7 +36,7 @@ public void testGetDefaultValue() {
assertEquals(0, Defaults.defaultValue(int.class).intValue());
assertEquals(0, Defaults.defaultValue(long.class).longValue());
assertEquals(0.0f, Defaults.defaultValue(float.class).floatValue());
assertEquals(0.0d, Defaults.defaultValue(double.class).doubleValue());
assertThat(Defaults.defaultValue(double.class).doubleValue()).isEqualTo(0.0d);
assertNull(Defaults.defaultValue(void.class));
assertNull(Defaults.defaultValue(String.class));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.google.common.cache;

import static com.google.common.truth.Truth.assertThat;

import com.google.common.cache.AbstractCache.SimpleStatsCounter;
import com.google.common.cache.AbstractCache.StatsCounter;
import com.google.common.collect.ImmutableList;
Expand Down Expand Up @@ -103,14 +105,14 @@ public void testEmptySimpleStats() {
CacheStats stats = counter.snapshot();
assertEquals(0, stats.requestCount());
assertEquals(0, stats.hitCount());
assertEquals(1.0, stats.hitRate());
assertThat(stats.hitRate()).isEqualTo(1.0);
assertEquals(0, stats.missCount());
assertEquals(0.0, stats.missRate());
assertThat(stats.missRate()).isEqualTo(0.0);
assertEquals(0, stats.loadSuccessCount());
assertEquals(0, stats.loadExceptionCount());
assertEquals(0, stats.loadCount());
assertEquals(0, stats.totalLoadTime());
assertEquals(0.0, stats.averageLoadPenalty());
assertThat(stats.averageLoadPenalty()).isEqualTo(0.0);
assertEquals(0, stats.evictionCount());
}

Expand All @@ -135,15 +137,15 @@ public void testSingleSimpleStats() {
int requestCount = 11 + 23;
assertEquals(requestCount, stats.requestCount());
assertEquals(11, stats.hitCount());
assertEquals(11.0 / requestCount, stats.hitRate());
assertThat(stats.hitRate()).isEqualTo(11.0 / requestCount);
int missCount = 23;
assertEquals(missCount, stats.missCount());
assertEquals(((double) missCount) / requestCount, stats.missRate());
assertThat(stats.missRate()).isEqualTo(((double) missCount) / requestCount);
assertEquals(13, stats.loadSuccessCount());
assertEquals(17, stats.loadExceptionCount());
assertEquals(13 + 17, stats.loadCount());
assertEquals(214, stats.totalLoadTime());
assertEquals(214.0 / (13 + 17), stats.averageLoadPenalty());
assertThat(stats.averageLoadPenalty()).isEqualTo(214.0 / (13 + 17));
assertEquals(27, stats.evictionCount());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.google.common.cache;

import static com.google.common.truth.Truth.assertThat;

import junit.framework.TestCase;

/**
Expand All @@ -29,31 +31,31 @@ public void testEmpty() {
CacheStats stats = new CacheStats(0, 0, 0, 0, 0, 0);
assertEquals(0, stats.requestCount());
assertEquals(0, stats.hitCount());
assertEquals(1.0, stats.hitRate());
assertThat(stats.hitRate()).isEqualTo(1.0);
assertEquals(0, stats.missCount());
assertEquals(0.0, stats.missRate());
assertThat(stats.missRate()).isEqualTo(0.0);
assertEquals(0, stats.loadSuccessCount());
assertEquals(0, stats.loadExceptionCount());
assertEquals(0.0, stats.loadExceptionRate());
assertThat(stats.loadExceptionRate()).isEqualTo(0.0);
assertEquals(0, stats.loadCount());
assertEquals(0, stats.totalLoadTime());
assertEquals(0.0, stats.averageLoadPenalty());
assertThat(stats.averageLoadPenalty()).isEqualTo(0.0);
assertEquals(0, stats.evictionCount());
}

public void testSingle() {
CacheStats stats = new CacheStats(11, 13, 17, 19, 23, 27);
assertEquals(24, stats.requestCount());
assertEquals(11, stats.hitCount());
assertEquals(11.0 / 24, stats.hitRate());
assertThat(stats.hitRate()).isEqualTo(11.0 / 24);
assertEquals(13, stats.missCount());
assertEquals(13.0 / 24, stats.missRate());
assertThat(stats.missRate()).isEqualTo(13.0 / 24);
assertEquals(17, stats.loadSuccessCount());
assertEquals(19, stats.loadExceptionCount());
assertEquals(19.0 / 36, stats.loadExceptionRate());
assertThat(stats.loadExceptionRate()).isEqualTo(19.0 / 36);
assertEquals(17 + 19, stats.loadCount());
assertEquals(23, stats.totalLoadTime());
assertEquals(23.0 / (17 + 19), stats.averageLoadPenalty());
assertThat(stats.averageLoadPenalty()).isEqualTo(23.0 / (17 + 19));
assertEquals(27, stats.evictionCount());
}

Expand All @@ -64,15 +66,15 @@ public void testMinus() {
CacheStats diff = two.minus(one);
assertEquals(76, diff.requestCount());
assertEquals(42, diff.hitCount());
assertEquals(42.0 / 76, diff.hitRate());
assertThat(diff.hitRate()).isEqualTo(42.0 / 76);
assertEquals(34, diff.missCount());
assertEquals(34.0 / 76, diff.missRate());
assertThat(diff.missRate()).isEqualTo(34.0 / 76);
assertEquals(26, diff.loadSuccessCount());
assertEquals(22, diff.loadExceptionCount());
assertEquals(22.0 / 48, diff.loadExceptionRate());
assertThat(diff.loadExceptionRate()).isEqualTo(22.0 / 48);
assertEquals(26 + 22, diff.loadCount());
assertEquals(14, diff.totalLoadTime());
assertEquals(14.0 / (26 + 22), diff.averageLoadPenalty());
assertThat(diff.averageLoadPenalty()).isEqualTo(14.0 / (26 + 22));
assertEquals(4, diff.evictionCount());

assertEquals(new CacheStats(0, 0, 0, 0, 0, 0), one.minus(two));
Expand All @@ -85,15 +87,15 @@ public void testPlus() {
CacheStats sum = two.plus(one);
assertEquals(124, sum.requestCount());
assertEquals(64, sum.hitCount());
assertEquals(64.0 / 124, sum.hitRate());
assertThat(sum.hitRate()).isEqualTo(64.0 / 124);
assertEquals(60, sum.missCount());
assertEquals(60.0 / 124, sum.missRate());
assertThat(sum.missRate()).isEqualTo(60.0 / 124);
assertEquals(56, sum.loadSuccessCount());
assertEquals(52, sum.loadExceptionCount());
assertEquals(52.0 / 108, sum.loadExceptionRate());
assertThat(sum.loadExceptionRate()).isEqualTo(52.0 / 108);
assertEquals(56 + 52, sum.loadCount());
assertEquals(48, sum.totalLoadTime());
assertEquals(48.0 / (56 + 52), sum.averageLoadPenalty());
assertThat(sum.averageLoadPenalty()).isEqualTo(48.0 / (56 + 52));
assertEquals(44, sum.evictionCount());

assertEquals(sum, one.plus(two));
Expand All @@ -113,15 +115,15 @@ public void testPlusLarge() {
CacheStats sum = smallCacheStats.plus(maxCacheStats);
assertEquals(Long.MAX_VALUE, sum.requestCount());
assertEquals(Long.MAX_VALUE, sum.hitCount());
assertEquals(1.0, sum.hitRate());
assertThat(sum.hitRate()).isEqualTo(1.0);
assertEquals(Long.MAX_VALUE, sum.missCount());
assertEquals(1.0, sum.missRate());
assertThat(sum.missRate()).isEqualTo(1.0);
assertEquals(Long.MAX_VALUE, sum.loadSuccessCount());
assertEquals(Long.MAX_VALUE, sum.loadExceptionCount());
assertEquals(1.0, sum.loadExceptionRate());
assertThat(sum.loadExceptionRate()).isEqualTo(1.0);
assertEquals(Long.MAX_VALUE, sum.loadCount());
assertEquals(Long.MAX_VALUE, sum.totalLoadTime());
assertEquals(1.0, sum.averageLoadPenalty());
assertThat(sum.averageLoadPenalty()).isEqualTo(1.0);
assertEquals(Long.MAX_VALUE, sum.evictionCount());

assertEquals(sum, maxCacheStats.plus(smallCacheStats));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ public void testStats() {
CacheStats stats = cache.stats();
assertEquals(1, stats.requestCount());
assertEquals(0, stats.hitCount());
assertEquals(0.0, stats.hitRate());
assertThat(stats.hitRate()).isEqualTo(0.0);
assertEquals(1, stats.missCount());
assertEquals(1.0, stats.missRate());
assertThat(stats.missRate()).isEqualTo(1.0);
assertEquals(1, stats.loadCount());
long totalLoadTime = stats.totalLoadTime();
assertTrue(totalLoadTime >= 0);
Expand All @@ -94,9 +94,9 @@ public void testStats() {
stats = cache.stats();
assertEquals(2, stats.requestCount());
assertEquals(1, stats.hitCount());
assertEquals(1.0 / 2, stats.hitRate());
assertThat(stats.hitRate()).isEqualTo(1.0 / 2);
assertEquals(1, stats.missCount());
assertEquals(1.0 / 2, stats.missRate());
assertThat(stats.missRate()).isEqualTo(1.0 / 2);
assertEquals(1, stats.loadCount());
assertEquals(0, stats.evictionCount());

Expand All @@ -105,9 +105,9 @@ public void testStats() {
stats = cache.stats();
assertEquals(3, stats.requestCount());
assertEquals(1, stats.hitCount());
assertEquals(1.0 / 3, stats.hitRate());
assertThat(stats.hitRate()).isEqualTo(1.0 / 3);
assertEquals(2, stats.missCount());
assertEquals(2.0 / 3, stats.missRate());
assertThat(stats.missRate()).isEqualTo(2.0 / 3);
assertEquals(2, stats.loadCount());
assertTrue(stats.totalLoadTime() >= totalLoadTime);
totalLoadTime = stats.totalLoadTime();
Expand All @@ -119,9 +119,9 @@ public void testStats() {
stats = cache.stats();
assertEquals(4, stats.requestCount());
assertEquals(1, stats.hitCount());
assertEquals(1.0 / 4, stats.hitRate());
assertThat(stats.hitRate()).isEqualTo(1.0 / 4);
assertEquals(3, stats.missCount());
assertEquals(3.0 / 4, stats.missRate());
assertThat(stats.missRate()).isEqualTo(3.0 / 4);
assertEquals(3, stats.loadCount());
assertTrue(stats.totalLoadTime() >= totalLoadTime);
assertTrue(stats.averageLoadPenalty() >= 0.0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.google.common.collect;

import static com.google.common.collect.Maps.immutableEntry;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;

import com.google.common.collect.testing.MapTestSuiteBuilder;
Expand Down Expand Up @@ -110,7 +111,7 @@ public void testCopyOf_map_valid() {
assertEquals(0, zero);

Double pi = map.getInstance(Double.class);
assertEquals(Math.PI, pi, 0.0);
assertThat(pi).isEqualTo(Math.PI);

assertSame(map, ImmutableClassToInstanceMap.copyOf(map));
}
Expand Down Expand Up @@ -140,7 +141,7 @@ public void testCopyOf_imap_valid() {
assertEquals(0, zero);

Double pi = map.getInstance(Double.class);
assertEquals(Math.PI, pi, 0.0);
assertThat(pi).isEqualTo(Math.PI);
}

public void testPrimitiveAndWrapper() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ public void testCreateAndCheckMitz32BloomFilterWithKnownFalsePositives() {
assertEquals(knownNumberOfFalsePositives, numFpp);
double expectedReportedFpp = (double) knownNumberOfFalsePositives / numInsertions;
double actualReportedFpp = bf.expectedFpp();
assertEquals(expectedReportedFpp, actualReportedFpp, 0.00015);
assertThat(actualReportedFpp).isWithin(0.00015).of(expectedReportedFpp);
}

public void testCreateAndCheckBloomFilterWithKnownFalsePositives64() {
Expand Down Expand Up @@ -166,7 +166,7 @@ public void testCreateAndCheckBloomFilterWithKnownFalsePositives64() {
assertEquals(knownNumberOfFalsePositives, numFpp);
double expectedReportedFpp = (double) knownNumberOfFalsePositives / numInsertions;
double actualReportedFpp = bf.expectedFpp();
assertEquals(expectedReportedFpp, actualReportedFpp, 0.00033);
assertThat(actualReportedFpp).isWithin(0.00033).of(expectedReportedFpp);
}

public void testCreateAndCheckBloomFilterWithKnownUtf8FalsePositives64() {
Expand Down Expand Up @@ -209,7 +209,7 @@ public void testCreateAndCheckBloomFilterWithKnownUtf8FalsePositives64() {
assertEquals(knownNumberOfFalsePositives, numFpp);
double expectedReportedFpp = (double) knownNumberOfFalsePositives / numInsertions;
double actualReportedFpp = bf.expectedFpp();
assertEquals(expectedReportedFpp, actualReportedFpp, 0.00033);
assertThat(actualReportedFpp).isWithin(0.00033).of(expectedReportedFpp);
}

/** Sanity checking with many combinations of false positive rates and expected insertions */
Expand Down Expand Up @@ -323,7 +323,7 @@ public void testCopy() {
public void testExpectedFpp() {
BloomFilter<Object> bf = BloomFilter.create(HashTestUtils.BAD_FUNNEL, 10, 0.03);
double fpp = bf.expectedFpp();
assertEquals(0.0, fpp);
assertThat(fpp).isEqualTo(0.0);
// usually completed in less than 200 iterations
while (fpp != 1.0) {
boolean changed = bf.put(new Object());
Expand Down Expand Up @@ -485,7 +485,7 @@ public void testJavaSerialization() {
for (int i = 0; i < 10; i++) {
assertTrue(copy.mightContain(Ints.toByteArray(i)));
}
assertEquals(bf.expectedFpp(), copy.expectedFpp());
assertThat(copy.expectedFpp()).isEqualTo(bf.expectedFpp());

SerializableTester.reserializeAndAssert(bf);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.common.hash;

import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;

Expand Down Expand Up @@ -353,7 +354,7 @@ static void checkAvalanche(HashFunction function, int trials, double epsilon) {
// measure probability and assert it's within margin of error
for (int j = 0; j < hashBits; j++) {
double prob = (double) diff[j] / (double) (diff[j] + same[j]);
Assert.assertEquals(0.50d, prob, epsilon);
assertThat(prob).isWithin(epsilon).of(0.50d);
}
}
}
Expand Down Expand Up @@ -450,7 +451,7 @@ static void check2BitAvalanche(HashFunction function, int trials, double epsilon
// measure probability and assert it's within margin of error
for (int j = 0; j < hashBits; j++) {
double prob = (double) diff[j] / (double) (diff[j] + same[j]);
Assert.assertEquals(0.50d, prob, epsilon);
assertThat(prob).isWithin(epsilon).of(0.50d);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,14 +178,14 @@ public void testNewDataInput_readLine() {
public void testNewDataInput_readFloat() {
byte[] data = {0x12, 0x34, 0x56, 0x78, 0x76, 0x54, 0x32, 0x10};
ByteArrayDataInput in = ByteStreams.newDataInput(data);
assertEquals(Float.intBitsToFloat(0x12345678), in.readFloat(), 0.0);
assertEquals(Float.intBitsToFloat(0x76543210), in.readFloat(), 0.0);
assertThat(in.readFloat()).isEqualTo(Float.intBitsToFloat(0x12345678));
assertThat(in.readFloat()).isEqualTo(Float.intBitsToFloat(0x76543210));
}

public void testNewDataInput_readDouble() {
byte[] data = {0x12, 0x34, 0x56, 0x78, 0x76, 0x54, 0x32, 0x10};
ByteArrayDataInput in = ByteStreams.newDataInput(data);
assertEquals(Double.longBitsToDouble(0x1234567876543210L), in.readDouble(), 0.0);
assertThat(in.readDouble()).isEqualTo(Double.longBitsToDouble(0x1234567876543210L));
}

public void testNewDataInput_readUTF() {
Expand Down
Loading

0 comments on commit c8829bf

Please sign in to comment.