9 #ifndef _AUVMATH_TEST_H_
10 #define _AUVMATH_TEST_H_
15 #include <cxxtest/TestSuite.h>
28 float x0[] = {0, 3, 3, 0, 1, 2, 2, 1};
29 float y0[] = {0, 0, 3, 3, 1, 1, 2, 2};
30 float x1[] = {3, 3, 0, 0, 2, 2, 1, 1};
31 float y1[] = {0, 3, 3, 0, 1, 2, 2, 1};
48 signed char cMin = -128, cMid = 0, cMax = 127;
56 unsigned char ucMin = 0, ucMid = 128, ucMax = 255;
64 int iMin = -2147483647, iMid = 0, iMax = 2147483647;
72 unsigned int uiMin = 0, uiMid = 2147483648U, uiMax = 4294967295U;
80 float fMin = -INFINITY, fMid = 0, fMax = INFINITY, fNan = nanf(
"" ), fRes;
88 TS_ASSERT_DIFFERS( fRes, fRes );
90 TS_ASSERT_DIFFERS( fRes, fRes );
92 TS_ASSERT_DIFFERS( fRes, fRes );
94 double dMin = -INFINITY, dMid = 0, dMax = INFINITY, dNan = nan(
"" ), dRes;
102 TS_ASSERT_DIFFERS( dRes, dRes );
104 TS_ASSERT_DIFFERS( dRes, dRes );
106 TS_ASSERT_DIFFERS( dRes, dRes );
113 signed char cMin = -128, cMid = 0, cMax = 127;
121 unsigned char ucMin = 0, ucMid = 128, ucMax = 255;
122 TS_ASSERT_EQUALS(
AuvMath::Min( ucMin, ucMax ), ucMin );
123 TS_ASSERT_EQUALS(
AuvMath::Min( ucMax, ucMin ), ucMin );
124 TS_ASSERT_EQUALS(
AuvMath::Min( ucMin, ucMid ), ucMin );
125 TS_ASSERT_EQUALS(
AuvMath::Min( ucMid, ucMin ), ucMin );
126 TS_ASSERT_EQUALS(
AuvMath::Min( ucMid, ucMax ), ucMid );
127 TS_ASSERT_EQUALS(
AuvMath::Min( ucMax, ucMid ), ucMid );
129 int iMin = -2147483647, iMid = 0, iMax = 2147483647;
137 unsigned int uiMin = 0, uiMid = 2147483648U, uiMax = 4294967295U;
138 TS_ASSERT_EQUALS(
AuvMath::Min( uiMin, uiMax ), uiMin );
139 TS_ASSERT_EQUALS(
AuvMath::Min( uiMax, uiMin ), uiMin );
140 TS_ASSERT_EQUALS(
AuvMath::Min( uiMin, uiMid ), uiMin );
141 TS_ASSERT_EQUALS(
AuvMath::Min( uiMid, uiMin ), uiMin );
142 TS_ASSERT_EQUALS(
AuvMath::Min( uiMid, uiMax ), uiMid );
143 TS_ASSERT_EQUALS(
AuvMath::Min( uiMax, uiMid ), uiMid );
145 float fMin = -INFINITY, fMid = 0, fMax = INFINITY, fNan = nanf(
"" ), fRes;
153 TS_ASSERT_DIFFERS( fRes, fRes );
155 TS_ASSERT_DIFFERS( fRes, fRes );
157 TS_ASSERT_DIFFERS( fRes, fRes );
159 double dMin = -INFINITY, dMid = 0, dMax = INFINITY, dNan = nan(
"" ), dRes;
167 TS_ASSERT_DIFFERS( dRes, dRes );
169 TS_ASSERT_DIFFERS( dRes, dRes );
171 TS_ASSERT_DIFFERS( dRes, dRes );
178 signed char cMin = -128, cMid = 0, cMax = 127;
186 unsigned char ucMin = 0, ucMid = 128, ucMax = 255;
187 TS_ASSERT_EQUALS(
AuvMath::Max( ucMin, ucMax ), ucMax );
188 TS_ASSERT_EQUALS(
AuvMath::Max( ucMax, ucMin ), ucMax );
189 TS_ASSERT_EQUALS(
AuvMath::Max( ucMin, ucMid ), ucMid );
190 TS_ASSERT_EQUALS(
AuvMath::Max( ucMid, ucMin ), ucMid );
191 TS_ASSERT_EQUALS(
AuvMath::Max( ucMid, ucMax ), ucMax );
192 TS_ASSERT_EQUALS(
AuvMath::Max( ucMax, ucMid ), ucMax );
194 int iMin = -2147483647, iMid = 0, iMax = 2147483647;
202 unsigned int uiMin = 0, uiMid = 2147483648U, uiMax = 4294967295U;
203 TS_ASSERT_EQUALS(
AuvMath::Max( uiMin, uiMax ), uiMax );
204 TS_ASSERT_EQUALS(
AuvMath::Max( uiMax, uiMin ), uiMax );
205 TS_ASSERT_EQUALS(
AuvMath::Max( uiMin, uiMid ), uiMid );
206 TS_ASSERT_EQUALS(
AuvMath::Max( uiMid, uiMin ), uiMid );
207 TS_ASSERT_EQUALS(
AuvMath::Max( uiMid, uiMax ), uiMax );
208 TS_ASSERT_EQUALS(
AuvMath::Max( uiMax, uiMid ), uiMax );
210 float fMin = -INFINITY, fMid = 0, fMax = INFINITY, fNan = nanf(
"" ), fRes;
218 TS_ASSERT_DIFFERS( fRes, fRes );
220 TS_ASSERT_DIFFERS( fRes, fRes );
222 TS_ASSERT_DIFFERS( fRes, fRes );
224 double dMin = -INFINITY, dMid = 0, dMax = INFINITY, dNan = nan(
"" ), dRes;
232 TS_ASSERT_DIFFERS( dRes, dRes );
234 TS_ASSERT_DIFFERS( dRes, dRes );
236 TS_ASSERT_DIFFERS( dRes, dRes );
243 signed char cMin = -128, cMax = 127;
245 TS_ASSERT_EQUALS( cMin, 127 );
246 TS_ASSERT_EQUALS( cMax, -128 );
249 unsigned char ucMin = 0, ucMax = 255;
251 TS_ASSERT_EQUALS( ucMin, 255 );
252 TS_ASSERT_EQUALS( ucMax, 0 );
255 int iMin = -2147483647, iMax = 2147483647;
257 TS_ASSERT_EQUALS( iMin, 2147483647 );
258 TS_ASSERT_EQUALS( iMax, -2147483647 );
261 unsigned int uiMin = 0, uiMax = 4294967295U;
263 TS_ASSERT_EQUALS( uiMin, 4294967295U );
264 TS_ASSERT_EQUALS( uiMax, 0U );
267 float fMin = -INFINITY, fMax = INFINITY, fNan = nanf(
"" );
269 TS_ASSERT_EQUALS( fMin, (
float )INFINITY );
270 TS_ASSERT_EQUALS( fMax, (
float ) - INFINITY );
272 TS_ASSERT_EQUALS( fNan, INFINITY );
273 TS_ASSERT_DIFFERS( fMin, fMin );
276 double dMin = -INFINITY, dMax = INFINITY, dNan = nan(
"" );
278 TS_ASSERT_EQUALS( dMin, INFINITY );
279 TS_ASSERT_EQUALS( dMax, -INFINITY );
281 TS_ASSERT_EQUALS( dNan, INFINITY );
282 TS_ASSERT_DIFFERS( dMin, dMin );
289 float fN721 =
D2R( -721 ), fN360 =
D2R( -360 ), fN181 =
D2R( -181 ), fN179 =
D2R( -179 ), fN1 =
D2R( -1 );
290 float f0 = 0, fNan = nanf(
"" ), fDelta = 1e-6, fRes;
291 float f1 =
D2R( 1 ), f179 =
D2R( 179 ), f181 =
D2R( 181 ), f360 =
D2R( 360 ), f721 =
D2R( 721 );
302 TS_ASSERT_DIFFERS( fRes, fRes );
304 double dN721 =
D2R( -721 ), dN360 =
D2R( -360 ), dN181 =
D2R( -181 ), dN179 =
D2R( -179 ), dN1 =
D2R( -1 );
305 double d0 = 0, dNan = nanf(
"" ), dDelta = 1e-6, dRes;
306 double d1 =
D2R( 1 ), d179 =
D2R( 179 ), d181 =
D2R( 181 ), d360 =
D2R( 360 ), d721 =
D2R( 721 );
317 TS_ASSERT_DIFFERS( dRes, dRes );
324 float fMin = -INFINITY, fMid = 0, fMax = INFINITY, fNan = nanf(
"" );
330 double dMin = -INFINITY, dMid = 0, dMax = INFINITY, dNan = nan(
"" );
341 float fMin = -128, fMid = 0, fMax = 128, fNan = nanf(
"" ), fDiv = 3.5, fRes;
346 TS_ASSERT_DIFFERS( fRes, fRes );
348 TS_ASSERT_DIFFERS( fRes, fRes );
350 TS_ASSERT_DIFFERS( fRes, fRes );
352 double dMin = -128, dMid = 0, dMax = 128, dNan = nanf(
"" ), dDiv = 3.5, dRes;
357 TS_ASSERT_DIFFERS( dRes, dRes );
359 TS_ASSERT_DIFFERS( dRes, dRes );
361 TS_ASSERT_DIFFERS( dRes, dRes );
369 signed char cMin = -128, cMid = 0, cMax = 127;
374 int iMin = -2147483647, iMid = 0, iMax = 2147483647;
380 float fMin = -INFINITY, fMid = 0, fMax = INFINITY, fNan = nanf(
"" ), fRes;
385 TS_ASSERT_DIFFERS( fRes, fRes );
387 double dMin = -INFINITY, dMid = 0, dMax = INFINITY, dNan = nan(
"" ), dRes;
392 TS_ASSERT_DIFFERS( dRes, dRes );
399 float foo[] = {1, 2, 3.14159f, 4, 5, 5.12345678f, 6};
416 double doo[] = {1, 2, 3.14159, 4, 5, 5.12345678, 6};
438 float foo[] = {1.0, 5.0}, fRes;
445 TS_ASSERT_DIFFERS( fRes, fRes );
448 double doo[] = {1.0, 5.0}, dRes;
455 TS_ASSERT_DIFFERS( dRes, dRes );
462 float foo[ 2 ][ 2 ] = {{1.0, 5.0}, {3.0, 7.0}}, fRes;
465 TS_ASSERT_DIFFERS( fRes, fRes );
467 TS_ASSERT_DIFFERS( fRes, fRes );
469 float moo[ 2 ][ 2 ] = { { 20.6948, 9.32573 }, { 36.8355, 62.5137 } };
470 TS_ASSERT_DELTA(
AuvMath::Interpolate2D( 36.8f, -121.8f, moo, 36.7967f, 36.8067f, -121.8054f, -121.7954f ), 26.5f, 1.0f );
473 double doo[ 2 ][ 2 ] = {{1.0, 5.0}, {3.0, 7.0}}, dRes;
476 TS_ASSERT_DIFFERS( dRes, dRes );
478 TS_ASSERT_DIFFERS( dRes, dRes );
485 float foo[ 2 ][ 2 ][ 2 ] = {{{1.0, 5.0}, {3.0, 7.0}}, {{5.0, 9.0}, {7.0, 11.0}}}, fRes;
486 TS_ASSERT_EQUALS(
AuvMath::Interpolate3D( 1.5f, 3.5f, 5.5f, foo, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f ), 6.0f );
488 TS_ASSERT_DIFFERS( fRes, fRes );
490 TS_ASSERT_DIFFERS( fRes, fRes );
492 TS_ASSERT_DIFFERS( fRes, fRes );
495 double doo[ 2 ][ 2 ][ 2 ] = {{{1.0, 5.0}, {3.0, 7.0}}, {{5.0, 9.0}, {7.0, 11.0}}}, dRes;
496 TS_ASSERT_EQUALS(
AuvMath::Interpolate3D( 1.5, 3.5, 5.5, doo, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ), 6.0 );
498 TS_ASSERT_DIFFERS( dRes, dRes );
500 TS_ASSERT_DIFFERS( dRes, dRes );
502 TS_ASSERT_DIFFERS( dRes, dRes );
509 float foo[ 2 ][ 2 ][ 2 ][ 2 ] = {{{{1.0, 5.0}, {3.0, 7.0}}, {{5.0, 9.0}, {7.0, 11.0}}}, {{{11.0, 15.0}, {13.0, 17.0}}, {{15.0, 19.0}, {17.0, 21.0}}}}, fRes;
510 TS_ASSERT_EQUALS(
AuvMath::Interpolate4D( 1.5f, 3.5f, 5.5f, 7.5f, foo, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f ), 11.0f );
511 fRes =
AuvMath::Interpolate4D( 1.5f, 3.5f, 5.5f, 7.5f, foo, 1.0f, 1.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f );
512 TS_ASSERT_DIFFERS( fRes, fRes );
513 fRes =
AuvMath::Interpolate4D( 1.5f, 3.5f, 5.5f, 7.5f, foo, 1.0f, 2.0f, 3.0f, 3.0f, 5.0f, 6.0f, 7.0f, 8.0f );
514 TS_ASSERT_DIFFERS( fRes, fRes );
515 fRes =
AuvMath::Interpolate4D( 1.5f, 3.5f, 5.5f, 7.5f, foo, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 5.0f, 7.0f, 8.0f );
516 TS_ASSERT_DIFFERS( fRes, fRes );
517 fRes =
AuvMath::Interpolate4D( 1.5f, 3.5f, 5.5f, 7.5f, foo, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 7.0f );
518 TS_ASSERT_DIFFERS( fRes, fRes );
521 double doo[ 2 ][ 2 ][ 2 ][ 2 ] = {{{{1.0, 5.0}, {3.0, 7.0}}, {{5.0, 9.0}, {7.0, 11.0}}}, {{{11.0, 15.0}, {13.0, 17.0}}, {{15.0, 19.0}, {17.0, 21.0}}}}, dRes;
522 TS_ASSERT_EQUALS(
AuvMath::Interpolate4D( 1.5, 3.5, 5.5, 7.5, doo, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ), 11.0 );
523 dRes =
AuvMath::Interpolate4D( 1.5, 3.5, 5.5, 7.5, doo, 1.0, 1.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 );
524 TS_ASSERT_DIFFERS( dRes, dRes );
525 dRes =
AuvMath::Interpolate4D( 1.5, 3.5, 5.5, 7.5, doo, 1.0, 2.0, 3.0, 3.0, 5.0, 6.0, 7.0, 8.0 );
526 TS_ASSERT_DIFFERS( dRes, dRes );
527 dRes =
AuvMath::Interpolate4D( 1.5, 3.5, 5.5, 7.5, doo, 1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 7.0, 8.0 );
528 TS_ASSERT_DIFFERS( dRes, dRes );
529 dRes =
AuvMath::Interpolate4D( 1.5, 3.5, 5.5, 7.5, doo, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 7.0 );
530 TS_ASSERT_DIFFERS( dRes, dRes );
543 TS_ASSERT_DELTA(
AuvMath::Density( 34.567, 278.15, 2e7 ), 1036.409, 0.001 );
544 TS_ASSERT_DELTA(
AuvMath::Density( 35, 298.15, 1e8 ), 1062.53817, 0.00001 );
565 double array1[] = {5, 4, 3, 2, 1};
566 double sarray1[] = {1, 2, 3, 4, 5};
567 int array1Len =
sizeof( array1 ) /
sizeof( array1[0] );
570 TS_ASSERT_SAME_DATA( array1, sarray1, array1Len );
575 double array2[] = {1576130,
587 double sarray2[] = { 1418863,
598 int array2Len =
sizeof( array2 ) /
sizeof( array2[0] );
601 TS_ASSERT_SAME_DATA( array2, sarray2, array2Len );
605 double array3[] = {5, -4, 3, -2, 1};
606 double sarray3[] = { -4, -2, 1, 3, 5};
607 int array3Len =
sizeof( array3 ) /
sizeof( array3[0] );
610 TS_ASSERT_SAME_DATA( array3, sarray3, array3Len );
614 #endif // _AUVMATH_TEST_H
static T Max(const T &a, const T &b)
Returns the greater of the two arguments If either input is nan, nan is returned Unit tests in AuvMat...
Definition: AuvMath.h:100
static double OceanPressure(const double &depth, const double &latitude)
OceanPressure (depth, latitude)
Definition: AuvMath.cpp:530
static T Interpolate3D(const T &x, const T &y, const T &z, T data[][2][2], const T &x0, const T &x1, const T &y0, const T &y1, const T &z0, const T &z1)
Examines a 2x2x2 data field for the value, where x0 <= x <= x1, y0 <= y <= y1, z0 <= z <= z1 Unit tes...
Definition: AuvMath.cpp:326
static T ModPi(const T &angle)
modulo Pi function: If input is nan, nan is returned Unit tests in AuvMath_Test.testModPi ...
Definition: AuvMath.cpp:107
void testSwap(void)
AuvMath::Swap Unit Tests.
Definition: AuvMath_Test.h:240
static T NanZero(const T &value)
Casts nan values to zero – otherwise returns the value Unit tests in AuvMath_Test.testNanZero.
Definition: AuvMath.cpp:118
void testDensity(void)
Definition: AuvMath_Test.h:541
void testFindLtEqIndex(void)
FindLtEqIndex Unit Tests.
Definition: AuvMath_Test.h:396
static bool AreaContains(float x, float y, int segments, float *x0, float *y0, float *x1, float *y1)
Definition: AuvMath.cpp:555
#define D2R(x)
A macro for converting degrees to radians.
Definition: AuvMath.h:40
static T Interpolate2D(const T &x, const T &y, T data[][2], const T &x0, const T &x1, const T &y0, const T &y1)
Examines a 2x2 data field for the value, where x0 <= x <= x1, y0 <= y <= y1, Unit tests in AuvMath_Te...
Definition: AuvMath.cpp:299
static T Interpolate4D(const T &w, const T &x, const T &y, const T &z, T data[][2][2][2], const T &w0, const T &w1, const T &x0, const T &x1, const T &y0, const T &y1, const T &z0, const T &z1)
Examines a 2x2x2x2 data field for the value, where w0 <= w <= w1, x0 <= x <= x1, y0 <= y <= y1...
Definition: AuvMath.cpp:366
static void Swap(T &a, T &b)
Swaps the two arguments.
Definition: AuvMath.h:114
void testInterpolate1D(void)
AuvMath::Interpolate1D Unit Tests.
Definition: AuvMath_Test.h:435
Units tests for class AuvMath
Definition: AuvMath_Test.h:22
void testLimit(void)
AuvMath::Limit Unit Tests.
Definition: AuvMath_Test.h:45
void testModPi(void)
AuvMath::ModPi Unit Tests.
Definition: AuvMath_Test.h:286
void testShellSort(void)
Definition: AuvMath_Test.h:563
static double BulkModulus(double salinity, double temperature, double pressure)
Seawater bulk modulus (S,T,P)
Definition: AuvMath.cpp:420
static T Limit(const T &value, const T &limit1, const T &limit2)
Makes sure a variable falls within defined limits...
Definition: AuvMath.cpp:20
static double Density(double salinity, double temperature, double pressure)
Seawater density (S,T,P)
Definition: AuvMath.cpp:476
Contains the AuvMath class declaration.
void testInterpolate3D(void)
AuvMath::Interpolate3D Unit Tests.
Definition: AuvMath_Test.h:482
static int FindLtEqIndex(const T *values, const T &value, const unsigned int indexMin, const unsigned int indexMax)
Finds the index within an array where the value is <= the supplied value Searches from indexMin to in...
Definition: AuvMath.cpp:239
void testSign(void)
AuvMath::Sign Unit Tests.
Definition: AuvMath_Test.h:366
void testAreaContains(void)
Definition: AuvMath_Test.h:26
void testOceanDepth(void)
Definition: AuvMath_Test.h:548
static T Sign(const T &x)
Returns signum function: If input is nan, nan is returned Unit tests in AuvMath_Test.testSign.
Definition: AuvMath.cpp:226
static T Min(const T &a, const T &b)
Returns the lesser of the two arguments If either input is nan, nan is returned Unit tests in AuvMath...
Definition: AuvMath.h:91
static void ShellSort(T array[], int arraySize)
Definition: AuvMath.h:282
void testNanZero(void)
AuvMath::NanZero Unit Tests.
Definition: AuvMath_Test.h:321
void testMin(void)
AuvMath::Min Unit Tests.
Definition: AuvMath_Test.h:110
void testOceanPressure(void)
Definition: AuvMath_Test.h:556
void testMax(void)
AuvMath::Max Unit Tests.
Definition: AuvMath_Test.h:175
void testBulkModulus(void)
Definition: AuvMath_Test.h:534
void testInterpolate4D(void)
AuvMath::Interpolate4D Unit Tests.
Definition: AuvMath_Test.h:506
void testRound(void)
AuvMath::Round Unit Tests.
Definition: AuvMath_Test.h:338
void testInterpolate2D(void)
AuvMath::Interpolate2D Unit Tests.
Definition: AuvMath_Test.h:459
static T Round(const T &value, const T &divisor)
Makes sure a variable is divisible by specified divisor...
Definition: AuvMath.cpp:202
static T Interpolate1D(const T &x, const T &data0, const T &data1, const T &x0, const T &x1)
Examines a 2 element data field for the value, where x0 <= x <= x1 Unit tests in AuvMath_Test.testInterpolate1D.
Definition: AuvMath.cpp:279
Contains the Slate class definition.
static double OceanDepth(const double &pressure, const double &latitude)
OceanDepth (pressure, latitude)
Definition: AuvMath.cpp:508