/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertSame; import static org.testng.AssertJUnit.assertTrue; import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; import org.testng.annotations.Test; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class CompareUtilsTest { @SuppressWarnings("unchecked") public void test_constructor() throws Exception { Constructor<?>[] cons = CompareUtils.class.getDeclaredConstructors(); assertEquals(1, cons.length); assertEquals(0, cons[0].getParameterTypes().length); assertEquals(true, Modifier.isPrivate(cons[0].getModifiers())); Constructor<CompareUtils> con = (Constructor<CompareUtils>) cons[0]; con.setAccessible(true); con.newInstance(); } //------------------------------------------------------------------------- public void test_max() { assertEquals(null, CompareUtils.<String>max(null, null)); assertEquals("A", CompareUtils.max(null, "A")); assertEquals("A", CompareUtils.max("A", null)); Integer a = new Integer(1); // need to use new, not autoboxing Integer b = new Integer(1); // need to use new, not autoboxing assertSame(a, CompareUtils.max(a, b)); // as we test for same here assertEquals("B", CompareUtils.max("A", "B")); assertEquals("B", CompareUtils.max("B", "A")); } public void test_min() { assertEquals(null, CompareUtils.<String>min(null, null)); assertEquals("A", CompareUtils.min(null, "A")); assertEquals("A", CompareUtils.min("A", null)); Integer a = new Integer(1); // need to use new, not autoboxing Integer b = new Integer(1); // need to use new, not autoboxing assertSame(a, CompareUtils.min(a, b)); // as we test for same here assertEquals("A", CompareUtils.min("A", "B")); assertEquals("A", CompareUtils.min("B", "A")); } public void test_compareWithNullLow() { assertTrue(CompareUtils.compareWithNullLow(null, null) == 0); assertTrue(CompareUtils.compareWithNullLow(null, "Test") < 0); assertTrue(CompareUtils.compareWithNullLow("Test", null) > 0); assertTrue(CompareUtils.compareWithNullLow("Test", "Test") == 0); assertTrue(CompareUtils.compareWithNullLow("AAAA", "BBBB") == "AAAA".compareTo("BBBB")); } public void test_compareWithNullHigh() { assertTrue(CompareUtils.compareWithNullHigh(null, null) == 0); assertTrue(CompareUtils.compareWithNullHigh(null, "Test") > 0); assertTrue(CompareUtils.compareWithNullHigh("Test", null) < 0); assertTrue(CompareUtils.compareWithNullHigh("Test", "Test") == 0); assertTrue(CompareUtils.compareWithNullHigh("AAAA", "BBBB") == "AAAA".compareTo("BBBB")); } //------------------------------------------------------------------------- public void test_closeEquals() { assertEquals(CompareUtils.closeEquals(0.2d, 0.2d), true); assertEquals(CompareUtils.closeEquals(0.2d, 0.3d), false); assertEquals(CompareUtils.closeEquals(0.2d, 0.1d), false); assertEquals(CompareUtils.closeEquals(0.2d, 0.2000000000000001d), true); assertEquals(CompareUtils.closeEquals(0.2d, 0.1999999999999999d), true); assertEquals(CompareUtils.closeEquals(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), true); assertEquals(CompareUtils.closeEquals(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), true); assertEquals(CompareUtils.closeEquals(Double.NaN, Double.NaN), false); assertEquals(CompareUtils.closeEquals(Double.POSITIVE_INFINITY, Double.NaN), false); assertEquals(CompareUtils.closeEquals(Double.NaN, Double.POSITIVE_INFINITY), false); assertEquals(CompareUtils.closeEquals(Double.NEGATIVE_INFINITY, Double.NaN), false); assertEquals(CompareUtils.closeEquals(Double.NaN, Double.NEGATIVE_INFINITY), false); } public void test_closeEquals_tolerance() { assertEquals(CompareUtils.closeEquals(0.2d, 0.2d, 0.0001d), true); assertEquals(CompareUtils.closeEquals(0.2d, 0.3d, 0.0001d), false); assertEquals(CompareUtils.closeEquals(0.2d, 0.1d, 0.0001d), false); assertEquals(CompareUtils.closeEquals(0.2d, 0.2002d, 0.0001d), false); assertEquals(CompareUtils.closeEquals(0.2d, 0.2001d, 0.0001d), true); assertEquals(CompareUtils.closeEquals(0.2d, 0.20009d, 0.0001d), true); assertEquals(CompareUtils.closeEquals(0.2d, 0.2000001d, 0.0001d), true); assertEquals(CompareUtils.closeEquals(0.2d, 0.1999999d, 0.0001d), true); assertEquals(CompareUtils.closeEquals(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, 0.0001d), true); assertEquals(CompareUtils.closeEquals(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, 0.0001d), true); assertEquals(CompareUtils.closeEquals(Double.NaN, Double.NaN, 0.0001d), false); assertEquals(CompareUtils.closeEquals(Double.POSITIVE_INFINITY, Double.NaN, 0.0001d), false); assertEquals(CompareUtils.closeEquals(Double.NaN, Double.POSITIVE_INFINITY, 0.0001d), false); assertEquals(CompareUtils.closeEquals(Double.NEGATIVE_INFINITY, Double.NaN, 0.0001d), false); assertEquals(CompareUtils.closeEquals(Double.NaN, Double.NEGATIVE_INFINITY, 0.0001d), false); } public void test_compareWithTolerance() { assertEquals(CompareUtils.compareWithTolerance(0.2d, 0.2d, 0.0001d), 0); assertEquals(CompareUtils.compareWithTolerance(0.2d, 0.3d, 0.0001d), -1); assertEquals(CompareUtils.compareWithTolerance(0.2d, 0.1d, 0.0001d), 1); assertEquals(CompareUtils.compareWithTolerance(0.2d, 0.2002d, 0.0001d), -1); assertEquals(CompareUtils.compareWithTolerance(0.2d, 0.2001d, 0.0001d), 0); assertEquals(CompareUtils.compareWithTolerance(0.2d, 0.20009d, 0.0001d), 0); assertEquals(CompareUtils.compareWithTolerance(0.2d, 0.2000001d, 0.0001d), 0); assertEquals(CompareUtils.compareWithTolerance(0.2d, 0.1999999d, 0.0001d), 0); assertEquals(CompareUtils.compareWithTolerance(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, 0.0001d), 0); assertEquals(CompareUtils.compareWithTolerance(Double.POSITIVE_INFINITY, 1.0d, 0.0001d), 1); assertEquals(CompareUtils.compareWithTolerance(1.0d, Double.POSITIVE_INFINITY, 0.0001d), -1); assertEquals(CompareUtils.compareWithTolerance(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, 0.0001d), 0); assertEquals(CompareUtils.compareWithTolerance(Double.NEGATIVE_INFINITY, 1.0d, 0.0001d), -1); assertEquals(CompareUtils.compareWithTolerance(1.0d, Double.NEGATIVE_INFINITY, 0.0001d), 1); assertEquals(CompareUtils.compareWithTolerance(Double.NaN, Double.NaN, 0.0001d), 1); // weird case } }