/*
* File: HardSigmoidFunctionTest.java
* Authors: Justin Basilico
* Project: Cognitive Foundry
*
* Copyright 2016 Cognitive Foundry. All rights reserved.
*/
package gov.sandia.cognition.learning.function.scalar;
import java.util.Random;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Unit tests for class {@link HardSigmoidFunction}.
*
* @author Justin Basilico
* @since 4.0.0
*/
public class HardSigmoidFunctionTest
extends Object
{
protected Random random = new Random(111114);
/**
* Creates a new test.
*/
public HardSigmoidFunctionTest()
{
super();
}
/**
* Test of constructors of class HardSigmoidFunction.
*/
@Test
public void testConstructors()
{
HardSigmoidFunction instance = new HardSigmoidFunction();
assertNotNull(instance);
}
/**
* Test of clone method, of class HardSigmoidFunction.
*/
@Test
public void testClone()
{
HardSigmoidFunction instance = new HardSigmoidFunction();
assertNotSame(instance, instance.clone());
assertNotNull(instance.clone());
}
/**
* Test of evaluate method, of class HardSigmoidFunction.
*/
@Test
public void testEvaluate()
{
HardSigmoidFunction instance = new HardSigmoidFunction();
assertEquals(0.5, instance.evaluate(0.0), 0.0);
assertEquals(1.0, instance.evaluate(4.0), 0.0);
assertEquals(0.0, instance.evaluate(-4.0), 0.0);
for (int i = 0; i < 10; i++)
{
double x = random.nextGaussian();
double y = Math.max(0, Math.min(1, (0.2 * x) + 0.5));
assertEquals(y, instance.evaluate(x), 0.0);
}
}
/**
* Test of differentiate method, of class HardSigmoidFunction.
*/
@Test
public void testDifferentiate()
{
HardSigmoidFunction instance = new HardSigmoidFunction();
assertEquals(0.2, instance.differentiate(0.0), 0.0);
assertEquals(0.0, instance.differentiate(4.0), 0.0);
assertEquals(0.0, instance.differentiate(-4.0), 0.0);
for (int i = 0; i < 10; i++)
{
double x = random.nextGaussian();
if (x > 2.5 || x < -2.5)
{
assertEquals(0.0, instance.differentiate(x), 0.0);
}
else
{
assertEquals(0.2, instance.differentiate(x), 0.0);
}
}
}
/**
* Test of hardSigmoid method, of class HardSigmoidFunction.
*/
@Test
public void testHardSigmoid()
{
assertEquals(0.5, HardSigmoidFunction.hardSigmoid(0.0), 0.0);
assertEquals(1.0, HardSigmoidFunction.hardSigmoid(4.0), 0.0);
assertEquals(0.0, HardSigmoidFunction.hardSigmoid(-4.0), 0.0);
for (int i = 0; i < 10; i++)
{
double x = random.nextGaussian();
double y = Math.max(0, Math.min(1, (0.2 * x) + 0.5));
assertEquals(y, HardSigmoidFunction.hardSigmoid(x), 0.0);
}
}
}