Home | History | Annotate | Download | only in analysis
      1 /*******************************************************************************
      2  * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
      3  * All rights reserved. This program and the accompanying materials
      4  * are made available under the terms of the Eclipse Public License v1.0
      5  * which accompanies this distribution, and is available at
      6  * http://www.eclipse.org/legal/epl-v10.html
      7  *
      8  * Contributors:
      9  *    Marc R. Hoffmann - initial API and implementation
     10  *
     11  *******************************************************************************/
     12 package org.jacoco.core.analysis;
     13 
     14 import static org.jacoco.core.analysis.ICoverageNode.ElementType.GROUP;
     15 import static org.junit.Assert.assertEquals;
     16 import static org.junit.Assert.assertTrue;
     17 
     18 import java.util.Comparator;
     19 
     20 import org.jacoco.core.analysis.ICoverageNode.CounterEntity;
     21 import org.jacoco.core.internal.analysis.CounterImpl;
     22 import org.junit.Test;
     23 
     24 /**
     25  * Unit tests for {@link CounterComparator}.
     26  */
     27 public class CounterComparatorTest {
     28 
     29 	@Test
     30 	public void testTotalItemsComparator() {
     31 		final Comparator<ICounter> cmp = CounterComparator.TOTALITEMS;
     32 		assertCmpLess(cmp, 19, 5, 19, 6);
     33 		assertCmpEquals(cmp, 20, 5, 19, 6);
     34 		assertCmpGreater(cmp, 21, 5, 19, 6);
     35 	}
     36 
     37 	@Test
     38 	public void testCoveredItemsComparator() {
     39 		final Comparator<ICounter> cmp = CounterComparator.COVEREDITEMS;
     40 		assertCmpLess(cmp, 73, 7, 42, 8);
     41 		assertCmpEquals(cmp, 42, 8, 82, 8);
     42 		assertCmpGreater(cmp, 21, 9, 32, 8);
     43 	}
     44 
     45 	@Test
     46 	public void testMissedItemsComparator() {
     47 		final Comparator<ICounter> cmp = CounterComparator.MISSEDITEMS;
     48 		assertCmpLess(cmp, 10, 40, 11, 80);
     49 		assertCmpEquals(cmp, 10, 40, 10, 80);
     50 		assertCmpGreater(cmp, 11, 39, 10, 80);
     51 	}
     52 
     53 	@Test
     54 	public void testCoveredRatioComparator() {
     55 		final Comparator<ICounter> cmp = CounterComparator.COVEREDRATIO;
     56 		assertCmpLess(cmp, 25, 25, 44, 46);
     57 		assertCmpEquals(cmp, 40, 10, 64, 16);
     58 		assertCmpGreater(cmp, 25, 25, 46, 44);
     59 	}
     60 
     61 	@Test
     62 	public void testMissedRatioComparator() {
     63 		final Comparator<ICounter> cmp = CounterComparator.MISSEDRATIO;
     64 		assertCmpLess(cmp, 25, 25, 46, 44);
     65 		assertCmpEquals(cmp, 40, 10, 64, 16);
     66 		assertCmpGreater(cmp, 25, 25, 44, 46);
     67 	}
     68 
     69 	@Test
     70 	public void testReverseComparator() {
     71 		final Comparator<ICounter> cmp = CounterComparator.TOTALITEMS.reverse();
     72 		assertCmpGreater(cmp, 19, 5, 19, 6);
     73 		assertCmpEquals(cmp, 20, 5, 19, 6);
     74 		assertCmpLess(cmp, 21, 5, 19, 6);
     75 	}
     76 
     77 	@Test
     78 	public void testReverseReverseComparator() {
     79 		final Comparator<ICounter> cmp = CounterComparator.TOTALITEMS.reverse()
     80 				.reverse();
     81 		assertCmpGreater(cmp, 21, 5, 19, 6);
     82 		assertCmpEquals(cmp, 20, 5, 19, 6);
     83 		assertCmpLess(cmp, 19, 5, 19, 6);
     84 	}
     85 
     86 	@Test
     87 	public void testNodeComparator1() {
     88 		ICoverageNode d1 = new MockNode(18);
     89 		ICoverageNode d2 = new MockNode(15);
     90 		final Comparator<ICoverageNode> cmp = CounterComparator.TOTALITEMS
     91 				.on(CounterEntity.INSTRUCTION);
     92 		assertTrue(cmp.compare(d1, d2) > 0);
     93 	}
     94 
     95 	@Test
     96 	public void testNodeComparator2() {
     97 		ICoverageNode d1 = new MockNode(18);
     98 		ICoverageNode d2 = new MockNode(15);
     99 		final Comparator<ICoverageNode> cmp = CounterComparator.TOTALITEMS
    100 				.on(CounterEntity.LINE);
    101 		assertEquals(0, cmp.compare(d1, d2), 0.0);
    102 	}
    103 
    104 	private void assertCmpEquals(Comparator<ICounter> cmp, int missed1,
    105 			int covered1, int missed2, int covered2) {
    106 		assertEquals(0,
    107 				cmp.compare(ctr(missed1, covered1), ctr(missed2, covered2)),
    108 				0.0);
    109 	}
    110 
    111 	private void assertCmpLess(Comparator<ICounter> cmp, int missed1,
    112 			int covered1, int missed2, int covered2) {
    113 		assertTrue(cmp.compare(ctr(missed1, covered1), ctr(missed2, covered2)) < 0);
    114 	}
    115 
    116 	private void assertCmpGreater(Comparator<ICounter> cmp, int missed1,
    117 			int covered1, int missed2, int covered2) {
    118 		assertTrue(cmp.compare(ctr(missed1, covered1), ctr(missed2, covered2)) > 0);
    119 	}
    120 
    121 	private CounterImpl ctr(int missed, int covered) {
    122 		return CounterImpl.getInstance(missed, covered);
    123 	}
    124 
    125 	private static final class MockNode extends CoverageNodeImpl {
    126 		MockNode(int total) {
    127 			super(GROUP, "mock");
    128 			instructionCounter = CounterImpl.getInstance(total, 0);
    129 		}
    130 	}
    131 
    132 }
    133