|
| 1 | +package com.thealgorithms.maths; |
| 2 | + |
| 3 | +import org.junit.jupiter.api.Test; |
| 4 | + |
| 5 | +import java.util.Arrays; |
| 6 | + |
| 7 | +import static org.junit.jupiter.api.Assertions.assertEquals; |
| 8 | +import static org.junit.jupiter.api.Assertions.assertTrue; |
| 9 | + |
| 10 | +public class SigmoidActivationTest { |
| 11 | + |
| 12 | + @Test |
| 13 | + public void calculationTest() { |
| 14 | + assertEquals(0.5,SigmoidActivation.activate(0), 0.01,"1 case correct" ); |
| 15 | + assertEquals(0.73,SigmoidActivation.activate(1),0.01,"2 case correct"); |
| 16 | + assertEquals(0.26,SigmoidActivation.activate(-1),0.01, "3 case correct"); |
| 17 | + assertEquals(0.88,SigmoidActivation.activate(2),0.01,"4 case correct"); |
| 18 | + assertEquals(0.11,SigmoidActivation.activate(-2),0.01,"5 case correct"); |
| 19 | + |
| 20 | + double[][] xBatch = new double[4][3]; |
| 21 | + double[][] expectedX = new double[4][3]; |
| 22 | + |
| 23 | + for(int i = 0; i < 4; i++) { |
| 24 | + for(int j = 0; j < 3; j++) xBatch[i][j] = 0; |
| 25 | + } |
| 26 | + |
| 27 | + for(int i = 0; i < 4; i++) { |
| 28 | + for(int j = 0; j < 3; j++) expectedX[i][j] = 0.5; |
| 29 | + } |
| 30 | + |
| 31 | + assertTrue(Arrays.deepEquals(expectedX, SigmoidActivation.activate(xBatch)), "batch case correct"); |
| 32 | + |
| 33 | + assertEquals(0.25, SigmoidActivation.grad(0.5), 0.01, "grad calculation correct"); |
| 34 | + |
| 35 | + double[][] yBatch = new double[4][3]; |
| 36 | + for(int i = 0; i < 4; i++) { |
| 37 | + for(int j = 0; j < 3; j++) yBatch[i][j] = 0.5; |
| 38 | + } |
| 39 | + |
| 40 | + double[][] expectedY = new double[4][3]; |
| 41 | + for(int i = 0; i < 4; i++) { |
| 42 | + for(int j = 0; j < 3; j++) expectedY[i][j] = 0.25; |
| 43 | + } |
| 44 | + assertTrue(Arrays.deepEquals(expectedY, SigmoidActivation.grad(yBatch)), "grad batch case correct"); |
| 45 | + } |
| 46 | + |
| 47 | + @Test |
| 48 | + public void willReturnNaN() { |
| 49 | + double x = Double.NaN; |
| 50 | + |
| 51 | + assertTrue(Double.isNaN(SigmoidActivation.activate(x)), "returned NaN"); |
| 52 | + } |
| 53 | + |
| 54 | + @Test |
| 55 | + public void extremumNumbersOnActivate() { |
| 56 | + double x = 777; |
| 57 | + |
| 58 | + assertEquals(1.0, SigmoidActivation.activate(x), 0.01, "big number case correct"); |
| 59 | + assertEquals(0.0, SigmoidActivation.activate((-1) * x), 0.01, "small number case correct"); |
| 60 | + } |
| 61 | +} |
0 commit comments