commit
6a322298fd
|
@ -15,3 +15,8 @@ insert_final_newline = true
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
indent_style = space
|
indent_style = space
|
||||||
|
|
||||||
|
[*.txt]
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
function generate()
|
||||||
|
{
|
||||||
|
cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -DBUILD_SHARED_LIBS=$SHARED_BUILD
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $ANDROID ]; then
|
||||||
|
ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni
|
||||||
|
else
|
||||||
|
generate \
|
||||||
|
&& make \
|
||||||
|
&& sudo make install \
|
||||||
|
&& sudo ldconfig \
|
||||||
|
&& (cd test/unit; ../../bin/unit) \
|
||||||
|
&& (cd test/regression; chmod 755 run.py; ./run.py; \
|
||||||
|
chmod 755 result_checker.py; ./result_checker.py)
|
||||||
|
fi
|
16
.travis.yml
16
.travis.yml
|
@ -28,18 +28,4 @@ install:
|
||||||
- if [ $ANDROID ]; then wget -c http://dl.google.com/android/ndk/android-ndk-${PV}-${PLATF}.tar.bz2 && tar xf android-ndk-${PV}-${PLATF}.tar.bz2 ; fi
|
- if [ $ANDROID ]; then wget -c http://dl.google.com/android/ndk/android-ndk-${PV}-${PLATF}.tar.bz2 && tar xf android-ndk-${PV}-${PLATF}.tar.bz2 ; fi
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- if [ $ANDROID ]; then
|
- . ./.travis.sh
|
||||||
ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ;
|
|
||||||
else
|
|
||||||
cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -DBUILD_SHARED_LIBS=$SHARED_BUILD ;
|
|
||||||
make ;
|
|
||||||
sudo make install ;
|
|
||||||
sudo ldconfig ;
|
|
||||||
cd test/unit ;
|
|
||||||
../../bin/unit ;
|
|
||||||
cd ../regression ;
|
|
||||||
chmod 755 run.py ;
|
|
||||||
./run.py ;
|
|
||||||
chmod 755 result_checker.py ;
|
|
||||||
./result_checker.py;
|
|
||||||
fi
|
|
||||||
|
|
|
@ -54,6 +54,8 @@ add_executable( unit
|
||||||
${TEST_SRCS}
|
${TEST_SRCS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_definitions(-DASSIMP_TEST_MODELS_DIR="${CMAKE_CURRENT_LIST_DIR}/models")
|
||||||
|
|
||||||
SET_PROPERTY( TARGET assimp PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX} )
|
SET_PROPERTY( TARGET assimp PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX} )
|
||||||
|
|
||||||
add_dependencies( unit gtest )
|
add_dependencies( unit gtest )
|
||||||
|
|
|
@ -1,95 +1,95 @@
|
||||||
Assimp Regression Test Suite
|
Assimp Regression Test Suite
|
||||||
============================
|
============================
|
||||||
|
|
||||||
1) How does it work?
|
1) How does it work?
|
||||||
---------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------
|
||||||
run.py checks all model in the <root>/test/models* folders and compares the result
|
run.py checks all model in the <root>/test/models* folders and compares the result
|
||||||
against a regression database provided with assimp (db.zip). A few failures
|
against a regression database provided with assimp (db.zip). A few failures
|
||||||
are totally fine (see sections 7+). You need to worry if a huge
|
are totally fine (see sections 7+). You need to worry if a huge
|
||||||
majority of all files in a particular format (or post-processing configuration)
|
majority of all files in a particular format (or post-processing configuration)
|
||||||
fails as this might be a sign of a recent regression in assimp's codebase or
|
fails as this might be a sign of a recent regression in assimp's codebase or
|
||||||
gross incompatibility with your system or compiler.
|
gross incompatibility with your system or compiler.
|
||||||
|
|
||||||
2) What do I need?
|
2) What do I need?
|
||||||
---------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------
|
||||||
- You need Python installed (2.7+, 3.x). On Windows, run the scripts using "py".
|
- You need Python installed (2.7+, 3.x). On Windows, run the scripts using "py".
|
||||||
- You need to build the assimp command line tool (ASSIMP_BUILD_ASSIMP_TOOLS
|
- You need to build the assimp command line tool (ASSIMP_BUILD_ASSIMP_TOOLS
|
||||||
CMake build flag). Both run.py and gen_db.py take the full path to the binary
|
CMake build flag). Both run.py and gen_db.py take the full path to the binary
|
||||||
as first command line parameter.
|
as first command line parameter.
|
||||||
|
|
||||||
3) How to add more test files?
|
3) How to add more test files?
|
||||||
---------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------
|
||||||
Use the following procedure:
|
Use the following procedure:
|
||||||
- Verify the correctness of your assimp build - run the regression suite.
|
- Verify the correctness of your assimp build - run the regression suite.
|
||||||
DO NOT continue if more tests fail than usual.
|
DO NOT continue if more tests fail than usual.
|
||||||
- Add your additional test files to <root>/test/models/<fileformat>, where
|
- Add your additional test files to <root>/test/models/<fileformat>, where
|
||||||
<fileformat> is the file type (typically the file extension).
|
<fileformat> is the file type (typically the file extension).
|
||||||
- If you test file does not meet the BSD license requirements, add it to
|
- If you test file does not meet the BSD license requirements, add it to
|
||||||
<root>/test/models-nonbsd/<fileformat> so people know to be careful with it.
|
<root>/test/models-nonbsd/<fileformat> so people know to be careful with it.
|
||||||
- Rebuild the regression database:
|
- Rebuild the regression database:
|
||||||
"gen_db.py <binary> -ixyz" where .xyz is the file extension of the new file.
|
"gen_db.py <binary> -ixyz" where .xyz is the file extension of the new file.
|
||||||
- Run the regression suite again. There should be no new failures and the new
|
- Run the regression suite again. There should be no new failures and the new
|
||||||
file should not be among the failures.
|
file should not be among the failures.
|
||||||
- Include the db.zip file with your Pull Request. Travis CI enforces a passing
|
- Include the db.zip file with your Pull Request. Travis CI enforces a passing
|
||||||
regression suite (with offenders whitelisted as a last resort).
|
regression suite (with offenders whitelisted as a last resort).
|
||||||
|
|
||||||
4) I made a change/fix/patch to a loader, how to update the database?
|
4) I made a change/fix/patch to a loader, how to update the database?
|
||||||
---------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------
|
||||||
- Rebuild the regression database using "gen_db.py <binary> -ixyz"
|
- Rebuild the regression database using "gen_db.py <binary> -ixyz"
|
||||||
where .xyz is the file extension for which the loader was patched.
|
where .xyz is the file extension for which the loader was patched.
|
||||||
- Run the regression suite again. There should be no new failures and the new
|
- Run the regression suite again. There should be no new failures and the new
|
||||||
file should not be among the failures.
|
file should not be among the failures.
|
||||||
- Include the db.zip file with your Pull Request. Travis CI enforces a passing
|
- Include the db.zip file with your Pull Request. Travis CI enforces a passing
|
||||||
regression suite (with offenders whitelisted as a last resort).
|
regression suite (with offenders whitelisted as a last resort).
|
||||||
|
|
||||||
5) How to add my whole model repository to the database?
|
5) How to add my whole model repository to the database?
|
||||||
---------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------
|
||||||
|
|
||||||
Edit the reg_settings.py file and add the path to your repository to
|
Edit the reg_settings.py file and add the path to your repository to
|
||||||
<<model_directories>>. Then, rebuild the database.
|
<<model_directories>>. Then, rebuild the database.
|
||||||
|
|
||||||
6) So what is actually tested?
|
6) So what is actually tested?
|
||||||
---------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------
|
||||||
The regression database includes mini dumps of the aiScene data structure, i.e.
|
The regression database includes mini dumps of the aiScene data structure, i.e.
|
||||||
the scene hierarchy plus the sizes of all data arrays MUST match. Floating-point
|
the scene hierarchy plus the sizes of all data arrays MUST match. Floating-point
|
||||||
data buffers, such as vertex positions are handled less strictly: min, max and
|
data buffers, such as vertex positions are handled less strictly: min, max and
|
||||||
average values are stored with low precision. This takes hardware- or
|
average values are stored with low precision. This takes hardware- or
|
||||||
compiler-specific differences in floating-point computations into account.
|
compiler-specific differences in floating-point computations into account.
|
||||||
Generally, almost all significant regressions will be detected while the
|
Generally, almost all significant regressions will be detected while the
|
||||||
number of false positives is relatively low.
|
number of false positives is relatively low.
|
||||||
|
|
||||||
7) The test suite fails, what do do?
|
7) The test suite fails, what do do?
|
||||||
---------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------
|
||||||
Get back to <root>/test/results and look at regression_suite_failures.txt.
|
Get back to <root>/test/results and look at regression_suite_failures.txt.
|
||||||
It contains a list of all files which failed the test. Failing dumps are copied to
|
It contains a list of all files which failed the test. Failing dumps are copied to
|
||||||
root>/test/results/tmp. Both an EXPECTED and an ACTUAL file is produced per test.
|
<root>/test/results/tmp. Both an EXPECTED and an ACTUAL file is produced per test.
|
||||||
The output of "assimp cmpdump" is written to regressions_suite_output.txt. Grep
|
The output of "assimp cmpdump" is written to regressions_suite_output.txt. Grep
|
||||||
for the file name in question and locate the log for the failed comparison. It
|
for the file name in question and locate the log for the failed comparison. It
|
||||||
contains a full trace of which scene elements have been compared before, which
|
contains a full trace of which scene elements have been compared before, which
|
||||||
makes it reasonably easy to locate the offending field.
|
makes it reasonably easy to locate the offending field.
|
||||||
|
|
||||||
8) fp:fast vs fp:precise fails the test suite (same for gcc equivalents)
|
8) fp:fast vs fp:precise fails the test suite (same for gcc equivalents)
|
||||||
---------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------
|
||||||
As mentioned above, floating-point inaccuracies between differently optimized
|
As mentioned above, floating-point inaccuracies between differently optimized
|
||||||
builds are not considered regressions and all float comparisons done by the test
|
builds are not considered regressions and all float comparisons done by the test
|
||||||
suite involve an epsilon to accomodate. However compiler settings that allow
|
suite involve an epsilon to accomodate. However compiler settings that allow
|
||||||
compilers to perform non-IEEE754 compliant optimizations can cause arbitrary
|
compilers to perform non-IEEE754 compliant optimizations can cause arbitrary
|
||||||
failures in the test suite. Even if the compiler is configured to be IEE754
|
failures in the test suite. Even if the compiler is configured to be IEE754
|
||||||
comformant, there is lots of code in assimp that leaves the compiler a choice
|
comformant, there is lots of code in assimp that leaves the compiler a choice
|
||||||
and different compilers make different choices (for example the precision of
|
and different compilers make different choices (for example the precision of
|
||||||
float intermediaries is implementation-specified).
|
float intermediaries is implementation-specified).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ TEST_F(ColladaExportCamera, testExportCamera)
|
||||||
{
|
{
|
||||||
const char* file = "cameraExp.dae";
|
const char* file = "cameraExp.dae";
|
||||||
|
|
||||||
const aiScene* pTest = im->ReadFile("../test/models/Collada/cameras.dae",0);
|
const aiScene* pTest = im->ReadFile(ASSIMP_TEST_MODELS_DIR "/Collada/cameras.dae",0);
|
||||||
ASSERT_TRUE(pTest!=NULL);
|
ASSERT_TRUE(pTest!=NULL);
|
||||||
ASSERT_TRUE(pTest->HasCameras());
|
ASSERT_TRUE(pTest->HasCameras());
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ TEST_F(ColladaExportLight, testExportLight)
|
||||||
{
|
{
|
||||||
const char* file = "cameraExp.dae";
|
const char* file = "cameraExp.dae";
|
||||||
|
|
||||||
const aiScene* pTest = im->ReadFile("../test/models/Collada/lights.dae",0);
|
const aiScene* pTest = im->ReadFile(ASSIMP_TEST_MODELS_DIR "/Collada/lights.dae",0);
|
||||||
ASSERT_TRUE(pTest!=NULL);
|
ASSERT_TRUE(pTest!=NULL);
|
||||||
ASSERT_TRUE(pTest->HasLights());
|
ASSERT_TRUE(pTest->HasLights());
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ public:
|
||||||
ex = new Assimp::Exporter();
|
ex = new Assimp::Exporter();
|
||||||
im = new Assimp::Importer();
|
im = new Assimp::Importer();
|
||||||
|
|
||||||
pTest = im->ReadFile("../../test/models/X/test.x",0);
|
pTest = im->ReadFile(ASSIMP_TEST_MODELS_DIR "/X/test.x",0);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void TearDown()
|
virtual void TearDown()
|
||||||
|
|
|
@ -219,13 +219,13 @@ TEST_F(ImporterTest, testMultipleReads)
|
||||||
aiProcess_OptimizeMeshes |
|
aiProcess_OptimizeMeshes |
|
||||||
aiProcess_OptimizeGraph;
|
aiProcess_OptimizeGraph;
|
||||||
|
|
||||||
EXPECT_TRUE(pImp->ReadFile("../test/models/X/test.x",flags));
|
EXPECT_TRUE(pImp->ReadFile(ASSIMP_TEST_MODELS_DIR "/X/test.x",flags));
|
||||||
//EXPECT_TRUE(pImp->ReadFile("../../test/models/X/dwarf.x",flags)); # is in nonbsd
|
//EXPECT_TRUE(pImp->ReadFile(ASSIMP_TEST_MODELS_DIR "/X/dwarf.x",flags)); # is in nonbsd
|
||||||
EXPECT_TRUE(pImp->ReadFile("../test/models/X/Testwuson.X",flags));
|
EXPECT_TRUE(pImp->ReadFile(ASSIMP_TEST_MODELS_DIR "/X/Testwuson.X",flags));
|
||||||
EXPECT_TRUE(pImp->ReadFile("../test/models/X/anim_test.x",flags));
|
EXPECT_TRUE(pImp->ReadFile(ASSIMP_TEST_MODELS_DIR "/X/anim_test.x",flags));
|
||||||
//EXPECT_TRUE(pImp->ReadFile("../../test/models/X/dwarf.x",flags)); # is in nonbsd
|
//EXPECT_TRUE(pImp->ReadFile(ASSIMP_TEST_MODELS_DIR "/X/dwarf.x",flags)); # is in nonbsd
|
||||||
|
|
||||||
EXPECT_TRUE(pImp->ReadFile("../test/models/X/anim_test.x",flags));
|
EXPECT_TRUE(pImp->ReadFile(ASSIMP_TEST_MODELS_DIR "/X/anim_test.x",flags));
|
||||||
EXPECT_TRUE(pImp->ReadFile("../test/models/X/BCN_Epileptic.X",flags));
|
EXPECT_TRUE(pImp->ReadFile(ASSIMP_TEST_MODELS_DIR "/X/BCN_Epileptic.X",flags));
|
||||||
//EXPECT_TRUE(pImp->ReadFile("../../test/models/X/dwarf.x",flags)); # is in nonbsd
|
//EXPECT_TRUE(pImp->ReadFile(ASSIMP_TEST_MODELS_DIR "/X/dwarf.x",flags)); # is in nonbsd
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue