예제 #1
0
void test(VectorU& u, VectorV& v, VectorW& w, const char* name)
{
    using mtl::dot;

	// test right scale
    u= 3.0; v= 4.0; w= 5.0;
	
    std::cout << name << "  --- v= u*3 + w*4;:\n"; std::cout.flush();
    v= u*3 + w*4;
    cout << "v: " << v << "\n"; std::cout.flush();
    MTL_THROW_IF(v[0] != 29.0, mtl::runtime_error("v wrong"));
	
    std::cout << name << "  --- u= 3; v= 4; u+= v+= (w= 5) * 3.0;:\n"; std::cout.flush();
    u= 3; v= 4; 
    u+= v+= (w= 5.0) * 3.0;
    cout << "u: " << u << "v: " << v << "\n"; std::cout.flush();
    MTL_THROW_IF(v[0] != 19.0, mtl::runtime_error("v wrong"));
    MTL_THROW_IF(u[0] != 22.0, mtl::runtime_error("u wrong"));
	
    std::cout << name << "  --- u= 3; v= 4; w=5; u+= w * dot(v, w);:\n"; std::cout.flush();
    u= 3; v= 4; w=5; u+= w * dot(v, w);
    cout << "u: " << u << "v: " << v << "w: " << w << "\n"; std::cout.flush();
    MTL_THROW_IF(u[0] != 503.0, mtl::runtime_error("u wrong"));
	
    std::cout << name << "  --- u+= w * dot<12>(v, w);:\n"; std::cout.flush();
    u+= w * dot<12>(v, w);
    cout << "u: " << u << "v: " << v << "w: " << w << "\n"; std::cout.flush();
    MTL_THROW_IF(u[0] != 1003.0, mtl::runtime_error("u wrong"));

	// test divide by scalar
    u= 3.0; v= 4.0; w= 5.0;
	
    std::cout << name << "  --- v= u/3 + w/5;:\n"; std::cout.flush();
    v= u/3 + w/5;
    cout << "v: " << v << "\n"; std::cout.flush();
    MTL_THROW_IF(v[0] != 2.0, mtl::runtime_error("v wrong"));
	
    std::cout << name << "  --- u= 3; v= 4; u+= v+= (w= 6.0) / 3.0;:\n"; std::cout.flush();
    u= 3; v= 4; 
    u+= v+= (w= 6.0) / 3.0;
    cout << "u: " << u << "v: " << v << "\n"; std::cout.flush();
    MTL_THROW_IF(v[0] != 6.0, mtl::runtime_error("v wrong"));
    MTL_THROW_IF(u[0] != 9.0, mtl::runtime_error("u wrong"));
	
}