package org.projectusus.defaultmetrics;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.projectusus.statistics.ACDStatistic;
public class AcdLimitTest {
@Test
public void limitFor1() {
int classCount = 1;
int expected = 1;
int limit = ACDStatistic.calculateCcdLimit( classCount );
assertEquals( expected, limit );
assertEquals( 1.0, calcRelativeAcd( expected, classCount ), 0.01 );
}
@Test
public void limitFor2() {
int classCount = 2;
int expected = 2;
int limit = ACDStatistic.calculateCcdLimit( classCount );
assertEquals( expected, limit );
assertEquals( 0.5, calcRelativeAcd( expected, classCount ), 0.01 );
}
@Test
public void limitFor3() {
int classCount = 3;
int expected = 2;
int limit = ACDStatistic.calculateCcdLimit( classCount );
assertEquals( expected, limit );
assertTrue( 0.25 > calcRelativeAcd( expected, classCount ) );
}
@Test
public void limitFor10() {
int classCount = 10;
int expected = 5;
int limit = ACDStatistic.calculateCcdLimit( classCount );
assertEquals( expected, limit );
assertTrue( 0.1 > calcRelativeAcd( expected, classCount ) );
}
@Test
public void limitFor15() {
int classCount = 15;
int expected = 7;
int limit = ACDStatistic.calculateCcdLimit( classCount );
assertEquals( expected, limit );
assertTrue( 0.04 > calcRelativeAcd( expected, classCount ) );
}
@Test
public void limitFor50() {
int classCount = 50;
int expected = 13;
int limit = ACDStatistic.calculateCcdLimit( classCount );
assertEquals( expected, limit );
assertTrue( 0.04 > calcRelativeAcd( expected, classCount ) );
}
@Test
public void limitFor100() {
int classCount = 100;
int expected = 20;
int limit = ACDStatistic.calculateCcdLimit( classCount );
assertEquals( expected, limit );
assertTrue( 0.04 > calcRelativeAcd( expected, classCount ) );
}
@Test
public void limitFor500() {
int classCount = 500;
int expected = 51;
int limit = ACDStatistic.calculateCcdLimit( classCount );
assertEquals( expected, limit );
assertTrue( 0.04 > calcRelativeAcd( expected, classCount ) );
}
@Test
public void limitFor5000() {
int classCount = 5000;
int expected = 191;
int limit = ACDStatistic.calculateCcdLimit( classCount );
assertEquals( expected, limit );
assertTrue( 0.04 > calcRelativeAcd( expected, classCount ) );
}
private double calcRelativeAcd( int ccdLimit, int classCount ) {
return ((double)ccdLimit) / (classCount * classCount);
}
}