Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
05d64aea
Commit
05d64aea
authored
Jul 31, 2014
by
peastman
Browse files
Merge pull request #567 from peastman/pnacl
Support Chrome portable native client
parents
f6b20365
ec785e70
Changes
28
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
219 additions
and
37 deletions
+219
-37
plugins/cpupme/src/CpuPmeKernels.cpp
plugins/cpupme/src/CpuPmeKernels.cpp
+1
-14
plugins/cpupme/tests/CMakeLists.txt
plugins/cpupme/tests/CMakeLists.txt
+5
-8
serialization/tests/CMakeLists.txt
serialization/tests/CMakeLists.txt
+5
-2
serialization/tests/TestSerializeCustomTorsionForce.cpp
serialization/tests/TestSerializeCustomTorsionForce.cpp
+1
-1
serialization/tests/TestSerializeIntegrator.cpp
serialization/tests/TestSerializeIntegrator.cpp
+3
-3
serialization/tests/TestSerializeState.cpp
serialization/tests/TestSerializeState.cpp
+6
-6
tests/CMakeLists.txt
tests/CMakeLists.txt
+10
-3
tests/TestVectorize.cpp
tests/TestVectorize.cpp
+188
-0
No files found.
plugins/cpupme/src/CpuPmeKernels.cpp
View file @
05d64aea
...
...
@@ -569,20 +569,7 @@ double CpuCalcPmeReciprocalForceKernel::finishComputation(IO& io) {
}
bool
CpuCalcPmeReciprocalForceKernel
::
isProcessorSupported
()
{
// Make sure the CPU supports SSE 4.1 or NEON.
#ifdef __ANDROID__
uint64_t
features
=
android_getCpuFeatures
();
return
(
features
&
ANDROID_CPU_ARM_FEATURE_NEON
)
!=
0
;
#else
int
cpuInfo
[
4
];
cpuid
(
cpuInfo
,
0
);
if
(
cpuInfo
[
0
]
>=
1
)
{
cpuid
(
cpuInfo
,
1
);
return
((
cpuInfo
[
2
]
&
((
int
)
1
<<
19
))
!=
0
);
}
return
false
;
#endif
return
isVec4Supported
();
}
int
CpuCalcPmeReciprocalForceKernel
::
findFFTDimension
(
int
minimum
)
{
...
...
plugins/cpupme/tests/CMakeLists.txt
View file @
05d64aea
...
...
@@ -3,19 +3,16 @@
#
ENABLE_TESTING
()
SET
(
SHARED_OPENMM_PME_TARGET OpenMMPME
)
#LINK_DIRECTORIES
# Automatically create tests using files named "Test*.cpp"
FILE
(
GLOB TEST_PROGS
"*Test*.cpp"
)
FOREACH
(
TEST_PROG
${
TEST_PROGS
}
)
GET_FILENAME_COMPONENT
(
TEST_ROOT
${
TEST_PROG
}
NAME_WE
)
# Link with shared library
ADD_EXECUTABLE
(
${
TEST_ROOT
}
${
TEST_PROG
}
)
TARGET_LINK_LIBRARIES
(
${
TEST_ROOT
}
${
SHARED_TARGET
}
${
SHARED_OPENMM_TARGET
}
${
SHARED_OPENMM_PME_TARGET
}
)
IF
(
OPENMM_BUILD_SHARED_LIB
)
TARGET_LINK_LIBRARIES
(
${
TEST_ROOT
}
${
SHARED_TARGET
}
${
OPENMM_LIBRARY_NAME
}
)
ELSE
(
OPENMM_BUILD_SHARED_LIB
)
TARGET_LINK_LIBRARIES
(
${
TEST_ROOT
}
${
STATIC_TARGET
}
${
OPENMM_LIBRARY_NAME
}
_static
)
ENDIF
(
OPENMM_BUILD_SHARED_LIB
)
SET_TARGET_PROPERTIES
(
${
TEST_ROOT
}
PROPERTIES LINK_FLAGS
"
${
EXTRA_COMPILE_FLAGS
}
"
COMPILE_FLAGS
"
${
EXTRA_COMPILE_FLAGS
}
"
)
ADD_TEST
(
${
TEST_ROOT
}
${
EXECUTABLE_OUTPUT_PATH
}
/
${
TEST_ROOT
}
)
ENDFOREACH
(
TEST_PROG
${
TEST_PROGS
}
)
serialization/tests/CMakeLists.txt
View file @
05d64aea
...
...
@@ -9,9 +9,12 @@ FILE(GLOB TEST_PROGS "*Test*.cpp")
FOREACH
(
TEST_PROG
${
TEST_PROGS
}
)
GET_FILENAME_COMPONENT
(
TEST_ROOT
${
TEST_PROG
}
NAME_WE
)
# All tests use shared libraries
ADD_EXECUTABLE
(
${
TEST_ROOT
}
${
TEST_PROG
}
)
IF
(
OPENMM_BUILD_SHARED_LIB
)
TARGET_LINK_LIBRARIES
(
${
TEST_ROOT
}
${
SHARED_TARGET
}
)
ELSE
(
OPENMM_BUILD_SHARED_LIB
)
TARGET_LINK_LIBRARIES
(
${
TEST_ROOT
}
${
STATIC_TARGET
}
)
ENDIF
(
OPENMM_BUILD_SHARED_LIB
)
SET_TARGET_PROPERTIES
(
${
TEST_ROOT
}
PROPERTIES LINK_FLAGS
"
${
EXTRA_COMPILE_FLAGS
}
"
COMPILE_FLAGS
"
${
EXTRA_COMPILE_FLAGS
}
"
)
ADD_TEST
(
${
TEST_ROOT
}
${
EXECUTABLE_OUTPUT_PATH
}
/
${
TEST_ROOT
}
)
...
...
serialization/tests/TestSerializeCustomTorsionForce.cpp
View file @
05d64aea
...
...
@@ -84,7 +84,7 @@ void testSerialization() {
ASSERT_EQUAL
(
c2
,
c2
);
ASSERT_EQUAL
(
d2
,
d2
);
ASSERT_EQUAL
(
params1
.
size
(),
params2
.
size
());
for
(
int
j
=
0
;
j
<
params1
.
size
();
j
++
)
for
(
int
j
=
0
;
j
<
(
int
)
params1
.
size
();
j
++
)
ASSERT_EQUAL
(
params1
[
j
],
params2
[
j
]);
}
}
...
...
serialization/tests/TestSerializeIntegrator.cpp
View file @
05d64aea
...
...
@@ -151,16 +151,16 @@ void testSerializeCustomIntegrator() {
XmlSerializer
::
serialize
<
Integrator
>
(
intg
,
"CustomIntegrator"
,
ss
);
CustomIntegrator
*
intg2
=
dynamic_cast
<
CustomIntegrator
*>
(
XmlSerializer
::
deserialize
<
Integrator
>
(
ss
));
ASSERT_EQUAL
(
intg
->
getNumGlobalVariables
(),
intg
->
getNumGlobalVariables
());
for
(
int
i
=
0
;
i
<
intg
->
getNumGlobalVariables
();
i
++
)
{
for
(
int
i
=
0
;
i
<
intg
->
getNumGlobalVariables
();
i
++
)
{
ASSERT_EQUAL
(
intg
->
getGlobalVariable
(
i
),
intg2
->
getGlobalVariable
(
i
));
ASSERT_EQUAL
(
intg
->
getGlobalVariableName
(
i
),
intg2
->
getGlobalVariableName
(
i
));
}
ASSERT_EQUAL
(
intg
->
getNumPerDofVariables
(),
intg2
->
getNumPerDofVariables
());
for
(
int
i
=
0
;
i
<
intg
->
getNumPerDofVariables
();
i
++
)
{
for
(
int
i
=
0
;
i
<
intg
->
getNumPerDofVariables
();
i
++
)
{
vector
<
Vec3
>
vars1
;
intg
->
getPerDofVariable
(
i
,
vars1
);
vector
<
Vec3
>
vars2
;
intg2
->
getPerDofVariable
(
i
,
vars2
);
ASSERT_EQUAL
(
vars1
.
size
(),
vars2
.
size
());
for
(
int
j
=
0
;
j
<
vars1
.
size
();
j
++
)
{
for
(
int
j
=
0
;
j
<
(
int
)
vars1
.
size
();
j
++
)
{
ASSERT_EQUAL
(
vars1
[
j
][
0
],
vars2
[
j
][
0
]);
ASSERT_EQUAL
(
vars1
[
j
][
1
],
vars2
[
j
][
1
]);
ASSERT_EQUAL
(
vars1
[
j
][
2
],
vars2
[
j
][
2
]);
...
...
serialization/tests/TestSerializeState.cpp
View file @
05d64aea
...
...
@@ -71,11 +71,11 @@ void testSerialization() {
// Set positions, velocities, forces
vector
<
Vec3
>
positions
;
for
(
int
i
=
0
;
i
<
numParticles
;
i
++
)
{
for
(
int
i
=
0
;
i
<
numParticles
;
i
++
)
{
positions
.
push_back
(
Vec3
(
((
float
)
rand
()
/
(
float
)
RAND_MAX
)
*
6.2
,
((
float
)
rand
()
/
(
float
)
RAND_MAX
)
*
6.2
,
((
float
)
rand
()
/
(
float
)
RAND_MAX
)
*
6.2
));
}
vector
<
Vec3
>
velocities
;
for
(
int
i
=
0
;
i
<
numParticles
;
i
++
)
{
for
(
int
i
=
0
;
i
<
numParticles
;
i
++
)
{
velocities
.
push_back
(
Vec3
(
((
float
)
rand
()
/
(
float
)
RAND_MAX
)
*
6.2
,
((
float
)
rand
()
/
(
float
)
RAND_MAX
)
*
6.2
,
((
float
)
rand
()
/
(
float
)
RAND_MAX
)
*
6.2
));
}
...
...
@@ -95,19 +95,19 @@ void testSerialization() {
vector
<
Vec3
>
pos2
=
s2
.
getPositions
();
ASSERT_EQUAL
(
pos1
.
size
(),
pos2
.
size
());
ASSERT_EQUAL
(
pos1
.
size
(),
positions
.
size
());
for
(
int
i
=
0
;
i
<
pos1
.
size
();
i
++
)
{
for
(
int
i
=
0
;
i
<
(
int
)
pos1
.
size
();
i
++
)
{
ASSERT_EQUAL_VEC
(
pos1
[
i
],
pos2
[
i
],
0
);
}
vector
<
Vec3
>
vel1
=
s1
.
getVelocities
();
vector
<
Vec3
>
vel2
=
s2
.
getVelocities
();
ASSERT_EQUAL
(
vel1
.
size
(),
vel2
.
size
());
for
(
int
i
=
0
;
i
<
pos1
.
size
();
i
++
)
{
for
(
int
i
=
0
;
i
<
(
int
)
pos1
.
size
();
i
++
)
{
ASSERT_EQUAL_VEC
(
vel1
[
i
],
vel2
[
i
],
0
);
}
vector
<
Vec3
>
forces1
=
s1
.
getForces
();
vector
<
Vec3
>
forces2
=
s2
.
getForces
();
ASSERT_EQUAL
(
forces1
.
size
(),
forces2
.
size
());
for
(
int
i
=
0
;
i
<
pos1
.
size
();
i
++
)
{
for
(
int
i
=
0
;
i
<
(
int
)
pos1
.
size
();
i
++
)
{
ASSERT_EQUAL_VEC
(
forces1
[
i
],
forces2
[
i
],
0
);
}
Vec3
a1
,
a2
,
a3
,
b1
,
b2
,
b3
;
...
...
@@ -128,7 +128,7 @@ void testSerialization() {
map
<
string
,
double
>::
const_iterator
it1
=
p1
.
begin
();
map
<
string
,
double
>::
const_iterator
it2
=
p2
.
begin
();
//maps are ordered, so iterators should be in the same order.
for
(
it1
=
p1
.
begin
();
it1
!=
p1
.
end
();
it1
++
,
it2
++
)
{
for
(
it1
=
p1
.
begin
();
it1
!=
p1
.
end
();
it1
++
,
it2
++
)
{
assert
((
it1
->
first
).
compare
(
it2
->
first
)
==
0
);
ASSERT_EQUAL
(
it1
->
second
,
it2
->
second
);
}
...
...
tests/CMakeLists.txt
View file @
05d64aea
...
...
@@ -8,10 +8,17 @@ ENABLE_TESTING()
FILE
(
GLOB TEST_PROGS
"*Test*.cpp"
)
FOREACH
(
TEST_PROG
${
TEST_PROGS
}
)
GET_FILENAME_COMPONENT
(
TEST_ROOT
${
TEST_PROG
}
NAME_WE
)
# All tests use shared library only
ADD_EXECUTABLE
(
${
TEST_ROOT
}
${
TEST_PROG
}
)
IF
(
OPENMM_BUILD_SHARED_LIB
)
TARGET_LINK_LIBRARIES
(
${
TEST_ROOT
}
${
SHARED_TARGET
}
)
SET_TARGET_PROPERTIES
(
${
TEST_ROOT
}
PROPERTIES LINK_FLAGS
"
${
EXTRA_COMPILE_FLAGS
}
"
COMPILE_FLAGS
"
${
EXTRA_COMPILE_FLAGS
}
"
)
ELSE
(
OPENMM_BUILD_SHARED_LIB
)
TARGET_LINK_LIBRARIES
(
${
TEST_ROOT
}
${
STATIC_TARGET
}
)
ENDIF
(
OPENMM_BUILD_SHARED_LIB
)
SET
(
EXTRA_TEST_FLAGS
"
${
EXTRA_COMPILE_FLAGS
}
"
)
IF
((
${
TEST_ROOT
}
MATCHES TestVectorize
)
AND
NOT
(
MSVC OR ANDROID OR PNACL
))
SET
(
EXTRA_TEST_FLAGS
"
${
EXTRA_COMPILE_FLAGS
}
-msse4.1"
)
ENDIF
((
${
TEST_ROOT
}
MATCHES TestVectorize
)
AND
NOT
(
MSVC OR ANDROID OR PNACL
))
SET_TARGET_PROPERTIES
(
${
TEST_ROOT
}
PROPERTIES LINK_FLAGS
"
${
EXTRA_TEST_FLAGS
}
"
COMPILE_FLAGS
"
${
EXTRA_TEST_FLAGS
}
"
)
ADD_TEST
(
${
TEST_ROOT
}
${
EXECUTABLE_OUTPUT_PATH
}
/
${
TEST_ROOT
}
)
ENDFOREACH
(
TEST_PROG
${
TEST_PROGS
}
)
tests/TestVectorize.cpp
0 → 100644
View file @
05d64aea
/* -------------------------------------------------------------------------- *
* OpenMM *
* -------------------------------------------------------------------------- *
* This is part of the OpenMM molecular simulation toolkit originating from *
* Simbios, the NIH National Center for Physics-Based Simulation of *
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2014 Stanford University and the Authors. *
* Authors: Peter Eastman *
* Contributors: *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the "Software"), *
* to deal in the Software without restriction, including without limitation *
* the rights to use, copy, modify, merge, publish, distribute, sublicense, *
* and/or sell copies of the Software, and to permit persons to whom the *
* Software is furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included in *
* all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *
* THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
* USE OR OTHER DEALINGS IN THE SOFTWARE. *
* -------------------------------------------------------------------------- */
/**
* This tests vectorized operations.
*/
#include "openmm/internal/AssertionUtilities.h"
#include "openmm/internal/vectorize.h"
#include <iostream>
using
namespace
OpenMM
;
using
namespace
std
;
#define ASSERT_VEC4_EQUAL(found, expected0, expected1, expected2, expected3) {if (std::abs((found)[0]-(expected0))>1e-6 || std::abs((found)[1]-(expected1))>1e-6 || std::abs((found)[2]-(expected2))>1e-6 || std::abs((found)[3]-(expected3))>1e-6) {std::stringstream details; details << " Expected ("<<(expected0)<<","<<(expected1)<<","<<(expected2)<<","<<(expected3)<<"), found ("<<(found)[0]<<","<<(found)[1]<<","<<(found)[2]<<","<<(found)[3]<<")"; throwException(__FILE__, __LINE__, details.str());}};
void
testLoadStore
()
{
fvec4
f1
(
2.0
);
ivec4
i1
(
3
);
ASSERT_VEC4_EQUAL
(
f1
,
2.0
,
2.0
,
2.0
,
2.0
);
ASSERT_VEC4_EQUAL
(
i1
,
3
,
3
,
3
,
3
);
fvec4
f2
(
2.5
,
3.0
,
3.5
,
4.0
);
ivec4
i2
(
2
,
3
,
4
,
5
);
ASSERT_VEC4_EQUAL
(
f2
,
2.5
,
3.0
,
3.5
,
4.0
);
ASSERT_VEC4_EQUAL
(
i2
,
2
,
3
,
4
,
5
);
float
farray
[
4
];
int
iarray
[
4
];
f2
.
store
(
farray
);
i2
.
store
(
iarray
);
fvec4
f3
(
farray
);
ivec4
i3
(
iarray
);
ASSERT_VEC4_EQUAL
(
f3
,
2.5
,
3.0
,
3.5
,
4.0
);
ASSERT_VEC4_EQUAL
(
i3
,
2
,
3
,
4
,
5
);
ASSERT_EQUAL
(
f3
[
0
],
2.5
);
ASSERT_EQUAL
(
f3
[
1
],
3.0
);
ASSERT_EQUAL
(
f3
[
2
],
3.5
);
ASSERT_EQUAL
(
f3
[
3
],
4.0
);
ASSERT_EQUAL
(
i3
[
0
],
2
);
ASSERT_EQUAL
(
i3
[
1
],
3
);
ASSERT_EQUAL
(
i3
[
2
],
4
);
ASSERT_EQUAL
(
i3
[
3
],
5
);
}
void
testArithmetic
()
{
fvec4
f1
(
0.5
,
1.0
,
1.5
,
2.0
);
ASSERT_VEC4_EQUAL
(
f1
+
fvec4
(
1
,
2
,
3
,
4
),
1.5
,
3
,
4.5
,
6
);
ASSERT_VEC4_EQUAL
(
f1
-
fvec4
(
1
,
2
,
3
,
4
),
-
0.5
,
-
1.0
,
-
1.5
,
-
2.0
);
ASSERT_VEC4_EQUAL
(
f1
*
fvec4
(
1
,
2
,
3
,
4
),
0.5
,
2.0
,
4.5
,
8.0
);
ASSERT_VEC4_EQUAL
(
f1
/
fvec4
(
1
,
2
,
3
,
4
),
0.5
,
0.5
,
0.5
,
0.5
);
ivec4
i1
(
1
,
2
,
3
,
4
);
ASSERT_VEC4_EQUAL
(
i1
+
ivec4
(
5
,
2
,
1
,
3
),
6
,
4
,
4
,
7
);
ASSERT_VEC4_EQUAL
(
i1
-
ivec4
(
5
,
2
,
1
,
3
),
-
4
,
0
,
2
,
1
);
ASSERT_VEC4_EQUAL
(
i1
*
ivec4
(
5
,
2
,
1
,
3
),
5
,
4
,
3
,
12
);
f1
=
fvec4
(
0.5
,
1.0
,
1.5
,
2.0
);
f1
+=
fvec4
(
1
,
2
,
3
,
4
);
ASSERT_VEC4_EQUAL
(
f1
,
1.5
,
3
,
4.5
,
6
);
f1
=
fvec4
(
0.5
,
1.0
,
1.5
,
2.0
);
f1
-=
fvec4
(
1
,
2
,
3
,
4
);
ASSERT_VEC4_EQUAL
(
f1
,
-
0.5
,
-
1.0
,
-
1.5
,
-
2.0
);
f1
=
fvec4
(
0.5
,
1.0
,
1.5
,
2.0
);
f1
*=
fvec4
(
1
,
2
,
3
,
4
);
ASSERT_VEC4_EQUAL
(
f1
,
0.5
,
2.0
,
4.5
,
8.0
);
f1
=
fvec4
(
0.5
,
1.0
,
1.5
,
2.0
);
f1
/=
fvec4
(
1
,
2
,
3
,
4
);
ASSERT_VEC4_EQUAL
(
f1
,
0.5
,
0.5
,
0.5
,
0.5
);
i1
=
ivec4
(
1
,
2
,
3
,
4
);
i1
+=
ivec4
(
5
,
2
,
1
,
3
);
ASSERT_VEC4_EQUAL
(
i1
,
6
,
4
,
4
,
7
);
i1
=
ivec4
(
1
,
2
,
3
,
4
);
i1
-=
ivec4
(
5
,
2
,
1
,
3
);
ASSERT_VEC4_EQUAL
(
i1
,
-
4
,
0
,
2
,
1
);
i1
=
ivec4
(
1
,
2
,
3
,
4
);
i1
*=
ivec4
(
5
,
2
,
1
,
3
);
ASSERT_VEC4_EQUAL
(
i1
,
5
,
4
,
3
,
12
);
}
void
testLogic
()
{
int
allBits
=
-
1
;
float
allBitsf
=
*
((
float
*
)
&
allBits
);
ivec4
mask
(
0
,
allBits
,
allBits
,
0
);
fvec4
fmask
(
0
,
allBitsf
,
allBitsf
,
0
);;
fvec4
f1
(
0.5
,
1.0
,
1.5
,
2.0
);
ivec4
i1
(
1
,
2
,
3
,
4
);
ASSERT_VEC4_EQUAL
(
f1
&
fmask
,
0
,
1.0
,
1.5
,
0
);
fvec4
temp
=
f1
|
fmask
;
ASSERT_EQUAL
(
0.5
,
temp
[
0
]);
ASSERT
(
temp
[
1
]
!=
temp
[
1
]);
// All bits set, which is nan
ASSERT
(
temp
[
2
]
!=
temp
[
2
]);
// All bits set, which is nan
ASSERT_EQUAL
(
2.0
,
temp
[
3
]);
ASSERT_VEC4_EQUAL
(
i1
&
mask
,
0
,
2
,
3
,
0
);
ASSERT_VEC4_EQUAL
(
i1
|
mask
,
1
,
allBits
,
allBits
,
4
);
}
void
testComparisons
()
{
fvec4
v1
(
0.0
,
0.0
,
0.0
,
0.0
);
fvec4
v2
(
1.5
,
1.5
,
1.5
,
1.5
);
ASSERT_VEC4_EQUAL
(
blend
(
v1
,
v2
,
fvec4
(
1.0
,
1.5
,
3.0
,
2.2
)
==
fvec4
(
1.1
,
1.5
,
3.0
,
2.1
)),
0.0
,
1.5
,
1.5
,
0.0
);
ASSERT_VEC4_EQUAL
(
blend
(
v1
,
v2
,
fvec4
(
1.0
,
1.5
,
3.0
,
2.2
)
!=
fvec4
(
1.1
,
1.5
,
3.0
,
2.1
)),
1.5
,
0.0
,
0.0
,
1.5
);
ASSERT_VEC4_EQUAL
(
blend
(
v1
,
v2
,
fvec4
(
1.0
,
1.5
,
3.0
,
2.2
)
<
fvec4
(
1.1
,
1.5
,
3.0
,
2.1
)),
1.5
,
0.0
,
0.0
,
0.0
);
ASSERT_VEC4_EQUAL
(
blend
(
v1
,
v2
,
fvec4
(
1.0
,
1.5
,
3.0
,
2.2
)
>
fvec4
(
1.1
,
1.5
,
3.0
,
2.1
)),
0.0
,
0.0
,
0.0
,
1.5
);
ASSERT_VEC4_EQUAL
(
blend
(
v1
,
v2
,
fvec4
(
1.0
,
1.5
,
3.0
,
2.2
)
<=
fvec4
(
1.1
,
1.5
,
3.0
,
2.1
)),
1.5
,
1.5
,
1.5
,
0.0
);
ASSERT_VEC4_EQUAL
(
blend
(
v1
,
v2
,
fvec4
(
1.0
,
1.5
,
3.0
,
2.2
)
>=
fvec4
(
1.1
,
1.5
,
3.0
,
2.1
)),
0.0
,
1.5
,
1.5
,
1.5
);
fvec4
imask
(
3
,
3
,
3
,
3
);
ASSERT_VEC4_EQUAL
((
ivec4
(
1
,
3
,
7
,
5
)
==
ivec4
(
2
,
3
,
7
,
4
))
&
imask
,
0
,
3
,
3
,
0
);
ASSERT_VEC4_EQUAL
((
ivec4
(
1
,
3
,
7
,
5
)
!=
ivec4
(
2
,
3
,
7
,
4
))
&
imask
,
3
,
0
,
0
,
3
);
ASSERT_VEC4_EQUAL
((
ivec4
(
1
,
3
,
7
,
5
)
<
ivec4
(
2
,
3
,
7
,
4
))
&
imask
,
3
,
0
,
0
,
0
);
ASSERT_VEC4_EQUAL
((
ivec4
(
1
,
3
,
7
,
5
)
>
ivec4
(
2
,
3
,
7
,
4
))
&
imask
,
0
,
0
,
0
,
3
);
ASSERT_VEC4_EQUAL
((
ivec4
(
1
,
3
,
7
,
5
)
<=
ivec4
(
2
,
3
,
7
,
4
))
&
imask
,
3
,
3
,
3
,
0
);
ASSERT_VEC4_EQUAL
((
ivec4
(
1
,
3
,
7
,
5
)
>=
ivec4
(
2
,
3
,
7
,
4
))
&
imask
,
0
,
3
,
3
,
3
);
}
void
testMathFunctions
()
{
fvec4
f1
(
0.4
,
1.9
,
-
1.2
,
-
3.8
);
fvec4
f2
(
1.1
,
1.2
,
1.3
,
-
5.0
);
ASSERT_VEC4_EQUAL
(
floor
(
f1
),
0.0
,
1.0
,
-
2.0
,
-
4.0
);
ASSERT_VEC4_EQUAL
(
ceil
(
f1
),
1.0
,
2.0
,
-
1.0
,
-
3.0
);
ASSERT_VEC4_EQUAL
(
round
(
f1
),
0.0
,
2.0
,
-
1.0
,
-
4.0
);
ASSERT_VEC4_EQUAL
(
abs
(
f1
),
0.4
,
1.9
,
1.2
,
3.8
);
ASSERT_VEC4_EQUAL
(
min
(
f1
,
f2
),
0.4
,
1.2
,
-
1.2
,
-
5.0
);
ASSERT_VEC4_EQUAL
(
max
(
f1
,
f2
),
1.1
,
1.9
,
1.3
,
-
3.8
);
ASSERT_VEC4_EQUAL
(
sqrt
(
fvec4
(
1.5
,
3.1
,
4.0
,
15.0
)),
sqrt
(
1.5
),
sqrt
(
3.1
),
sqrt
(
4.0
),
sqrt
(
15.0
));
ASSERT_EQUAL_TOL
(
f1
[
0
]
*
f2
[
0
]
+
f1
[
1
]
*
f2
[
1
]
+
f1
[
2
]
*
f2
[
2
],
dot3
(
f1
,
f2
),
1e-6
);
ASSERT_EQUAL_TOL
(
f1
[
0
]
*
f2
[
0
]
+
f1
[
1
]
*
f2
[
1
]
+
f1
[
2
]
*
f2
[
2
]
+
f1
[
3
]
*
f2
[
3
],
dot4
(
f1
,
f2
),
1e-6
);
ASSERT
(
any
(
f1
>
0.5
));
ASSERT
(
!
any
(
f1
>
2.0
));
ASSERT_VEC4_EQUAL
(
blend
(
f1
,
f2
,
ivec4
(
-
1
,
0
,
-
1
,
0
)),
1.1
,
1.9
,
1.3
,
-
3.8
);
}
void
testTranspose
()
{
fvec4
f1
(
1.0
,
2.0
,
3.0
,
4.0
);
fvec4
f2
(
5.0
,
6.0
,
7.0
,
8.0
);
fvec4
f3
(
9.0
,
10.0
,
11.0
,
12.0
);
fvec4
f4
(
13.0
,
14.0
,
15.0
,
16.0
);
transpose
(
f1
,
f2
,
f3
,
f4
);
ASSERT_VEC4_EQUAL
(
f1
,
1.0
,
5.0
,
9.0
,
13.0
);
ASSERT_VEC4_EQUAL
(
f2
,
2.0
,
6.0
,
10.0
,
14.0
);
ASSERT_VEC4_EQUAL
(
f3
,
3.0
,
7.0
,
11.0
,
15.0
);
ASSERT_VEC4_EQUAL
(
f4
,
4.0
,
8.0
,
12.0
,
16.0
);
}
int
main
(
int
argc
,
char
*
argv
[])
{
try
{
if
(
!
isVec4Supported
())
{
cout
<<
"CPU is not supported. Exiting."
<<
endl
;
return
0
;
}
testLoadStore
();
testArithmetic
();
testLogic
();
testComparisons
();
testMathFunctions
();
testTranspose
();
}
catch
(
const
exception
&
e
)
{
cout
<<
"exception: "
<<
e
.
what
()
<<
endl
;
return
1
;
}
cout
<<
"Done"
<<
endl
;
return
0
;
}
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment