112 lines
4.2 KiB
Java
Raw Normal View History

2019-06-06 15:21:15 +03:00
/*******************************************************************************
* Copyright (c) 2015-2018 Skymind, Inc.
*
* This program and the accompanying materials are made available under the
* terms of the Apache License, Version 2.0 which is available at
* https://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.
*
* SPDX-License-Identifier: Apache-2.0
******************************************************************************/
package org.nd4j;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.nd4j.autodiff.opvalidation.*;
import org.nd4j.autodiff.validation.OpValidation;
import org.nd4j.imports.TFGraphs.TFGraphTestAllSameDiff;
import org.nd4j.linalg.api.buffer.DataType;
import org.nd4j.linalg.factory.Nd4j;
Refactor packages to fix split package issues (#411) * Refactor nd4j-common: org.nd4j.* -> org.nd4j.common.* Signed-off-by: Alex Black <blacka101@gmail.com> * Fix CUDA (missed nd4j-common package refactoring changes) Signed-off-by: Alex Black <blacka101@gmail.com> * nd4j-kryo: org.nd4j -> org.nd4j.kryo Signed-off-by: Alex Black <blacka101@gmail.com> * Fix nd4j-common for deeplearning4j-cuda Signed-off-by: Alex Black <blacka101@gmail.com> * nd4j-grppc-client: org.nd4j.graph -> org.nd4j.remote.grpc Signed-off-by: Alex Black <blacka101@gmail.com> * deeplearning4j-common: org.deeplearning4.* -> org.deeplearning4j.common.* Signed-off-by: Alex Black <blacka101@gmail.com> * deeplearning4j-core: org.deeplearning4j.* -> org.deeplearning.core.* Signed-off-by: Alex Black <blacka101@gmail.com> * deeplearning4j-cuda: org.deeplearning4j.nn.layers.* -> org.deeplearning4j.cuda.* Signed-off-by: Alex Black <blacka101@gmail.com> * Import fixes Signed-off-by: Alex Black <blacka101@gmail.com> * deeplearning4j-nlp-*: org.deeplearning4.text.* -> org.deeplearning4j.nlp.(language).* Signed-off-by: Alex Black <blacka101@gmail.com> * deeplearning4j-ui-model: org.deeplearning4j.ui -> org.deeplearning4j.ui.model Signed-off-by: Alex Black <blacka101@gmail.com> * datavec-spark-inference-{server/model/client}: org.datavec.spark.transform -> org.datavec.spark.inference.{server/model/client} Signed-off-by: Alex Black <blacka101@gmail.com> * datavec-jdbc: org.datavec.api -> org.datavec.jdbc Signed-off-by: Alex Black <blacka101@gmail.com> * Delete org.deeplearning4j.datasets.iterator.impl.MultiDataSetIteratorAdapter in favor of (essentially identical) org.nd4j.linalg.dataset.adapter.MultiDataSetIteratorAdapter Signed-off-by: Alex Black <blacka101@gmail.com> * ND4S fixes Signed-off-by: Alex Black <blacka101@gmail.com> * Fixes Signed-off-by: Alex Black <blacka101@gmail.com> * nd4j-common-tests: org.nd4j.* -> org.nd4j.common.tests Signed-off-by: Alex Black <blacka101@gmail.com> * Trigger CI Signed-off-by: Alex Black <blacka101@gmail.com> * Fixes Signed-off-by: Alex Black <blacka101@gmail.com> * #8878 Ignore CUDA tests on modules with 'nd4j-native under cuda' issue Signed-off-by: Alex Black <blacka101@gmail.com> * Fix bad imports in tests Signed-off-by: Alex Black <blacka101@gmail.com> * Add ignore on test (already failing) due to #8882 Signed-off-by: Alex Black <blacka101@gmail.com> * Import fixes Signed-off-by: Alex Black <blacka101@gmail.com> * Additional import fixes Signed-off-by: Alex Black <blacka101@gmail.com>
2020-04-29 11:19:26 +10:00
import org.nd4j.common.function.Function;
2019-06-06 15:21:15 +03:00
import static org.junit.Assume.assumeFalse;
/**
* Op validation test suite.
* Should include all classes using the {@link OpValidation} test framework, so test coverage can be calculated and reported.
*
* NOTE: For the op coverage information to work properly, we need the op validation to be run via this suite.
* Otherwise, we could report coverage information before all test have run - underestimating coverage.
*
* For op coverage information to be collected, you need to execute a test like:<br>
* SINGLE OP TEST: OpValidation.validate(new OpTestCase(op).expectedOutputs(0, <INDArray here>))
* - OpTestCase checks the output values of a single op, no backprop/gradients<br>
* - Returns an error message if op failed, or NULL if op passed<br>
* SAMEDIFF TEST: OpValidation.validate(new TestCase(sameDiff).gradientCheck(true).expectedOutput("someVar", <INDArray>))<br>
* - These tests can be used to check both gradients AND expected output, collecting coverage as required<br>
* - Returns an error message if op failed, or NULL if op passed<br>
* - Note gradientCheck(true) is the default<br>
* - Expected outputs are optional<br>
* - You can specify a function for validating the correctness of each output using {@link org.nd4j.autodiff.validation.TestCase#expected(String, Function)}<br>
*
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({
//Note: these will be run as part of the suite only, and will NOT be run again separately
LayerOpValidation.class,
LossOpValidation.class,
MiscOpValidation.class,
RandomOpValidation.class,
ReductionBpOpValidation.class,
ReductionOpValidation.class,
ShapeOpValidation.class,
TransformOpValidation.class,
//TF import tests
TFGraphTestAllSameDiff.class
//TFGraphTestAllLibnd4j.class
2019-06-06 15:21:15 +03:00
})
//IMPORTANT: This ignore is added to avoid maven surefire running both the suite AND the individual tests in "mvn test"
// With it ignored here, the individual tests will run outside (i.e., separately/independently) of the suite in both "mvn test" and IntelliJ
@Ignore
public class OpValidationSuite {
/*
Change this variable from false to true to ignore any tests that call OpValidationSuite.ignoreFailing()
The idea: failing SameDiff tests are disabled by default, but can be re-enabled.
This is so we can prevent regressions on already passing tests
*/
public static final boolean IGNORE_FAILING = true;
public static void ignoreFailing(){
//If IGNORE_FAILING
assumeFalse(IGNORE_FAILING);
}
private static DataType initialType;
@BeforeClass
public static void beforeClass() {
Nd4j.create(1);
initialType = Nd4j.dataType();
Nd4j.setDataType(DataType.DOUBLE);
Nd4j.getRandom().setSeed(123);
}
@AfterClass
public static void afterClass() {
Nd4j.setDataType(initialType);
// Log coverage information
OpValidation.logCoverageInformation(true, true, true, true, true);
}
}