// Wei Chen - Extreme Learning Test
// 2016-11-06

import com.scalaml.TestData._
import com.scalaml.general.MatrixFunc._
import com.scalaml.algorithm.ExtremeLearning
import org.scalatest.funsuite.AnyFunSuite

class ExtremeLearningSuite extends AnyFunSuite {

    val neuronNumber = 10
    val featureNumber = UNLABELED_LARGE_HIGH_DIM_DATA.head.size
    val outputNumber = TARGET_LARGE_HIGH_DIM_DATA.head.size

    val el = new ExtremeLearning(neuronNumber, featureNumber, outputNumber)
    test("ExtremeLearning Test : Initialization") {
        assert(el.wIn.size == featureNumber)
        assert(el.wIn.head.size == neuronNumber)
        assert(el.wOut.size == neuronNumber)
        assert(el.wOut.head.size == outputNumber)
    }

    test("ExtremeLearning Test : Train") {
        el.train(UNLABELED_LARGE_HIGH_DIM_DATA, TARGET_LARGE_HIGH_DIM_DATA)
        val result = el.predict(UNLABELED_LARGE_HIGH_DIM_DATA)
        assert(matrixsimilar(result, TARGET_LARGE_HIGH_DIM_DATA, 0.5))
    }

    test("ExtremeLearning Test : Predict - OVERFITS LIKE CRAZY W/O ENOUGH DATA") {
        val result = el.predict(UNLABELED_SMALL_HIGH_DIM_DATA)
        assert(matrixsimilar(result, TARGET_SMALL_HIGH_DIM_DATA, 1e3))
    }
}