package com.orientechnologies.orient.core.sql.functions.stat; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull; import java.util.List; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class OSQLFunctionPercentileTest { private OSQLFunctionPercentile percentile; @BeforeMethod public void beforeMethod() { percentile = new OSQLFunctionPercentile() { @Override protected boolean returnDistributedResult() { return false; } }; } @Test public void testEmpty() { Object result = percentile.getResult(); assertNull(result); } @Test public void testSingleValueLower() { percentile.execute(null, null, null, new Object[] { 10, .25 }, null); assertEquals(10, percentile.getResult()); } @Test public void testSingleValueUpper() { percentile.execute(null, null, null, new Object[] { 10, .75 }, null); assertEquals(10, percentile.getResult()); } @Test public void test50thPercentileOdd() { int[] scores = { 1, 2, 3, 4, 5 }; for (int s : scores) { percentile.execute(null, null, null, new Object[] { s, .5 }, null); } Object result = percentile.getResult(); assertEquals(3.0, result); } @Test public void test50thPercentileOddWithNulls() { Integer[] scores = { null, 1, 2, null, 3, 4, null, 5 }; for (Integer s : scores) { percentile.execute(null, null, null, new Object[] { s, .5 }, null); } Object result = percentile.getResult(); assertEquals(3.0, result); } @Test public void test50thPercentileEven() { int[] scores = { 1, 2, 4, 5 }; for (int s : scores) { percentile.execute(null, null, null, new Object[] { s, .5 }, null); } Object result = percentile.getResult(); assertEquals(3.0, result); } @Test public void testFirstQuartile() { int[] scores = { 1, 2, 3, 4, 5 }; for (int s : scores) { percentile.execute(null, null, null, new Object[] { s, .25 }, null); } Object result = percentile.getResult(); assertEquals(1.5, result); } @Test public void testThirdQuartile() { int[] scores = { 1, 2, 3, 4, 5 }; for (int s : scores) { percentile.execute(null, null, null, new Object[] { s, .75 }, null); } Object result = percentile.getResult(); assertEquals(4.5, result); } @Test public void testMultiQuartile() { int[] scores = { 1, 2, 3, 4, 5 }; for (int s : scores) { percentile.execute(null, null, null, new Object[] { s, .25, .75 }, null); } List<Number> result = (List<Number>) percentile.getResult(); assertEquals(1.5, result.get(0).doubleValue()); assertEquals(4.5, result.get(1).doubleValue()); } }