void test_vpolar(void) { const double m = 2342.2908; const double t = 4.3901; const az_vector_t v = az_vpolar(m, t); EXPECT_APPROX(m, az_vnorm(v)); EXPECT_APPROX(az_mod2pi(t), az_vtheta(v)); }
void test_vunit(void) { EXPECT_APPROX(1.0, az_vnorm(az_vunit(AZ_VZERO))); EXPECT_APPROX(az_vtheta(AZ_VZERO), az_vtheta(az_vunit(AZ_VZERO))); for (int i = 0; i < 1000; ++i) { const az_vector_t vec = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)}; ASSERT_APPROX(1.0, az_vnorm(az_vunit(vec))); ASSERT_APPROX(az_vtheta(vec), az_vtheta(az_vunit(vec))); } }
void test_vcaplen(void) { EXPECT_APPROX(0.0, az_vnorm(az_vcaplen(AZ_VZERO, 3.0))); EXPECT_APPROX(0.0, az_vnorm(az_vcaplen(az_vpolar(3, 3), 0))); for (int i = 0; i < 1000; ++i) { const az_vector_t v1 = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)}; const double length = az_random(0.0, 1.3); const az_vector_t v2 = az_vcaplen(v1, length); ASSERT_APPROX(fmin(length, az_vnorm(v1)), az_vnorm(v2)); ASSERT_APPROX(az_vtheta(v1), az_vtheta(v2)); } }
void test_vproj(void) { for (int i = 0; i < 1000; ++i) { const az_vector_t vec = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)}; EXPECT_VAPPROX(AZ_VZERO, az_vproj(AZ_VZERO, vec)); EXPECT_VAPPROX(AZ_VZERO, az_vflatten(AZ_VZERO, vec)); EXPECT_VAPPROX(AZ_VZERO, az_vproj(vec, AZ_VZERO)); EXPECT_VAPPROX(vec, az_vflatten(vec, AZ_VZERO)); const az_vector_t vec2 = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)}; EXPECT_APPROX(0, az_vcross(az_vproj(vec, vec2), vec2)); EXPECT_APPROX(0, az_vdot(az_vflatten(vec, vec2), vec2)); RETURN_IF_FAILED(); } }
void test_vaddlen(void) { EXPECT_APPROX(3.0, az_vnorm(az_vaddlen(AZ_VZERO, 3.0))); EXPECT_APPROX(0.0, az_vtheta(az_vaddlen(AZ_VZERO, 3.0))); EXPECT_APPROX(4.0, az_vnorm(az_vaddlen(AZ_VZERO, -4.0))); EXPECT_APPROX(AZ_PI, az_vtheta(az_vaddlen(AZ_VZERO, -4.0))); for (int i = 0; i < 1000; ++i) { const az_vector_t v1 = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)}; const double length = az_random(0.0, 1.3); const az_vector_t v2 = az_vaddlen(v1, length); ASSERT_APPROX((length + az_vnorm(v1)), az_vnorm(v2)); ASSERT_APPROX(az_vtheta(v1), az_vtheta(v2)); } }
void test_vwithlen(void) { EXPECT_APPROX(3.0, az_vnorm(az_vwithlen(AZ_VZERO, 3.0))); EXPECT_APPROX(0.0, az_vtheta(az_vwithlen(AZ_VZERO, 3.0))); for (int i = 0; i < 1000; ++i) { const az_vector_t v1 = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)}; const double length = az_random(0.0, 1.3); const az_vector_t v2 = az_vwithlen(v1, length); ASSERT_APPROX(length, az_vnorm(v2)); ASSERT_APPROX(az_vtheta(v1), az_vtheta(v2)); } for (int i = 0; i < 1000; ++i) { const az_vector_t v1 = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)}; const double length = az_random(0.0, 1.3); const az_vector_t v2 = az_vwithlen(v1, -length); ASSERT_APPROX(length, az_vnorm(v2)); ASSERT_APPROX(az_vtheta(v1), az_mod2pi(az_vtheta(v2) + AZ_PI)); } }
void test_mod2pi(void) { for (double t = -20.0; t < 20.0; t += 0.1) { const double t2 = az_mod2pi(t); EXPECT_TRUE(t2 >= -AZ_PI); EXPECT_TRUE(t2 <= AZ_PI); EXPECT_APPROX(sin(t), sin(t2)); EXPECT_APPROX(cos(t), cos(t2)); } for (double t = -20.0; t < 20.0; t += 0.1) { const double t2 = az_mod2pi_nonneg(t); EXPECT_TRUE(t2 >= 0.0); EXPECT_TRUE(t2 <= AZ_TWO_PI); EXPECT_APPROX(sin(t), sin(t2)); EXPECT_APPROX(cos(t), cos(t2)); } for (double t = -20.0; t < 20.0; t += 0.1) { const double t2 = az_mod2pi_nonpos(t); EXPECT_TRUE(t2 >= -AZ_TWO_PI); EXPECT_TRUE(t2 <= 0.0); EXPECT_APPROX(sin(t), sin(t2)); EXPECT_APPROX(cos(t), cos(t2)); } }
void Test::testNormalUsage() { { AppOptions opts("myapp -b --uintopt 4 -s foo tit 1 tei 6"); MyOptions options(opts.getArgCount(), opts.getArguments()); options.parse(); EXPECT_EQUAL(true, options.boolOpt); EXPECT_EQUAL(true, options.boolWithDefOpt); EXPECT_EQUAL(5, options.intOpt); EXPECT_EQUAL(4u, options.uintOpt); EXPECT_APPROX(4, options.floatOpt, 0.00001); EXPECT_EQUAL("foo", options.stringOpt); EXPECT_EQUAL("tit", options.argString); EXPECT_EQUAL(1, options.argInt); EXPECT_EQUAL("tei", options.argOptionalString); EXPECT_EQUAL(0u, options.properties.size()); EXPECT_EQUAL(6, options.anotherOptionalArg); } { AppOptions opts("myapp --uintopt 6 tit 1"); MyOptions options(opts.getArgCount(), opts.getArguments()); options.parse(); EXPECT_EQUAL(false, options.boolOpt); EXPECT_EQUAL(true, options.boolWithDefOpt); EXPECT_EQUAL(5, options.intOpt); EXPECT_EQUAL(6u, options.uintOpt); EXPECT_APPROX(4, options.floatOpt, 0.00001); EXPECT_EQUAL("ballalaika", options.stringOpt); EXPECT_EQUAL("tit", options.argString); EXPECT_EQUAL(1, options.argInt); EXPECT_EQUAL("foo", options.argOptionalString); EXPECT_EQUAL(0u, options.properties.size()); EXPECT_EQUAL(3, options.anotherOptionalArg); } // Arguments coming after options. // (Required for nesting of short options) { AppOptions opts("myapp --uintopt --intopt 6 -8 tit 1 tei"); MyOptions options(opts.getArgCount(), opts.getArguments()); options.parse(); EXPECT_EQUAL(false, options.boolOpt); EXPECT_EQUAL(true, options.boolWithDefOpt); EXPECT_EQUAL(-8, options.intOpt); EXPECT_EQUAL(6u, options.uintOpt); EXPECT_APPROX(4, options.floatOpt, 0.00001); EXPECT_EQUAL("ballalaika", options.stringOpt); EXPECT_EQUAL("tit", options.argString); EXPECT_EQUAL(1, options.argInt); EXPECT_EQUAL("tei", options.argOptionalString); EXPECT_EQUAL(0u, options.properties.size()); } { AppOptions opts( "myapp -uib 6 -8 --boolwithdef tit 1 tei"); MyOptions options(opts.getArgCount(), opts.getArguments()); options.parse(); EXPECT_EQUAL(true, options.boolOpt); EXPECT_EQUAL(false, options.boolWithDefOpt); EXPECT_EQUAL(-8, options.intOpt); EXPECT_EQUAL(6u, options.uintOpt); EXPECT_APPROX(4, options.floatOpt, 0.00001); EXPECT_EQUAL("ballalaika", options.stringOpt); EXPECT_EQUAL("tit", options.argString); EXPECT_EQUAL(1, options.argInt); EXPECT_EQUAL("tei", options.argOptionalString); EXPECT_EQUAL(0u, options.properties.size()); } // Properties { AppOptions opts("myapp -u 6 -p foo bar --prop hmm brr tit 1 tei"); MyOptions options(opts.getArgCount(), opts.getArguments()); options.parse(); EXPECT_EQUAL(false, options.boolOpt); EXPECT_EQUAL(true, options.boolWithDefOpt); EXPECT_EQUAL(5, options.intOpt); EXPECT_EQUAL(6u, options.uintOpt); EXPECT_APPROX(4, options.floatOpt, 0.00001); EXPECT_EQUAL("ballalaika", options.stringOpt); EXPECT_EQUAL("tit", options.argString); EXPECT_EQUAL(1, options.argInt); EXPECT_EQUAL("tei", options.argOptionalString); EXPECT_EQUAL(2u, options.properties.size()); EXPECT_EQUAL("bar", options.properties["foo"]); EXPECT_EQUAL("brr", options.properties["hmm"]); } }
void test_signmod(void) { EXPECT_APPROX( 3.0, az_signmod( 10.0, 7.0, 1.0)); EXPECT_APPROX(-4.0, az_signmod( 10.0, 7.0, -1.0)); EXPECT_APPROX( 4.0, az_signmod(-10.0, 7.0, 1.0)); EXPECT_APPROX(-3.0, az_signmod(-10.0, 7.0, -1.0)); EXPECT_APPROX( 3.0, az_signmod( 10.0, -7.0, 1.0)); EXPECT_APPROX(-4.0, az_signmod( 10.0, -7.0, -1.0)); EXPECT_APPROX( 4.0, az_signmod(-10.0, -7.0, 1.0)); EXPECT_APPROX(-3.0, az_signmod(-10.0, -7.0, -1.0)); EXPECT_APPROX(0.0, az_signmod( 0.0, 7.0, 1.0)); EXPECT_APPROX(0.0, az_signmod( 0.0, 7.0, -1.0)); EXPECT_APPROX(0.0, az_signmod( 0.0, -7.0, 1.0)); EXPECT_APPROX(0.0, az_signmod( 0.0, -7.0, -1.0)); EXPECT_APPROX(0.0, az_signmod( 14.0, 7.0, 1.0)); EXPECT_APPROX(0.0, az_signmod( 14.0, 7.0, -1.0)); EXPECT_APPROX(0.0, az_signmod( 14.0, -7.0, 1.0)); EXPECT_APPROX(0.0, az_signmod( 14.0, -7.0, -1.0)); EXPECT_APPROX(0.0, az_signmod(-14.0, 7.0, 1.0)); EXPECT_APPROX(0.0, az_signmod(-14.0, 7.0, -1.0)); EXPECT_APPROX(0.0, az_signmod(-14.0, -7.0, 1.0)); EXPECT_APPROX(0.0, az_signmod(-14.0, -7.0, -1.0)); }