1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math4.legacy.distribution;
18
19 import org.junit.Assert;
20 import org.junit.Test;
21
22
23
24
25
26 public class AbstractIntegerDistributionTest {
27 protected final DiceDistribution diceDistribution = new DiceDistribution();
28 protected final double p = diceDistribution.probability(1);
29
30 @Test
31 public void testInverseCumulativeProbabilityMethod() {
32 double precision = 0.000000000000001;
33 Assert.assertEquals(1, diceDistribution.inverseCumulativeProbability(0));
34 Assert.assertEquals(1, diceDistribution.inverseCumulativeProbability((1d-Double.MIN_VALUE)/6d));
35 Assert.assertEquals(2, diceDistribution.inverseCumulativeProbability((1d+precision)/6d));
36 Assert.assertEquals(2, diceDistribution.inverseCumulativeProbability((2d-Double.MIN_VALUE)/6d));
37 Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability((2d+precision)/6d));
38 Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability((3d-Double.MIN_VALUE)/6d));
39 Assert.assertEquals(4, diceDistribution.inverseCumulativeProbability((3d+precision)/6d));
40 Assert.assertEquals(4, diceDistribution.inverseCumulativeProbability((4d-Double.MIN_VALUE)/6d));
41 Assert.assertEquals(5, diceDistribution.inverseCumulativeProbability((4d+precision)/6d));
42 Assert.assertEquals(5, diceDistribution.inverseCumulativeProbability((5d-precision)/6d));
43 Assert.assertEquals(6, diceDistribution.inverseCumulativeProbability((5d+precision)/6d));
44 Assert.assertEquals(6, diceDistribution.inverseCumulativeProbability((6d-precision)/6d));
45 Assert.assertEquals(6, diceDistribution.inverseCumulativeProbability(6d/6d));
46 }
47
48 @Test
49 public void testCumulativeProbabilitiesSingleArguments() {
50 for (int i = 1; i < 7; i++) {
51 Assert.assertEquals(p * i,
52 diceDistribution.cumulativeProbability(i), Double.MIN_VALUE);
53 }
54 Assert.assertEquals(0.0,
55 diceDistribution.cumulativeProbability(0), Double.MIN_VALUE);
56 Assert.assertEquals(1.0,
57 diceDistribution.cumulativeProbability(7), Double.MIN_VALUE);
58 }
59
60 @Test
61 public void testProbabilitiesRangeArguments() {
62 int lower = 0;
63 int upper = 6;
64 for (int i = 0; i < 2; i++) {
65
66 Assert.assertEquals(1 - p * 2 * i,
67 diceDistribution.probability(lower, upper), 1E-12);
68 lower++;
69 upper--;
70 }
71 for (int i = 0; i < 6; i++) {
72 Assert.assertEquals(p, diceDistribution.probability(i, i+1), 1E-12);
73 }
74 }
75
76
77
78
79 class DiceDistribution extends AbstractIntegerDistribution {
80 public static final long serialVersionUID = 23734213;
81
82 private final double p = 1d/6d;
83
84 @Override
85 public double probability(int x) {
86 if (x < 1 || x > 6) {
87 return 0;
88 } else {
89 return p;
90 }
91 }
92
93 @Override
94 public double cumulativeProbability(int x) {
95 if (x < 1) {
96 return 0;
97 } else if (x >= 6) {
98 return 1;
99 } else {
100 return p * x;
101 }
102 }
103
104 @Override
105 public double getMean() {
106 return 3.5;
107 }
108
109 @Override
110 public double getVariance() {
111 return 70/24;
112 }
113
114 @Override
115 public int getSupportLowerBound() {
116 return 1;
117 }
118
119 @Override
120 public int getSupportUpperBound() {
121 return 6;
122 }
123 }
124 }