Skip to content
This repository has been archived by the owner on Nov 19, 2020. It is now read-only.

Commit

Permalink
Adding more unit tests for Measures.Quartiles.
Browse files Browse the repository at this point in the history
 - Updates GH-865: Measures.Quartiles: value for Q1 (lower quartile) wrong in QuantileMethod.R
  • Loading branch information
cesarsouza committed Sep 14, 2017
1 parent eec0e99 commit 59ec6a3
Showing 1 changed file with 21 additions and 40 deletions.
61 changes: 21 additions & 40 deletions Unit Tests/Accord.Tests.Statistics/ToolsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -487,51 +487,32 @@ public void QuartileTest7()
}

[Test]
public void quantile_test_manual_sort()
[TestCase(new double[] { 0.0, 1.0, 2.0, 4.0, 5.4, 3.5, 7.8, 8.9, 17.0, 23.78, 98.9, 2.3, 4.5, 6.7, 9.34, 42.42 }, 3.2, 11.255)]
[TestCase(new double[] { 0.0, 5.4, 2.0, 4.0, 1.0, 3.5, 7.8, 17.0, 8.9, 98.9, 23.78, 2.3, 4.5, 6.7, 42.42, 9.34 }, 3.2, 11.255)]
[TestCase(new double[] { 0.0, 1.0, 2.0, 4.0, 5.4, 3.5, 7.8, 8.9, 17.0, 23.78, 98.9, 2.3, 4.5, 6.7, 9.34, 42.42, 23, 17.87, 18.54, 16.23, 15.34, 19.8723, 23, 24.32 }, 4.375, 20.65423)]
[TestCase(new double[] { 18, 31, 25, 2, 22, 13, 37, 1, 4, 7, 6, 45, 10, 24, 23, 49, 27, 9, 35, 14, 34, 33, 41, 42, 20, 43, 3, 48, 15, 39, 11, 38, 46, 17, 40, 16, 50, 29, 19, 47, 12, 28, 32, 8, 30, 26, 5, 44, 36, 21 }, 13.25, 37.75)]
[TestCase(new double[] { 18, 14, 1, 15, 4, 32, 10, 26, 38, 9, 24, 16, 31, 20, 25, 30, 22, 6, 28, 21, 33, 17, 5, 35, 2, 13, 36, 8, 29, 7 }, 9.25, 28.75)]
[TestCase(new double[] { 112, 718, 320, 576, 547, 658, 253, 560, 408, 314, 681, 303, 236, 753, 122, 239, 222, 797, 593, 274, 338, 604, 52, 245, 389 }, 245, 593)]
[TestCase(new double[] { 209, 556, 317, 571, 219, 599, 568, 516, 582, 279, 298, 319, 614, 290, 458, 262, 281, 606, 513, 519, 356, 338, 525, 576, 180 }, 290, 568)]
public void quartile_test_gh865(double[] values, double expectedQ1, double expectedQ3)
{
// https://github.com/accord-net/framework/issues/865
double[] values;
double q1, q3, q2;

values = new double[] { 18, 31, 25, 2, 22, 13, 37, 1, 4, 7, 6, 45, 10, 24, 23, 49, 27, 9, 35,
14, 34, 33, 41, 42, 20, 43, 3, 48, 15, 39, 11, 38, 46, 17, 40, 16,
50, 29, 19, 47, 12, 28, 32, 8, 30, 26, 5, 44, 36, 21};
values.Sort();
q2 = Measures.Quartiles(values, out q1, out q3, alreadySorted: true, type: QuantileMethod.R);
Assert.AreEqual(13.25, q1);
Assert.AreEqual(25.50, q2);
Assert.AreEqual(37.75, q3);
double q1, q3;
Measures.Quartiles(values, out q1, out q3, alreadySorted: false, type: QuantileMethod.R);
Assert.AreEqual(expectedQ1, q1, 1e-6);
Assert.AreEqual(expectedQ3, q3, 1e-5);

values = new double[] { 18,14,1,15,4,32,10,26,38,9,24,16,31,20,25,30,22,6,
28,21,33,17,5,35,2,13,36,8,29,7 };
values.Sort();
q2 = Measures.Quartiles(values, out q1, out q3, alreadySorted: true, type: QuantileMethod.R);
Assert.AreEqual(9.25, q1);
Assert.AreEqual(19.0, q2);
Assert.AreEqual(28.75, q3);
}
Measures.Quartiles(values.Sorted(), out q1, out q3, alreadySorted: true, type: QuantileMethod.R);
Assert.AreEqual(expectedQ1, q1, 1e-6);
Assert.AreEqual(expectedQ3, q3, 1e-5);

[Test]
public void quantile_test_auto_sort()
{
// https://github.com/accord-net/framework/issues/865
double[] values;
double q1, q3, q2;

values = new double[] { 18, 31, 25, 2, 22, 13, 37, 1, 4, 7, 6, 45, 10, 24, 23, 49, 27, 9, 35,
14, 34, 33, 41, 42, 20, 43, 3, 48, 15, 39, 11, 38, 46, 17, 40, 16,
50, 29, 19, 47, 12, 28, 32, 8, 30, 26, 5, 44, 36, 21};
q2 = Measures.Quartiles(values, out q1, out q3, alreadySorted: false, type: QuantileMethod.R);
Assert.AreEqual(13.25, q1);
Assert.AreEqual(25.50, q2);
Assert.AreEqual(37.75, q3);

values = new double[] { 18,14,1,15,4,32,10,26,38,9,24,16,31,20,25,30,22,6,
28,21,33,17,5,35,2,13,36,8,29,7 };
q2 = Measures.Quartiles(values, out q1, out q3, alreadySorted: false, type: QuantileMethod.R);
Assert.AreEqual(9.25, q1);
Assert.AreEqual(19.0, q2);
Assert.AreEqual(28.75, q3);
Measures.Quartiles(values.Sorted(), out q1, out q3, alreadySorted: false, type: QuantileMethod.R);
Assert.AreEqual(expectedQ1, q1, 1e-6);
Assert.AreEqual(expectedQ3, q3, 1e-5);

Measures.Quartiles(values, out q1, out q3, alreadySorted: true, type: QuantileMethod.R);
Assert.IsFalse(expectedQ1.IsEqual(q1, 1e-3) && expectedQ3.IsEqual(q3, 1e-3));
}

[Test]
Expand Down

0 comments on commit 59ec6a3

Please sign in to comment.