From 6a86c988a3d8a83b7bd2b71b2ff956ecc3837003 Mon Sep 17 00:00:00 2001 From: tomohiro yasutomo Date: Sun, 5 Sep 2010 19:55:26 -0700 Subject: [PATCH] remove confliction --- bin/numeric | Bin 94969 -> 94969 bytes lib/libmofmath.a | Bin 128102 -> 128102 bytes lib/libmofutil.a | Bin 92752 -> 92752 bytes .../CMakeFiles/CMakeDirectoryInformation.cmake | 1 - .../CMakeFiles/CMakeDirectoryInformation.cmake | 1 - .../numeric/CMakeFiles/numeric.dir/flags.make | 2 +- src/build_unix/Testing/Temporary/LastTest.log | 32 +-- .../CMakeFiles/CMakeDirectoryInformation.cmake | 1 - .../CMakeFiles/make_matrix_test.dir/flags.make | 2 +- .../math/CMakeFiles/make_matrix_test.dir/link.txt | 2 +- .../math/CMakeFiles/matrix2_test.dir/flags.make | 2 +- .../mof/math/CMakeFiles/matrix2_test.dir/link.txt | 2 +- .../math/CMakeFiles/matrix3_test.dir/flags.make | 2 +- .../mof/math/CMakeFiles/matrix3_test.dir/link.txt | 2 +- .../mof/math/CMakeFiles/mofmath.dir/flags.make | 2 +- .../math/CMakeFiles/vector2_test.dir/flags.make | 2 +- .../mof/math/CMakeFiles/vector2_test.dir/link.txt | 2 +- .../math/CMakeFiles/vector3_test.dir/flags.make | 2 +- .../mof/math/CMakeFiles/vector3_test.dir/link.txt | 2 +- .../CMakeFiles/CMakeDirectoryInformation.cmake | 1 - .../mof/util/CMakeFiles/mofutil.dir/flags.make | 2 +- src/mof/math/basic_matrix.hpp | 23 +- src/mof/math/basic_matrix.hpp.orig | 276 +++++++++++++++++++++ src/mof/math/basic_vector.hpp | 11 +- src/mof/math/basic_vector.hpp.orig | 160 ++++++++++++ src/mof/math/matrix2.hpp | 5 - src/mof/math/matrix2.hpp.orig | 83 +++++++ src/mof/math/matrix3.hpp | 10 - src/mof/math/matrix3.hpp.orig | 93 +++++++ src/mof/math/test/matrix3_test.cpp | 26 -- src/mof/math/test/matrix3_test.cpp.orig | 152 ++++++++++++ src/mof/math/test/testbin/make_matrix_test | Bin 146783 -> 146783 bytes src/mof/math/test/testbin/matrix2_test | Bin 104590 -> 104566 bytes src/mof/math/test/testbin/matrix3_test | Bin 104902 -> 104878 bytes src/mof/math/test/testbin/vector2_test | Bin 76012 -> 75986 bytes src/mof/math/test/testbin/vector3_test | Bin 76155 -> 76129 bytes 36 files changed, 795 insertions(+), 106 deletions(-) create mode 100644 src/mof/math/basic_matrix.hpp.orig create mode 100644 src/mof/math/basic_vector.hpp.orig create mode 100644 src/mof/math/matrix2.hpp.orig create mode 100644 src/mof/math/matrix3.hpp.orig create mode 100644 src/mof/math/test/matrix3_test.cpp.orig diff --git a/bin/numeric b/bin/numeric index 22a530a7685751abd0e51117e442daa1c1c43cb0..700e5b39f5b3a1f37d5489fe72d0419f847388b6 100755 GIT binary patch delta 11437 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 NYM1R>#;PM?{}1EI7}Nj& diff --git a/lib/libmofmath.a b/lib/libmofmath.a index fde4fc29589969832ff8c5a93e0fce4c523d16e9..50407fed5b534f2ccec1172e858f9218e5be11eb 100644 GIT binary patch delta 222 zcmaF%g8kVG_6ag<<|c-wMn)Tz{)j`Fn^h#X#4~zMzFDro7(MwHkW8K|U7^5OI@tzD zwoZ-(lD(7bfaL7S^MT}&$p?Vs#>o#WlmWCD^m0t3|*v&$`+l6=;?P3A$HVV7| diff --git a/sample/build_unix/CMakeFiles/CMakeDirectoryInformation.cmake b/sample/build_unix/CMakeFiles/CMakeDirectoryInformation.cmake index f61b233..0328d3b 100644 --- a/sample/build_unix/CMakeFiles/CMakeDirectoryInformation.cmake +++ b/sample/build_unix/CMakeFiles/CMakeDirectoryInformation.cmake @@ -11,7 +11,6 @@ SET(CMAKE_FORCE_UNIX_PATHS 1) # The C and CXX include file search paths: SET(CMAKE_C_INCLUDE_PATH "../../src" - "../BOOST_INCLUDE_DIR" ) SET(CMAKE_CXX_INCLUDE_PATH ${CMAKE_C_INCLUDE_PATH}) SET(CMAKE_Fortran_INCLUDE_PATH ${CMAKE_C_INCLUDE_PATH}) diff --git a/sample/build_unix/numeric/CMakeFiles/CMakeDirectoryInformation.cmake b/sample/build_unix/numeric/CMakeFiles/CMakeDirectoryInformation.cmake index f61b233..0328d3b 100644 --- a/sample/build_unix/numeric/CMakeFiles/CMakeDirectoryInformation.cmake +++ b/sample/build_unix/numeric/CMakeFiles/CMakeDirectoryInformation.cmake @@ -11,7 +11,6 @@ SET(CMAKE_FORCE_UNIX_PATHS 1) # The C and CXX include file search paths: SET(CMAKE_C_INCLUDE_PATH "../../src" - "../BOOST_INCLUDE_DIR" ) SET(CMAKE_CXX_INCLUDE_PATH ${CMAKE_C_INCLUDE_PATH}) SET(CMAKE_Fortran_INCLUDE_PATH ${CMAKE_C_INCLUDE_PATH}) diff --git a/sample/build_unix/numeric/CMakeFiles/numeric.dir/flags.make b/sample/build_unix/numeric/CMakeFiles/numeric.dir/flags.make index bcadb6a..ad62032 100644 --- a/sample/build_unix/numeric/CMakeFiles/numeric.dir/flags.make +++ b/sample/build_unix/numeric/CMakeFiles/numeric.dir/flags.make @@ -2,7 +2,7 @@ # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # compile CXX with /usr/bin/c++ -CXX_FLAGS = -Wall -O3 -DNDEBUG -std=c++0x -I/home/yasutomo/devel/moflib/sample/../src -I/home/yasutomo/devel/moflib/sample/BOOST_INCLUDE_DIR +CXX_FLAGS = -Wall -O3 -DNDEBUG -std=c++0x -I/home/yasutomo/devel/moflib/sample/../src CXX_DEFINES = diff --git a/src/build_unix/Testing/Temporary/LastTest.log b/src/build_unix/Testing/Temporary/LastTest.log index 227fe09..d085b0f 100644 --- a/src/build_unix/Testing/Temporary/LastTest.log +++ b/src/build_unix/Testing/Temporary/LastTest.log @@ -1,17 +1,17 @@ -Start testing: Sep 03 15:16 PDT +Start testing: Sep 05 19:53 PDT ---------------------------------------------------------- 1/5 Testing: vector2_test 1/5 Test: vector2_test Command: "/home/yasutomo/devel/moflib/src/mof/math/test/testbin/vector2_test" Directory: /home/yasutomo/devel/moflib/src/build_unix/mof/math -"vector2_test" start time: Sep 03 15:16 PDT +"vector2_test" start time: Sep 05 19:53 PDT Output: ---------------------------------------------------------- -Test time = 0.01 sec +Test time = 0.00 sec ---------------------------------------------------------- Test Passed. -"vector2_test" end time: Sep 03 15:16 PDT +"vector2_test" end time: Sep 05 19:53 PDT "vector2_test" time elapsed: 00:00:00 ---------------------------------------------------------- @@ -19,14 +19,14 @@ Test Passed. 2/5 Test: vector3_test Command: "/home/yasutomo/devel/moflib/src/mof/math/test/testbin/vector3_test" Directory: /home/yasutomo/devel/moflib/src/build_unix/mof/math -"vector3_test" start time: Sep 03 15:16 PDT +"vector3_test" start time: Sep 05 19:53 PDT Output: ---------------------------------------------------------- -Test time = 0.02 sec +Test time = 0.01 sec ---------------------------------------------------------- Test Passed. -"vector3_test" end time: Sep 03 15:16 PDT +"vector3_test" end time: Sep 05 19:53 PDT "vector3_test" time elapsed: 00:00:00 ---------------------------------------------------------- @@ -34,14 +34,14 @@ Test Passed. 3/5 Test: matrix2_test Command: "/home/yasutomo/devel/moflib/src/mof/math/test/testbin/matrix2_test" Directory: /home/yasutomo/devel/moflib/src/build_unix/mof/math -"matrix2_test" start time: Sep 03 15:16 PDT +"matrix2_test" start time: Sep 05 19:53 PDT Output: ---------------------------------------------------------- Test time = 0.01 sec ---------------------------------------------------------- Test Passed. -"matrix2_test" end time: Sep 03 15:16 PDT +"matrix2_test" end time: Sep 05 19:53 PDT "matrix2_test" time elapsed: 00:00:00 ---------------------------------------------------------- @@ -49,14 +49,14 @@ Test Passed. 4/5 Test: matrix3_test Command: "/home/yasutomo/devel/moflib/src/mof/math/test/testbin/matrix3_test" Directory: /home/yasutomo/devel/moflib/src/build_unix/mof/math -"matrix3_test" start time: Sep 03 15:16 PDT +"matrix3_test" start time: Sep 05 19:53 PDT Output: ---------------------------------------------------------- -Test time = 0.02 sec +Test time = 0.01 sec ---------------------------------------------------------- Test Passed. -"matrix3_test" end time: Sep 03 15:16 PDT +"matrix3_test" end time: Sep 05 19:53 PDT "matrix3_test" time elapsed: 00:00:00 ---------------------------------------------------------- @@ -64,15 +64,15 @@ Test Passed. 5/5 Test: make_matrix_test Command: "/home/yasutomo/devel/moflib/src/mof/math/test/testbin/make_matrix_test" Directory: /home/yasutomo/devel/moflib/src/build_unix/mof/math -"make_matrix_test" start time: Sep 03 15:16 PDT +"make_matrix_test" start time: Sep 05 19:53 PDT Output: ---------------------------------------------------------- -Test time = 0.01 sec +Test time = 0.02 sec ---------------------------------------------------------- Test Passed. -"make_matrix_test" end time: Sep 03 15:16 PDT +"make_matrix_test" end time: Sep 05 19:53 PDT "make_matrix_test" time elapsed: 00:00:00 ---------------------------------------------------------- -End testing: Sep 03 15:16 PDT +End testing: Sep 05 19:53 PDT diff --git a/src/build_unix/mof/math/CMakeFiles/CMakeDirectoryInformation.cmake b/src/build_unix/mof/math/CMakeFiles/CMakeDirectoryInformation.cmake index a5bac9f..1842d82 100644 --- a/src/build_unix/mof/math/CMakeFiles/CMakeDirectoryInformation.cmake +++ b/src/build_unix/mof/math/CMakeFiles/CMakeDirectoryInformation.cmake @@ -11,7 +11,6 @@ SET(CMAKE_FORCE_UNIX_PATHS 1) # The C and CXX include file search paths: SET(CMAKE_C_INCLUDE_PATH ".." - "../mof/math/BOOST_INCLUDE_DIR" ) SET(CMAKE_CXX_INCLUDE_PATH ${CMAKE_C_INCLUDE_PATH}) SET(CMAKE_Fortran_INCLUDE_PATH ${CMAKE_C_INCLUDE_PATH}) diff --git a/src/build_unix/mof/math/CMakeFiles/make_matrix_test.dir/flags.make b/src/build_unix/mof/math/CMakeFiles/make_matrix_test.dir/flags.make index 4644440..7ce566b 100644 --- a/src/build_unix/mof/math/CMakeFiles/make_matrix_test.dir/flags.make +++ b/src/build_unix/mof/math/CMakeFiles/make_matrix_test.dir/flags.make @@ -2,7 +2,7 @@ # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # compile CXX with /usr/bin/c++ -CXX_FLAGS = -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src -I/home/yasutomo/devel/moflib/src/mof/math/BOOST_INCLUDE_DIR +CXX_FLAGS = -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src CXX_DEFINES = diff --git a/src/build_unix/mof/math/CMakeFiles/make_matrix_test.dir/link.txt b/src/build_unix/mof/math/CMakeFiles/make_matrix_test.dir/link.txt index 19c7446..a0cc250 100644 --- a/src/build_unix/mof/math/CMakeFiles/make_matrix_test.dir/link.txt +++ b/src/build_unix/mof/math/CMakeFiles/make_matrix_test.dir/link.txt @@ -1 +1 @@ -/usr/bin/c++ -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x CMakeFiles/make_matrix_test.dir/test/make_matrix_test.cpp.o -o ../../../mof/math/test/testbin/make_matrix_test -rdynamic -L/home/yasutomo/devel/moflib/src/../lib /home/yasutomo/devel/moflib/lib/libmofmath.a -Wl,-rpath,/home/yasutomo/devel/moflib/src/../lib +/usr/bin/c++ -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x CMakeFiles/make_matrix_test.dir/test/make_matrix_test.cpp.o -o ../../../mof/math/test/testbin/make_matrix_test -rdynamic -L/home/yasutomo/devel/moflib/src/../lib /home/yasutomo/devel/moflib/lib/libmofmath.a -Wl,-rpath,/home/yasutomo/devel/moflib/src/../lib diff --git a/src/build_unix/mof/math/CMakeFiles/matrix2_test.dir/flags.make b/src/build_unix/mof/math/CMakeFiles/matrix2_test.dir/flags.make index 4644440..7ce566b 100644 --- a/src/build_unix/mof/math/CMakeFiles/matrix2_test.dir/flags.make +++ b/src/build_unix/mof/math/CMakeFiles/matrix2_test.dir/flags.make @@ -2,7 +2,7 @@ # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # compile CXX with /usr/bin/c++ -CXX_FLAGS = -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src -I/home/yasutomo/devel/moflib/src/mof/math/BOOST_INCLUDE_DIR +CXX_FLAGS = -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src CXX_DEFINES = diff --git a/src/build_unix/mof/math/CMakeFiles/matrix2_test.dir/link.txt b/src/build_unix/mof/math/CMakeFiles/matrix2_test.dir/link.txt index 7a76b85..83f32c5 100644 --- a/src/build_unix/mof/math/CMakeFiles/matrix2_test.dir/link.txt +++ b/src/build_unix/mof/math/CMakeFiles/matrix2_test.dir/link.txt @@ -1 +1 @@ -/usr/bin/c++ -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x CMakeFiles/matrix2_test.dir/test/matrix2_test.cpp.o -o ../../../mof/math/test/testbin/matrix2_test -rdynamic -L/home/yasutomo/devel/moflib/src/../lib /home/yasutomo/devel/moflib/lib/libmofmath.a -Wl,-rpath,/home/yasutomo/devel/moflib/src/../lib +/usr/bin/c++ -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x CMakeFiles/matrix2_test.dir/test/matrix2_test.cpp.o -o ../../../mof/math/test/testbin/matrix2_test -rdynamic -L/home/yasutomo/devel/moflib/src/../lib /home/yasutomo/devel/moflib/lib/libmofmath.a -Wl,-rpath,/home/yasutomo/devel/moflib/src/../lib diff --git a/src/build_unix/mof/math/CMakeFiles/matrix3_test.dir/flags.make b/src/build_unix/mof/math/CMakeFiles/matrix3_test.dir/flags.make index 4644440..7ce566b 100644 --- a/src/build_unix/mof/math/CMakeFiles/matrix3_test.dir/flags.make +++ b/src/build_unix/mof/math/CMakeFiles/matrix3_test.dir/flags.make @@ -2,7 +2,7 @@ # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # compile CXX with /usr/bin/c++ -CXX_FLAGS = -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src -I/home/yasutomo/devel/moflib/src/mof/math/BOOST_INCLUDE_DIR +CXX_FLAGS = -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src CXX_DEFINES = diff --git a/src/build_unix/mof/math/CMakeFiles/matrix3_test.dir/link.txt b/src/build_unix/mof/math/CMakeFiles/matrix3_test.dir/link.txt index da0b6b2..7ba7d31 100644 --- a/src/build_unix/mof/math/CMakeFiles/matrix3_test.dir/link.txt +++ b/src/build_unix/mof/math/CMakeFiles/matrix3_test.dir/link.txt @@ -1 +1 @@ -/usr/bin/c++ -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x CMakeFiles/matrix3_test.dir/test/matrix3_test.cpp.o -o ../../../mof/math/test/testbin/matrix3_test -rdynamic -L/home/yasutomo/devel/moflib/src/../lib /home/yasutomo/devel/moflib/lib/libmofmath.a -Wl,-rpath,/home/yasutomo/devel/moflib/src/../lib +/usr/bin/c++ -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x CMakeFiles/matrix3_test.dir/test/matrix3_test.cpp.o -o ../../../mof/math/test/testbin/matrix3_test -rdynamic -L/home/yasutomo/devel/moflib/src/../lib /home/yasutomo/devel/moflib/lib/libmofmath.a -Wl,-rpath,/home/yasutomo/devel/moflib/src/../lib diff --git a/src/build_unix/mof/math/CMakeFiles/mofmath.dir/flags.make b/src/build_unix/mof/math/CMakeFiles/mofmath.dir/flags.make index 4644440..7ce566b 100644 --- a/src/build_unix/mof/math/CMakeFiles/mofmath.dir/flags.make +++ b/src/build_unix/mof/math/CMakeFiles/mofmath.dir/flags.make @@ -2,7 +2,7 @@ # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # compile CXX with /usr/bin/c++ -CXX_FLAGS = -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src -I/home/yasutomo/devel/moflib/src/mof/math/BOOST_INCLUDE_DIR +CXX_FLAGS = -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src CXX_DEFINES = diff --git a/src/build_unix/mof/math/CMakeFiles/vector2_test.dir/flags.make b/src/build_unix/mof/math/CMakeFiles/vector2_test.dir/flags.make index 4644440..7ce566b 100644 --- a/src/build_unix/mof/math/CMakeFiles/vector2_test.dir/flags.make +++ b/src/build_unix/mof/math/CMakeFiles/vector2_test.dir/flags.make @@ -2,7 +2,7 @@ # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # compile CXX with /usr/bin/c++ -CXX_FLAGS = -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src -I/home/yasutomo/devel/moflib/src/mof/math/BOOST_INCLUDE_DIR +CXX_FLAGS = -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src CXX_DEFINES = diff --git a/src/build_unix/mof/math/CMakeFiles/vector2_test.dir/link.txt b/src/build_unix/mof/math/CMakeFiles/vector2_test.dir/link.txt index 9a70ada..02d626f 100644 --- a/src/build_unix/mof/math/CMakeFiles/vector2_test.dir/link.txt +++ b/src/build_unix/mof/math/CMakeFiles/vector2_test.dir/link.txt @@ -1 +1 @@ -/usr/bin/c++ -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x CMakeFiles/vector2_test.dir/test/vector2_test.cpp.o -o ../../../mof/math/test/testbin/vector2_test -rdynamic -L/home/yasutomo/devel/moflib/src/../lib /home/yasutomo/devel/moflib/lib/libmofmath.a -Wl,-rpath,/home/yasutomo/devel/moflib/src/../lib +/usr/bin/c++ -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x CMakeFiles/vector2_test.dir/test/vector2_test.cpp.o -o ../../../mof/math/test/testbin/vector2_test -rdynamic -L/home/yasutomo/devel/moflib/src/../lib /home/yasutomo/devel/moflib/lib/libmofmath.a -Wl,-rpath,/home/yasutomo/devel/moflib/src/../lib diff --git a/src/build_unix/mof/math/CMakeFiles/vector3_test.dir/flags.make b/src/build_unix/mof/math/CMakeFiles/vector3_test.dir/flags.make index 4644440..7ce566b 100644 --- a/src/build_unix/mof/math/CMakeFiles/vector3_test.dir/flags.make +++ b/src/build_unix/mof/math/CMakeFiles/vector3_test.dir/flags.make @@ -2,7 +2,7 @@ # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # compile CXX with /usr/bin/c++ -CXX_FLAGS = -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src -I/home/yasutomo/devel/moflib/src/mof/math/BOOST_INCLUDE_DIR +CXX_FLAGS = -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src CXX_DEFINES = diff --git a/src/build_unix/mof/math/CMakeFiles/vector3_test.dir/link.txt b/src/build_unix/mof/math/CMakeFiles/vector3_test.dir/link.txt index fab204a..c431531 100644 --- a/src/build_unix/mof/math/CMakeFiles/vector3_test.dir/link.txt +++ b/src/build_unix/mof/math/CMakeFiles/vector3_test.dir/link.txt @@ -1 +1 @@ -/usr/bin/c++ -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x CMakeFiles/vector3_test.dir/test/vector3_test.cpp.o -o ../../../mof/math/test/testbin/vector3_test -rdynamic -L/home/yasutomo/devel/moflib/src/../lib /home/yasutomo/devel/moflib/lib/libmofmath.a -Wl,-rpath,/home/yasutomo/devel/moflib/src/../lib +/usr/bin/c++ -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x CMakeFiles/vector3_test.dir/test/vector3_test.cpp.o -o ../../../mof/math/test/testbin/vector3_test -rdynamic -L/home/yasutomo/devel/moflib/src/../lib /home/yasutomo/devel/moflib/lib/libmofmath.a -Wl,-rpath,/home/yasutomo/devel/moflib/src/../lib diff --git a/src/build_unix/mof/util/CMakeFiles/CMakeDirectoryInformation.cmake b/src/build_unix/mof/util/CMakeFiles/CMakeDirectoryInformation.cmake index f338302..1842d82 100644 --- a/src/build_unix/mof/util/CMakeFiles/CMakeDirectoryInformation.cmake +++ b/src/build_unix/mof/util/CMakeFiles/CMakeDirectoryInformation.cmake @@ -11,7 +11,6 @@ SET(CMAKE_FORCE_UNIX_PATHS 1) # The C and CXX include file search paths: SET(CMAKE_C_INCLUDE_PATH ".." - "../mof/util/BOOST_INCLUDE_DIR" ) SET(CMAKE_CXX_INCLUDE_PATH ${CMAKE_C_INCLUDE_PATH}) SET(CMAKE_Fortran_INCLUDE_PATH ${CMAKE_C_INCLUDE_PATH}) diff --git a/src/build_unix/mof/util/CMakeFiles/mofutil.dir/flags.make b/src/build_unix/mof/util/CMakeFiles/mofutil.dir/flags.make index 75c7dab..7ce566b 100644 --- a/src/build_unix/mof/util/CMakeFiles/mofutil.dir/flags.make +++ b/src/build_unix/mof/util/CMakeFiles/mofutil.dir/flags.make @@ -2,7 +2,7 @@ # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # compile CXX with /usr/bin/c++ -CXX_FLAGS = -Wall -Werror -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src -I/home/yasutomo/devel/moflib/src/mof/util/BOOST_INCLUDE_DIR +CXX_FLAGS = -Wall -g -DPSTSDK_VALIDATION_LEVEL_FULL -std=c++0x -I/home/yasutomo/devel/moflib/src CXX_DEFINES = diff --git a/src/mof/math/basic_matrix.hpp b/src/mof/math/basic_matrix.hpp index 06972ee..143a8a4 100644 --- a/src/mof/math/basic_matrix.hpp +++ b/src/mof/math/basic_matrix.hpp @@ -116,7 +116,6 @@ namespace math //{{{ operator *= Derived& operator*=(const Derived& rhs) { -<<<<<<< HEAD Derived M; for (size_t i = 0; i < Dim; ++i) { for (size_t j = 0; j <= Dim; ++j) { @@ -125,26 +124,6 @@ namespace math sum += at(i, k) * rhs.at(k, j); } M.elements_[i][j] = sum; -======= - Derived retval; - const int SIZE = Dim + 1; - - // calculate the last element previously - int b = last_index() - Dim; - int c = Dim; - float last_sum = 0; - for (int i = 0; i < SIZE; ++i) { - last_sum += elements_[b + i] * rhs.elements_[c + i * SIZE]; - } - retval.elements_[last_index()] = 1; - - for (int a = last_index() - 1; a >= 0; --a) { - int b = a / SIZE * SIZE; - int c = a % SIZE; - float sum = 0; - for (int i = 0; i < SIZE; ++i) { - sum += elements_[b + i] * rhs.elements_[c + i * SIZE]; ->>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a } } *this = M; @@ -165,7 +144,7 @@ namespace math for (size_t i = 0; i < Dim; ++i) { float sum = 0; for (size_t k = 0; k <= Dim; ++k) { - sum += (*this)[i][k] * rhs[k]; + sum += elements_[i][k] * rhs[k]; } arr[i] = sum; } diff --git a/src/mof/math/basic_matrix.hpp.orig b/src/mof/math/basic_matrix.hpp.orig new file mode 100644 index 0000000..06972ee --- /dev/null +++ b/src/mof/math/basic_matrix.hpp.orig @@ -0,0 +1,276 @@ +#pragma once +#include +#include +#include +#include +#include +#include + +namespace mof +{ +namespace math +{ + template class row_of_matrix; + + /** + * @brief 同次座標変換行列テンプレートクラス + * @note このクラスはアフィン変換行列を表す + * @note このテンプレートから直接特殊化することは想定していない. + * あくまでmatrixxを実装するための補助テンプレートである. + * このクラスは不変クラスである. + * @tparam Dim 行列の次元(要素数はこの数値の2乗) + * @tparam Derived 特殊化されたテンプレートの派生クラス(matrixx)の型 + * @tparam Coordinate 対応するベクトルクラス(vectorx)の型 + */ + template + class basic_matrix + : boost::addable< Derived + , boost::addable2< Derived, float + , boost::subtractable< Derived + , boost::subtractable2< Derived, float + , boost::multipliable< Derived + , boost::multipliable2< Derived, float + , boost::dividable2< Derived, float + , boost::equality_comparable< Derived + > > > > > > > > + { + protected: +//{{{ size + /** + * @brief components_のサイズを返す + */ + size_t size() const + { + return Dim * (Dim + 1); + } +//}}} + union + { + float components_[Dim * (Dim + 1)]; + float elements_[Dim][Dim + 1]; + };///< 要素の配列(アフィン行列なので,最後の行は省略している) + public: + // コンストラクタ,デストラクタはデフォルトのものを使う + // 代入演算子,コピーコンストラクタはデフォルトのものを使う +//{{{ swap + void swap(Derived& rhs) throw() + { + using std::swap; + for (size_t i = 0; i < size(); ++i) { + swap(components_[i], rhs.components_[i]); + } + } +//}}} +//{{{ operator += + Derived& operator+=(const Derived& rhs) + { + for (size_t i = 0; i < size(); ++i) { + components_[i] += rhs.components_[i]; + } + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } + + Derived& operator+=(float rhs) + { + for (size_t i = 0; i < size(); ++i) { + components_[i] += rhs; + } + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } + + friend Derived operator+(float rhs1, Derived& rhs2) + { + float tmp[size()]; + for (size_t i = 0; i < size(); ++i) { + tmp[i] = rhs1 + rhs2.components_[i]; + } + return Derived(tmp); + } +//}}} +//{{{ operator -= + Derived& operator-=(const Derived& rhs) + { + for (size_t i = 0; i < size(); ++i) { + components_[i] -= rhs.components_[i]; + } + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } + + Derived& operator-=(float rhs) + { + for (size_t i = 0; i < size(); ++i) { + components_[i] -= rhs; + } + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } + + friend Derived operator-(float rhs1, Derived& rhs2) + { + float tmp[size()]; + for (size_t i = 0; i < size(); ++i) { + tmp[i] = rhs1 - rhs2.components_[i]; + } + return Derived(tmp); + } +//}}} +//{{{ operator *= + Derived& operator*=(const Derived& rhs) + { +<<<<<<< HEAD + Derived M; + for (size_t i = 0; i < Dim; ++i) { + for (size_t j = 0; j <= Dim; ++j) { + float sum = 0; + for (size_t k = 0; k <= Dim; ++k) { + sum += at(i, k) * rhs.at(k, j); + } + M.elements_[i][j] = sum; +======= + Derived retval; + const int SIZE = Dim + 1; + + // calculate the last element previously + int b = last_index() - Dim; + int c = Dim; + float last_sum = 0; + for (int i = 0; i < SIZE; ++i) { + last_sum += elements_[b + i] * rhs.elements_[c + i * SIZE]; + } + retval.elements_[last_index()] = 1; + + for (int a = last_index() - 1; a >= 0; --a) { + int b = a / SIZE * SIZE; + int c = a % SIZE; + float sum = 0; + for (int i = 0; i < SIZE; ++i) { + sum += elements_[b + i] * rhs.elements_[c + i * SIZE]; +>>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a + } + } + *this = M; + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } + + Derived& operator*=(float rhs) + { + for (size_t i = 0; i < size(); ++i) { + components_[i] *= rhs; + } + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } + + Coordinate operator*(const Coordinate& rhs) + { + float arr[Dim]; + for (size_t i = 0; i < Dim; ++i) { + float sum = 0; + for (size_t k = 0; k <= Dim; ++k) { + sum += (*this)[i][k] * rhs[k]; + } + arr[i] = sum; + } + return Coordinate(arr); + } +//}}} +//{{{ operator /= + Derived& operator/=(float rhs) + { + for (size_t i = 0; i < size(); ++i) { + components_[i] /= rhs; + } + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } +//}}} +//{{{ operator == + bool operator==(const Derived& rhs) const + { + for (size_t i = 0; i < size(); ++i) { + if (std::abs(components_[i] - rhs.components_[i]) > MOF_ERROR_THRESHOLD) return false; + } + return true; + } +//}}} +//{{{ operator [] + /** + * @note M[i][j]のように参照可能 + * @note この方法による複数の要素への参照は非効率 + */ + row_of_matrix const operator [](size_t i) const + { + return row_of_matrix(i, elements_); + } +//}}} +//{{{ operator << + /** + * @brief デバッグ出力用ストリーム演算子 + * @param [in] stream 出力ストリーム + * @param [in] rhs 出力対象となる行列オブジェクト + * @return 引数で与えられた出力ストリーム + */ + friend std::ostream& operator<< + ( + std::ostream& stream, + const Derived& rhs + ) + { + for (size_t i = 0; i < Dim + 1; ++i) { + for (size_t j = 0; j < Dim + 1; ++j) { + if (j != 0) stream << ", "; + else if (j != Dim) stream << "\n"; + stream << std::setw(5) << rhs[i][j]; + } + } + return stream; + } +//}}} +//{{{ at + /** + * @brief 行列の要素にアクセス + * @param[in] 行番号 + * @param[in] 列番号 + * @return 要素 + */ + const float at(size_t i, size_t j) const + { + if (i < Dim ) return elements_[i][j]; + if (j == Dim) return 1; + else return 0; + } +//}}} + }; +//{{{ swap + template + void swap + ( + basic_matrix& a, + basic_matrix& b + ) throw() + { + a.swap(b); + } +//}}} +//{{{ row_of_matrix + /** + * @brief M[i][j]のように行列の要素を取得するための補助クラス + */ + template + class row_of_matrix + { + size_t index_; + const float (&elements_)[Dim][Dim+1]; + public: + row_of_matrix(size_t i, const float (&elements)[Dim][Dim+1]) + : index_(i), elements_(elements) + { + } + + float operator[](size_t j) const + { + if (Dim != index_) return elements_[index_][j]; + else if (Dim == j) return 1; + else return 0; + } + }; +//}}} +}// namespace math +}// namespace mof diff --git a/src/mof/math/basic_vector.hpp b/src/mof/math/basic_vector.hpp index e6ae1a3..ba78898 100644 --- a/src/mof/math/basic_vector.hpp +++ b/src/mof/math/basic_vector.hpp @@ -86,16 +86,6 @@ namespace math for (size_t i = 0; i < Dim; ++i) components_[i] *= rhs; return *reinterpret_cast(this);//thisがDerived型であることは保証されている. } -<<<<<<< HEAD - - friend Derived operator*(float rhs1, Derived& rhs2) - { - Derived retval; - for (size_t i = 0; i < Dim; ++i) retval.components_[i] = rhs1 * rhs2.components_[i]; - return retval; - } -======= ->>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a //}}} //{{{ operator /= Derived& operator/=(float rhs) @@ -158,3 +148,4 @@ namespace math }// namespace math }// namespace mof + diff --git a/src/mof/math/basic_vector.hpp.orig b/src/mof/math/basic_vector.hpp.orig new file mode 100644 index 0000000..e6ae1a3 --- /dev/null +++ b/src/mof/math/basic_vector.hpp.orig @@ -0,0 +1,160 @@ +#pragma once +#include +#include +#include +#include +#include + + +namespace mof +{ +namespace math +{ + /** + * @brief 同次座標ベクトルテンプレートクラス + * @note このテンプレートから直接特殊化することは想定していない. + * あくまでvectorxを実装するための補助テンプレートである. + * このクラスは不変クラスである. + * @tparam Dim ベクトルの次元(要素数) + * @tparam Derived 特殊化されたテンプレートの派生クラス(vectorx)の型 + */ + template + class basic_vector + : boost::addable< Derived + , boost::addable2< Derived, float + , boost::subtractable< Derived + , boost::subtractable2< Derived, float + , boost::multipliable2< Derived, float + , boost::dividable2< Derived, float + , boost::equality_comparable< Derived + > > > > > > > + { + protected: + float components_[Dim];///< 要素の配列 + public: + // コンストラクタ,デストラクタはデフォルトのものを使う + // 代入演算子,コピーコンストラクタはデフォルトのものを使う +//{{{ swap + void swap(Derived& rhs) throw() + { + for (size_t i = 0; i < Dim; ++i) std::swap(rhs.components_[i], components_[i]); + } +//}}} +//{{{ operator += + Derived& operator+=(const Derived& rhs) + { + for (size_t i = 0; i < Dim; ++i) components_[i] += rhs.components_[i]; + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } + + Derived& operator+=(float rhs) + { + for (size_t i = 0; i < Dim; ++i) components_[i] += rhs; + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } + + friend Derived operator+(float rhs1, Derived& rhs2) + { + Derived retval; + for (size_t i = 0; i < Dim; ++i) retval.components_[i] = rhs1 + rhs2.components_[i]; + return retval; + } +//}}} +//{{{ operator -= + Derived& operator-=(const Derived& rhs) + { + for (size_t i = 0; i < Dim; ++i) components_[i] -= rhs.components_[i]; + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } + + Derived& operator-=(float rhs) + { + for (size_t i = 0; i < Dim; ++i) components_[i] -= rhs; + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } + + friend Derived operator-(float rhs1, Derived& rhs2) + { + Derived retval; + for (size_t i = 0; i < Dim; ++i) retval.components_[i] = rhs1 - rhs2.components_[i]; + return retval; + } +//}}} +//{{{ operator *= + Derived& operator*=(float rhs) + { + for (size_t i = 0; i < Dim; ++i) components_[i] *= rhs; + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } +<<<<<<< HEAD + + friend Derived operator*(float rhs1, Derived& rhs2) + { + Derived retval; + for (size_t i = 0; i < Dim; ++i) retval.components_[i] = rhs1 * rhs2.components_[i]; + return retval; + } +======= +>>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a +//}}} +//{{{ operator /= + Derived& operator/=(float rhs) + { + for (size_t i = 0; i < Dim; ++i) components_[i] /= rhs; + return *reinterpret_cast(this);//thisがDerived型であることは保証されている. + } +//}}} +//{{{ operator == + bool operator==(const Derived& rhs) const + { + for (size_t i = 0; i < Dim; ++i) { + if (std::abs(components_[i] - rhs.components_[i]) > MOF_ERROR_THRESHOLD) return false; + } + return true; + } +//}}} +//{{{ operator [] + /** + * @note Dim+1番目の要素は常に1 + * @param[in] index 添字 + */ + float operator[](size_t index) const + { + if (index < Dim) return components_[index]; + else if (index == Dim) return 1; + // TODO exception + return 0; + } +//}}} +//{{{ operator << + /** + * @brief デバッグ出力用ストリーム演算子 + * @param[in] stream 出力ストリーム + * @param[in] rhs 出力対象となるベクトルオブジェクト + * @return 引数で与えられた出力ストリーム + */ + friend std::ostream& operator<< + ( + std::ostream& stream, + const Derived& rhs + ) + { + for (size_t i = 0; i < Dim; ++i) + { + if (i != 0) stream << ", "; + stream << rhs.components_[i]; + } + return stream; + } +//}}} + }; +//{{{ swap + template + void swap(basic_vector& a, basic_vector& b) throw() + { + a.swap(b); + } +//}}} + +}// namespace math +}// namespace mof diff --git a/src/mof/math/matrix2.hpp b/src/mof/math/matrix2.hpp index 2e969de..a460b76 100644 --- a/src/mof/math/matrix2.hpp +++ b/src/mof/math/matrix2.hpp @@ -66,13 +66,8 @@ namespace math //{{{ operator = matrix2& operator = (const matrix2& rhs) { -<<<<<<< HEAD for (size_t i = 0; i < size(); ++i) { components_[i] = rhs.components_[i]; -======= - for (size_t i = 0; i <= last_index() - 1; ++i) { - elements_[i] = rhs.elements_[i]; ->>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a } return *this; } diff --git a/src/mof/math/matrix2.hpp.orig b/src/mof/math/matrix2.hpp.orig new file mode 100644 index 0000000..2e969de --- /dev/null +++ b/src/mof/math/matrix2.hpp.orig @@ -0,0 +1,83 @@ +#pragma once +#include + +namespace mof +{ +namespace math +{ + class vector2; + + /** + * @brief 2次元同次座標変換行列クラス + */ + class matrix2 : public basic_matrix<2, matrix2, vector2> + { + public: +//{{{ constructor + /** + * @brief デフォルトコンストラクタ + * @note 効率のため,初期化は行われない + */ + matrix2() + { + } + + /** + * @brief 指定した値で初期化する. + * @tparam T 配列型(operator[]をオーバーロードしていること) + * @param[in] arr 初期化用配列 + */ + template + explicit matrix2(const T& arr) + { + for (size_t i = 0; i < size(); ++i) { + components_[i] = arr[i]; + } + } + + /** + * @brief 指定した値で初期化する. + */ + matrix2 + ( + float m11, float m12, float m13, + float m21, float m22, float m23 + ) + { + const float* table[] = + { + &m11, &m12, &m13, + &m21, &m22, &m23 + }; + for (size_t i = 0; i < size(); ++i) { + components_[i] = *table[i]; + } + } + +//}}} +//{{{ copy constructor + matrix2(const matrix2& rhs) + { + for (size_t i = 0; i < size(); ++i) { + components_[i] = rhs.components_[i]; + } + } +//}}} +//{{{ operator = + matrix2& operator = (const matrix2& rhs) + { +<<<<<<< HEAD + for (size_t i = 0; i < size(); ++i) { + components_[i] = rhs.components_[i]; +======= + for (size_t i = 0; i <= last_index() - 1; ++i) { + elements_[i] = rhs.elements_[i]; +>>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a + } + return *this; + } +//}}} + }; + +}// namespace math +}// namespace mof diff --git a/src/mof/math/matrix3.hpp b/src/mof/math/matrix3.hpp index a6f7849..77e6ade 100644 --- a/src/mof/math/matrix3.hpp +++ b/src/mof/math/matrix3.hpp @@ -60,13 +60,8 @@ namespace math //{{{ copy constructor matrix3(const matrix3& rhs) { -<<<<<<< HEAD for (size_t i = 0; i < size(); ++i) { components_[i] = rhs.components_[i]; -======= - for (size_t i = 0; i <= last_index(); ++i) { - elements_[i] = rhs.elements_[i]; ->>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a } } //}}} @@ -76,13 +71,8 @@ namespace math */ matrix3& operator = (const matrix3& rhs) { -<<<<<<< HEAD for (size_t i = 0; i < size(); ++i) { components_[i] = rhs.components_[i]; -======= - for (size_t i = 0; i <= last_index() -1; ++i) { - elements_[i] = rhs.elements_[i]; ->>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a } return *this; } diff --git a/src/mof/math/matrix3.hpp.orig b/src/mof/math/matrix3.hpp.orig new file mode 100644 index 0000000..a6f7849 --- /dev/null +++ b/src/mof/math/matrix3.hpp.orig @@ -0,0 +1,93 @@ +#pragma once +#include + +namespace mof +{ +namespace math +{ + class vector3; + + /** + * @brief 3次元同次座標変換行列クラス + */ + class matrix3 : public basic_matrix<3, matrix3, vector3> + { + public: +//{{{ constructor + /** + * @brief デフォルトコンストラクタ + * @note 効率のため,初期化は行われない + */ + matrix3() + { + } + + /** + * @brief 指定した値で初期化する. + * @tparam T 配列型(operator[]をオーバーロードしていること) + * @param[in] arr 初期化用配列 + */ + template + explicit matrix3(const T& arr) + { + for (size_t i = 0; i < size(); ++i) { + components_[i] = arr[i]; + } + } + + /** + * @brief 指定した値で初期化する. + */ + matrix3 + ( + float m11, float m12, float m13, float m14, + float m21, float m22, float m23, float m24, + float m31, float m32, float m33, float m34 + ) + { + const float* table[] = + { + &m11, &m12, &m13, &m14, + &m21, &m22, &m23, &m24, + &m31, &m32, &m33, &m34 + }; + for (size_t i = 0; i < size(); ++i) { + components_[i] = *table[i]; + } + } + +//}}} +//{{{ copy constructor + matrix3(const matrix3& rhs) + { +<<<<<<< HEAD + for (size_t i = 0; i < size(); ++i) { + components_[i] = rhs.components_[i]; +======= + for (size_t i = 0; i <= last_index(); ++i) { + elements_[i] = rhs.elements_[i]; +>>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a + } + } +//}}} +//{{{ operator = + /** + * @note コピーのパフォーマンスのためにこの関数の定義は重要 + */ + matrix3& operator = (const matrix3& rhs) + { +<<<<<<< HEAD + for (size_t i = 0; i < size(); ++i) { + components_[i] = rhs.components_[i]; +======= + for (size_t i = 0; i <= last_index() -1; ++i) { + elements_[i] = rhs.elements_[i]; +>>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a + } + return *this; + } +//}}} + }; + +}// namespace math +}// namespace mof diff --git a/src/mof/math/test/matrix3_test.cpp b/src/mof/math/test/matrix3_test.cpp index 30595a4..f079e11 100644 --- a/src/mof/math/test/matrix3_test.cpp +++ b/src/mof/math/test/matrix3_test.cpp @@ -83,12 +83,7 @@ int main() matrix3 N1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); matrix3 N2(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13); matrix3 N = N1 * N2; -<<<<<<< HEAD matrix3 A(44, 50, 56, 66, 116, 134, 152, 178, 188, 218, 248, 290); -======= - matrix3 A(44, 50, 56, 66, 116, 134, 152, 178, 188, 218, 248, 290, 0, 0, 0); - cout << N << endl; ->>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a if (N != A) { cerr << "Failed:" << "Affine matrix N1 * N2 test" << endl; failed_count++; @@ -96,28 +91,7 @@ int main() } { -<<<<<<< HEAD matrix3 M(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); -======= - matrix3 N1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - matrix3 N2(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); - matrix3 N = N1 * N2; - matrix3 A - ( - 0.25840f, 0.28424f, 0.31008f, 0.17054f, - 0.58915f, 0.65633f, 0.72351f, 0.45995f, - 0.91990f, 1.02842f, 1.13695f, 0.74935f, - 0.70801f, 0.81912f, 0.93023f - ); - if (N != A) { - cerr << "Failed:" << "Projective matrix N1 * N2 test" << endl; - failed_count++; - } - } - - { - matrix3 M(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); ->>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a vector3 v(1, 2, 3); vector3 w = M * v; vector3 a(18, 46, 74); diff --git a/src/mof/math/test/matrix3_test.cpp.orig b/src/mof/math/test/matrix3_test.cpp.orig new file mode 100644 index 0000000..30595a4 --- /dev/null +++ b/src/mof/math/test/matrix3_test.cpp.orig @@ -0,0 +1,152 @@ +#include +#include +#include +#include + +int main() +{ + using namespace mof::math; + using namespace std; + int failed_count = 0; + + { + matrix3 M(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + bool failed = false; + for (size_t i = 0; i < 12; ++i) { + if (M[i / 4][i % 4] != i + 1) failed = true; + } + if (failed || M[3][0] != 0 || M[3][1] != 0 || M[3][2] != 0 || M[3][3] != 1) { + cerr << "Failed:" << " initialize test" << endl; + failed_count++; + } + } + + { + float arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; + matrix3 M(arr); + bool failed = false; + for (size_t i = 0; i < 12; ++i) { + if (M[i / 4][i % 4] != i + 1) failed = true; + } + if (failed || M[3][0] != 0 || M[3][1] != 0 || M[3][2] != 0 || M[3][3] != 1) { + cerr << "Failed:" << " initialize by array test" << endl; + failed_count++; + } + } + + { + matrix3 M(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + matrix3 N(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + if (M != N) { + cerr << "Failed:" << " M == N test" << endl; + failed_count++; + } + } + + { + matrix3 M(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + matrix3 N(0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + if (M == N) { + cerr << "Failed:" << " M != N test" << endl; + failed_count++; + } + } + + { + matrix3 N1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + matrix3 N2(29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7); + matrix3 N = N1 + N2; + matrix3 A(30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19); + if (N != A) { + cerr << "Failed:" << " addition test" << endl; + failed_count++; + } + } + + { + matrix3 N1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + matrix3 N2(29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7); + matrix3 N = N1 - N2; + matrix3 A + ( + -28, -25, -22, -19, + -16, -13, -10, -7, + -4, -1, 2, 5 + ); + if (N != A) { + cerr << "Failed:" << " subtraction test" << endl; + failed_count++; + } + } + + { + matrix3 N1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + matrix3 N2(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13); + matrix3 N = N1 * N2; +<<<<<<< HEAD + matrix3 A(44, 50, 56, 66, 116, 134, 152, 178, 188, 218, 248, 290); +======= + matrix3 A(44, 50, 56, 66, 116, 134, 152, 178, 188, 218, 248, 290, 0, 0, 0); + cout << N << endl; +>>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a + if (N != A) { + cerr << "Failed:" << "Affine matrix N1 * N2 test" << endl; + failed_count++; + } + } + + { +<<<<<<< HEAD + matrix3 M(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); +======= + matrix3 N1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + matrix3 N2(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); + matrix3 N = N1 * N2; + matrix3 A + ( + 0.25840f, 0.28424f, 0.31008f, 0.17054f, + 0.58915f, 0.65633f, 0.72351f, 0.45995f, + 0.91990f, 1.02842f, 1.13695f, 0.74935f, + 0.70801f, 0.81912f, 0.93023f + ); + if (N != A) { + cerr << "Failed:" << "Projective matrix N1 * N2 test" << endl; + failed_count++; + } + } + + { + matrix3 M(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); +>>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a + vector3 v(1, 2, 3); + vector3 w = M * v; + vector3 a(18, 46, 74); + if (a != w) { + cerr << "Failed:" << "M * v test" << endl; + failed_count++; + } + } + + + { + matrix3 M(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + matrix3 N = 2 * M * 3; + matrix3 A(6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72); + if (N != A) { + cerr << "Failed:" << "s * M * s test" << endl; + failed_count++; + } + } + + { + matrix3 M(6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72); + matrix3 N = M / 6; + matrix3 A(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + if (N != A) { + cerr << "Failed:" << "M / s test" << endl; + failed_count++; + } + } + + return failed_count; +} diff --git a/src/mof/math/test/testbin/make_matrix_test b/src/mof/math/test/testbin/make_matrix_test index b19397912866fa639b1f723cdbd0cc805bb9b675..40d6ca12448bc4ecccca9332b46da86d46b3f610 100755 GIT binary patch delta 389 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 diff --git a/src/mof/math/test/testbin/matrix3_test b/src/mof/math/test/testbin/matrix3_test index 6e36d7181dcc5c60ec042e6ab3e5502bdc2450a8..c1b162a3d6c4448c78208e3cb321e2c0325bb03a 100755 GIT binary patch delta 5382 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 H&h`Bt@by|6 delta 5424 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 DW3IE8 delta 24161 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 Gfd2!LVVFPw diff --git a/src/mof/math/test/testbin/vector3_test b/src/mof/math/test/testbin/vector3_test index a440908997cf02acab4c689dca43c2607f09db89..57045bc1ced26d5e3f9670b1b94947529e46d1c6 100755 GIT binary patch delta 24411 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 delta 24788 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