void
OpenSteer::SharedPointerTest::testInheritance()
{
    {
        Sub* rawSubPointer0 = new Sub();
        SharedPointer< Super > sp0( rawSubPointer0 );
        CPPUNIT_ASSERT_EQUAL( 1, Super::superCount_ );
    }
    CPPUNIT_ASSERT_EQUAL( 0, Super::superCount_ );
    
    {
        Super* rawSuperPointer0 = new Super();
        SharedPointer< Super > sp0( rawSuperPointer0 );
        CPPUNIT_ASSERT_EQUAL( 1, Super::superCount_ );
        CPPUNIT_ASSERT_EQUAL( 0, Sub::subCount_ );
        
        Sub* rawSubPointer0 = new Sub();
        SharedPointer< Sub > sp1( rawSubPointer0 );
        CPPUNIT_ASSERT_EQUAL( 2, Super::superCount_ );
        CPPUNIT_ASSERT_EQUAL( 1, Sub::subCount_ );
        
        
        sp0 = sp1;
        CPPUNIT_ASSERT_EQUAL( 1, Super::superCount_ );
        CPPUNIT_ASSERT_EQUAL( 1, Sub::subCount_ );
    }
    CPPUNIT_ASSERT_EQUAL( 0, Super::superCount_ );
    CPPUNIT_ASSERT_EQUAL( 0, Sub::subCount_ );
}
void 
OpenSteer::SharedPointerTest::testComparisons()
{
    Super* rawSuperPointer0 = new Super();
    SharedPointer< Super > sp0( rawSuperPointer0 );
    
    Sub* rawSubPointer1 = new Sub();
    SharedPointer< Super > sp1( rawSubPointer1 );
    
    CPPUNIT_ASSERT( sp0 != sp1 );
    CPPUNIT_ASSERT( ( sp0 < sp1 ) || ( sp1 < sp0 ) );
    
    sp1 = sp0;
    
    CPPUNIT_ASSERT( sp0 == sp1 );
    CPPUNIT_ASSERT( !( sp0 < sp1 ) && !( sp1 < sp0 ) );
    
    sp0.reset();
    sp1.reset();
    
    CPPUNIT_ASSERT( sp0 == sp1 );
    // @todo Are these semantics really a good idea?
    CPPUNIT_ASSERT( ( sp0 < sp1 ) || ( sp1 < sp0 ) );
    
}
void 
OpenSteer::SharedPointerTest::testConstruction()
{
    // Testing automatic destruction of a raw pointer hold by a single 
    // shared pointer.
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
    
    SharedPointerTester< 0 >* rawPointer = new SharedPointerTester< 0 >();
    
    CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ );
    
    {
        SharedPointer< SharedPointerTester< 0 > > sp( rawPointer );
    }
    
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
    
    
    // Testing copy constructor.
    rawPointer = new SharedPointerTester< 0 >();
    
    {
        SharedPointer< SharedPointerTester< 0 > > sp0( rawPointer );
        CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ );
        CPPUNIT_ASSERT_EQUAL( static_cast<size_t>( 1 ), sp0.useCount() );
        {
                SharedPointer< SharedPointerTester< 0 > > sp1( sp0 );
                CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ );
                CPPUNIT_ASSERT_EQUAL( static_cast<size_t>( 2 ), sp0.useCount() );
                CPPUNIT_ASSERT_EQUAL( static_cast<size_t>( 2 ), sp1.useCount() );
                CPPUNIT_ASSERT_EQUAL( rawPointer, sp0.get() );
                CPPUNIT_ASSERT_EQUAL( rawPointer, sp1.get() );
        }
        CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ );
        CPPUNIT_ASSERT_EQUAL( static_cast<size_t>( 1 ), sp0.useCount() );
        CPPUNIT_ASSERT_EQUAL( rawPointer, sp0.get() );
    }
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
    
    
    // Testing construction of an empty shared pointer.
    {
        SharedPointer< SharedPointerTester< 0 > > sp0;
        CPPUNIT_ASSERT( 0 == sp0.get() );
    }

    
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
}
void 
OpenSteer::SharedPointerTest::testAssignment()
{
    // Testing assignment of shared pointers pointing to 0.
    {
        SharedPointer< SharedPointerTester< 0 > > sp0;
        SharedPointer< SharedPointerTester< 0 > > sp1( sp0 );
        CPPUNIT_ASSERT( 0 == sp0.get() );
        CPPUNIT_ASSERT( 0 == sp1.get() );
    }
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
    
    
    // Testing assignment to a shared pointer holding 0.
    {
        SharedPointerTester< 0 >* rawPointer = new SharedPointerTester< 0 >();
        SharedPointer< SharedPointerTester< 0 > > sp0;
        SharedPointer< SharedPointerTester< 0 > > sp1( rawPointer );
        SharedPointer< SharedPointerTester< 0 > > sp2( sp0 );
        
        sp0 = sp1;
        CPPUNIT_ASSERT( 2 == sp0.useCount() );
        CPPUNIT_ASSERT( 2 == sp1.useCount() );
        CPPUNIT_ASSERT_EQUAL( rawPointer, sp0.get() );
        CPPUNIT_ASSERT_EQUAL( rawPointer, sp1.get() );
        CPPUNIT_ASSERT( 0 == sp2.get() );
    }
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
    
    
    // Testing assignment that should lead to a  destruction.
    {
        SharedPointerTester< 0 >* rawPointer0 = new SharedPointerTester< 0 >();
        SharedPointerTester< 0 >* rawPointer1 = new SharedPointerTester< 0 >();
        CPPUNIT_ASSERT_EQUAL( 2, SharedPointerTester< 0 >::static_counter_ );
        
        SharedPointer< SharedPointerTester< 0 > > sp0( rawPointer0 );
        SharedPointer< SharedPointerTester< 0 > > sp1( rawPointer1 );
        sp1 = sp0;
        
        CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ );
        CPPUNIT_ASSERT( 2 == sp0.useCount() );
        CPPUNIT_ASSERT( 2 == sp1.useCount() );
        CPPUNIT_ASSERT_EQUAL( rawPointer0, sp0.get() );
        CPPUNIT_ASSERT_EQUAL( rawPointer0, sp1.get() );
    }
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
    
}
Exemple #5
0
int main()
{
    {
        std::weak_ptr<A> wp;
        assert(wp.use_count() == 0);
        assert(wp.expired() == (wp.use_count() == 0));
    }
    {
        std::shared_ptr<A> sp0(new A);
        std::weak_ptr<A> wp(sp0);
        assert(wp.use_count() == 1);
        assert(wp.expired() == (wp.use_count() == 0));
        sp0.reset();
        assert(wp.use_count() == 0);
        assert(wp.expired() == (wp.use_count() == 0));
    }
}
Exemple #6
0
int main()
{
    shared_ptr<resource> sp0(new resource(0));
    shared_ptr<resource> sp1(new resource(1));
    show("sp0 before swap", sp0);
    show("sp1 before swap", sp1);

    sp0.swap(sp1);
    show("sp0 after swap", sp0);
    show("sp1 after swap", sp1);

    swap(sp0, sp1);
    show("sp0 after second swap", sp0);
    show("sp1 after second swap", sp1);

    return 0;
}
Exemple #7
0
float calVelUpdateStepLen(const FwiParams &params,
    const float *wlt,
    const float *dobs,
    const float *derr,
    float epsil,
    const EnquistAbc2d &fmMethod,
    const ShotPosition &allSrcPos,
    const ShotPosition &allGeoPos
    )
{
  int nt = params.nt;
  int nz = params.nz;
  int nx = params.nx;
  int ng = params.ng;
  int ns = params.ns;

  std::vector<float> dcal(ng, 0); /* calculated/synthetic seismic data */
  std::vector<float> sp0(nz * nx); /* source wavefield p0 */
  std::vector<float> sp1(nz * nx); /* source wavefield p1 */
  std::vector<float> sp2(nz * nx); /* source wavefield p2 */

  std::vector<float> alpha1(ng, 0); /* numerator of alpha, length=ng */
  std::vector<float> alpha2(ng, 0); /* denominator of alpha, length=ng */

  for (int is = 0; is < ns; is++) {
    std::fill(sp0.begin(), sp0.end(), 0);
    std::fill(sp1.begin(), sp1.end(), 0);
    ShotPosition currSrcPos = allSrcPos.clip(is);

    for (int it = 0; it < nt; it++) {
      fmMethod.addSource(&sp1[0], &wlt[it], currSrcPos);
      fmMethod.stepForward(&sp0[0], &sp1[0], &sp2[0]);

      cycleSwap(sp0, sp1, sp2);

      fmMethod.recordSeis(&dcal[0], &sp0[0], allGeoPos);

      sum_alpha12(&alpha1[0], &alpha2[0], &dcal[0], &dobs[is * nt * ng + it * ng], &derr[is * ng * nt + it * ng], ng);
    }
  }

  float alpha = cal_alpha(&alpha1[0], &alpha2[0], epsil, ng);

  return alpha;
}
int main()
{
    iset data;
    spi sp0(new int(0));
    spi sp1(new int(1));
    spi sp2(new int(2));
    spi sp3(sp1);
    spi sp4(new int(1));

    data.insert(sp0);
    data.insert(sp1);
    data.insert(sp2);
    lookup(data, sp1);
    lookup(data, sp3);
    lookup(data, sp4);

    return 0;
}
void
OpenSteer::SharedPointerTest::testSwap()
{
    Super* rawSuperPointer0 = new Super();
    SharedPointer< Super > sp0( rawSuperPointer0 );
    
    Super* rawSuperPointer1 = new Super();
    SharedPointer< Super > sp1( rawSuperPointer1 );
    
    CPPUNIT_ASSERT_EQUAL( 2, Super::superCount_ );
    
    sp0.swap( sp1 );
    
    CPPUNIT_ASSERT( rawSuperPointer0 == sp1.get() );
    CPPUNIT_ASSERT( rawSuperPointer1 == sp0.get() );
    CPPUNIT_ASSERT_EQUAL( 2, Super::superCount_ );
    
}
Exemple #10
0
void triangle(Vec3i t0, Vec3i t1, Vec3i t2, Vec2i uv0, Vec2i uv1, Vec2i uv2,
              float intensity, int* zbuf, TGAImage& image) {
    if (isDegenerated(t0,t1,t2)) return;
    if (t0.y > t1.y) {
        std::swap(t0, t1);
        std::swap(uv0, uv1);
    }
    if (t0.y > t2.y) {
        std::swap(t0, t2);
        std::swap(uv0, uv2);
    }
    if (t1.y > t2.y) {
        std::swap(t1, t2);
        std::swap(uv1, uv2);
    }
    int* boundbox = getBoundBox(t0, t1, t2);
    Vec2i vertex(t1.x - t0.x, t1.y - t0.y);
    Vec2i tmpUv(uv1.x - uv0.x, uv1.y - uv0.y);
    for (int x = boundbox[0]; x <= boundbox[2]; x++) {
        for (int y = boundbox[1]; y <= boundbox[3]; y++) {
            if (insideTriangle(x, y, t0, t1, t2)) {
                int idx = x + y * width;
                int z = find_z(x, y, t0, t1, t2);
                Vec2i P(x, y), v(t0.x, t0.y);
                Vec2i s01(t1.x - t0.x, t1.y - t0.y), s02(t2.x - t0.x, t2.y - t0.y), sp0(t0.x - P.x, t0.y - P.y);
                Vec3i tmp1(s01.x, s02.x, sp0.x), tmp2(s01.y, s02.y, sp0.y);
                Vec3i tmp3 = tmp1 ^ tmp2;
                Vec3f res(tmp3.x, tmp3.y, tmp3.z);
                if (res.z != 0) {
                    res = res * (1 / res.z);
                } else {
                    continue;
                }
                Vec2f uvP =  uv0 * (1 - res.x - res.y) + uv1 * res.x + uv2 * res.y;
                if (zbuf[idx] < z) {
                    zbuf[idx] =  z;
                    TGAColor color = model->getDiffusive(uvP);
                    image.set(x, y, TGAColor(color.r * intensity , color.g * intensity , color.b * intensity , 255));
                }
            }
        }
    }
    delete[] boundbox;
}
void 
OpenSteer::SharedPointerTest::testReset()
{
    // Reset a shared pointer that manages a 0-pointer.
    {
        SharedPointer< SharedPointerTester< 0 > > sp0;
        sp0.reset();
        CPPUNIT_ASSERT( 0 == sp0.get() );
    }
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
    

    // Reset a shared pointer that manages a raw pointer.
    {
        SharedPointerTester< 0 >* rawPointer0 = new SharedPointerTester< 0 >();
        CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ );
        
        SharedPointer< SharedPointerTester< 0 > > sp0( rawPointer0 );
        sp0.reset();
        CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
        CPPUNIT_ASSERT( 0 == sp0.get() );
        
        
    }
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );

    // Reset more than once.
    {
        SharedPointerTester< 0 >* rawPointer0 = new SharedPointerTester< 0 >();
        CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ );
        
        SharedPointer< SharedPointerTester< 0 > > sp0( rawPointer0 );
        sp0.reset();
        CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
        CPPUNIT_ASSERT( 0 == sp0.get() );
        
        sp0.reset();
        CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
        CPPUNIT_ASSERT( 0 == sp0.get() );
    }
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
    
    
    // Reset a shared pointer managing a 0-pointer with a new raw pointer.
    {
        SharedPointerTester< 0 >* rawPointer0 = new SharedPointerTester< 0 >();
        CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ );
        
        SharedPointer< SharedPointerTester< 0 > > sp0;
        sp0.reset( rawPointer0 );
        CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ );
        CPPUNIT_ASSERT( rawPointer0 == sp0.get() );
        
        sp0.reset();
        CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
        CPPUNIT_ASSERT( 0 == sp0.get() );
        
    }
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
    
    
    // Reset a shared pointer managing a raw pointer with a new raw pointer.
    {
        SharedPointerTester< 0 >* rawPointer0 = new SharedPointerTester< 0 >();
        SharedPointerTester< 0 >* rawPointer1 = new SharedPointerTester< 0 >();
        CPPUNIT_ASSERT_EQUAL( 2, SharedPointerTester< 0 >::static_counter_ );
        
        SharedPointer< SharedPointerTester< 0 > > sp0( rawPointer0 );
        sp0.reset( rawPointer1 );
        CPPUNIT_ASSERT_EQUAL( 1, SharedPointerTester< 0 >::static_counter_ );
        CPPUNIT_ASSERT( rawPointer1 == sp0.get() );
        
        sp0.reset();
        CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
        CPPUNIT_ASSERT( 0 == sp0.get() );
    }
    CPPUNIT_ASSERT_EQUAL( 0, SharedPointerTester< 0 >::static_counter_ );
    
    
    
}
Exemple #12
0
float cal_obj_derr_illum_grad(const FwiParams &params,
    float *derr,  /* output */
    float *illum, /* output */
    float *g1,    /* output */
    const float *wlt,
    const float *dobs,
    const EnquistAbc2d &fmMethod,
    const ShotPosition &allSrcPos,
    const ShotPosition &allGeoPos)
{
  int nt = params.nt;
  int nz = params.nz;
  int nx = params.nx;
  int ng = params.ng;
  int ns = params.ns;

  std::vector<float> bndr = fmMethod.initBndryVector(nt);
  std::vector<float> dcal(ng, 0); /* calculated/synthetic seismic data */

  std::vector<float> sp0(nz * nx); /* source wavefield p0 */
  std::vector<float> sp1(nz * nx); /* source wavefield p1 */
  std::vector<float> sp2(nz * nx); /* source wavefield p2 */
  std::vector<float> gp0(nz * nx); /* geophone/receiver wavefield p0 */
  std::vector<float> gp1(nz * nx); /* geophone/receiver wavefield p1 */
  std::vector<float> gp2(nz * nx); /* geophone/receiver wavefield p2 */
  std::vector<float> lap(nz * nx); /* laplace of the source wavefield */

  for (int is = 0; is < ns; is++) {
    std::fill(sp0.begin(), sp0.end(), 0);
    std::fill(sp1.begin(), sp1.end(), 0);

    ShotPosition curSrcPos = allSrcPos.clip(is);

    for (int it = 0; it < nt; it++) {
      fmMethod.addSource(&sp1[0], &wlt[it], curSrcPos);
      fmMethod.stepForward(&sp0[0], &sp1[0], &sp2[0]);

      // cycle swap
      cycleSwap(sp0, sp1, sp2);

      fmMethod.writeBndry(&bndr[0], &sp0[0], it);
      fmMethod.recordSeis(&dcal[0], &sp0[0], allGeoPos);

      cal_residuals(&dcal[0], &dobs[is * nt * ng + it * ng], &derr[is * ng * nt + it * ng], ng);
    }

    std::swap(sp0, sp1);

    std::fill(gp0.begin(), gp0.end(), 0);
    std::fill(gp1.begin(), gp1.end(), 0);

    for (int it = nt - 1; it > -1; it--) {
      /// backward propagate source wavefield
      fmMethod.readBndry(&bndr[0], &sp1[0], it);
      fmMethod.stepBackward(illum, &lap[0], &sp0[0], &sp1[0], &sp2[0]);
      fmMethod.subSource(&sp1[0], &wlt[it], curSrcPos);

      /// forward propagate geophone wavefield
      fmMethod.addSource(&gp1[0], &derr[is * ng * nt + it * ng], allGeoPos);
      fmMethod.stepForward(&gp0[0], &gp1[0], &gp2[0]);

      /// calculate gradient
      cal_gradient(&g1[0], &lap[0], &gp1[0], nz, nx);

      cycleSwap(sp0, sp1, sp2);
      cycleSwap(gp0, gp1, gp2);
    }

  } /// output: derr, g1, illum

  float obj = cal_objective(&derr[0], ng * nt * ns);

  return obj;
}