示例#1
0
文件: vector.c 项目: andrewrk/azimuth
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));
}
示例#2
0
文件: vector.c 项目: andrewrk/azimuth
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)));
  }
}
示例#3
0
文件: vector.c 项目: andrewrk/azimuth
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));
  }
}
示例#4
0
文件: vector.c 项目: andrewrk/azimuth
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();
  }
}
示例#5
0
文件: vector.c 项目: andrewrk/azimuth
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));
  }
}
示例#6
0
文件: vector.c 项目: andrewrk/azimuth
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));
  }
}
示例#7
0
文件: vector.c 项目: andrewrk/azimuth
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));
  }
}
示例#8
0
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"]);
    }
}
示例#9
0
文件: vector.c 项目: andrewrk/azimuth
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));
}