/*
* Apache License
* Version 2.0, January 2004
* http://www.apache.org/licenses/
*
* Copyright 2013 Aurelian Tutuianu
* Copyright 2014 Aurelian Tutuianu
* Copyright 2015 Aurelian Tutuianu
* Copyright 2016 Aurelian Tutuianu
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package rapaio.core.distributions;
import org.junit.Assert;
import org.junit.Test;
import rapaio.core.CoreTools;
import rapaio.core.RandomSource;
import rapaio.data.Numeric;
import rapaio.data.Var;
import rapaio.graphics.Plotter;
import rapaio.printer.IdeaPrinter;
import rapaio.sys.WS;
import static org.junit.Assert.assertEquals;
/**
* Created by <a href="mailto:tutuianu@yahoo.com">Aurelian Tutuianu</a> on 6/17/16.
*/
public class BernoulliTest {
private static final double TOL = 1e-12;
@Test
public void testBase() {
RandomSource.setSeed(1234);
Bernoulli b90 = new Bernoulli(0.9);
Bernoulli b80 = new Bernoulli(0.8);
Bernoulli b50 = new Bernoulli(0.5);
Bernoulli b10 = new Bernoulli(0.1);
int N = 10_000;
Var x90 = b90.sample(N);
Var x80 = b80.sample(N);
Var x50 = b50.sample(N);
Var x10 = b10.sample(N);
System.out.println(CoreTools.sum(x90).value()/N);
System.out.println(CoreTools.sum(x80).value()/N);
System.out.println(CoreTools.sum(x50).value()/N);
System.out.println(CoreTools.sum(x10).value()/N);
assertEquals(9024, CoreTools.sum(x90).value(), TOL);
assertEquals(8075, CoreTools.sum(x80).value(), TOL);
assertEquals(5045, CoreTools.sum(x50).value(), TOL);
assertEquals(997, CoreTools.sum(x10).value(), TOL);
assertEquals(true, b90.discrete());
assertEquals("Ber(p=0.9)", b90.name());
assertEquals(0, b90.pdf(-1), TOL);
assertEquals(0.1, b90.pdf(0), TOL);
assertEquals(0, b90.pdf(0.5), TOL);
assertEquals(0.9, b90.pdf(1), TOL);
assertEquals(0, b90.pdf(1.1), TOL);
assertEquals(0, b90.cdf(-1), TOL);
assertEquals(0.1, b90.cdf(0), TOL);
assertEquals(0.1, b90.cdf(0.5), TOL);
assertEquals(1, b90.cdf(1), TOL);
assertEquals(1, b90.cdf(1.1), TOL);
assertEquals(0, b90.quantile(-1), TOL);
assertEquals(0, b90.quantile(0), TOL);
assertEquals(1, b90.quantile(0.5), TOL);
assertEquals(1, b90.quantile(1), TOL);
assertEquals(1, b90.quantile(1.1), TOL);
assertEquals(0, b90.min(), TOL);
assertEquals(1, b90.max(), TOL);
assertEquals(0.9, b90.mean(), TOL);
assertEquals(1, b90.mode(), TOL);
assertEquals(0.08999999999999998, b90.var(), TOL);
assertEquals(3.3333333333333335, b90.skewness(), TOL);
assertEquals(5.1111111111111125, b90.kurtosis(), TOL);
assertEquals(0.3250829733914482, b90.entropy(), TOL);
}
}