rvecD

alias rvecD = Vector!(0, real)

Examples

static assert( Vector!(3,float).isStatic == true );
static assert( Vector!(3,float).isDynamic == false );

static assert( Vector!(0,float).isStatic == false );
static assert( Vector!(0,float).isDynamic == true );

static assert( isVector!(Vector!(3,float)) );
static assert( isVector!(Vector!(0,float)) );

static assert( Vector!(3,float).sizeof == float.sizeof * 3 );
static assert( Vector!(0,float).sizeof == (float[]).sizeof );

static assert( Vector!(3,float).length == 3 );
assert( eq( Vector!(3,float)(1,2,3), [1,2,3] ) );

auto a = Vector!(3,float)(1,2,3);
assert( eq( Vector!(5,int)(0,a,4), [0,1,2,3,4] ) );

static assert( !__traits(compiles, { auto v = Vector!(2,int)(1,2,3); } ) );

{ auto v = Vector!(0,int)(1,2,3); } // no exception
{ auto v = Vector!(3,int)(1); } // no exception

auto b = Vector!(0,float)(1,2,3);
assert( eq( b.length, 3 ) );

auto c = Vector!(3,float)(1);
assert( eq( c, [1,1,1] ) );
auto d = c;
assert( eq( c, d ) );
static struct Test1 { float x,y,z; }
static assert( !__traits(compiles,Vector!(3,float)(Test1.init)) );

static struct Test2 { float[3] data; alias data this; }
static assert( __traits(compiles,Vector!(3,float)(Test2.init)) );

convert vectors

auto a = ivec2(1,2);
auto b = vec2(a);
assert( eq( a, b ) );
auto c = ivec2(b);
assert( eq( a, c ) );
auto a = Vector!(3,int)(1,2,3);
assert( eq( a.x, a.r ) );
assert( eq( a.y, a.g ) );
assert( eq( a.z, a.b ) );
assert( eq( a.x, a.u ) );
assert( eq( a.y, a.v ) );
assert( eq( a.z, a.t ) );
auto a = vec3(1,2,3);

assert( eq( a.opDispatch!"x", 1 ) );
assert( eq( a.y, 2 ) );
assert( eq( a.z, 3 ) );

a.opDispatch!"x" = 2;
a.x = 2;
assert( eq( a.x, 2 ) );
auto a = vec3(1,2,3);

auto b = a.opDispatch!"xy";
auto c = a.xx;
auto d = a.xxxyyzyx;

static assert( is(typeof(b) == Vector!(2,float) ) );
static assert( is(typeof(c) == Vector!(2,float) ) );
static assert( is(typeof(d) == Vector!(8,float) ) );

assert( eq( b, [1,2] ) );
assert( eq( c, [1,1] ) );
assert( eq( d, [1,1,1,2,2,3,2,1] ) );
auto a = vec3(1,2,3);
auto b = dvec4(4,5,6,7);
auto c = vecD( 9, 10 );
a.opDispatch!"xz"( b.yw );
assert( eq( a, [5,2,7] ) );
a.zy = c;
assert( eq( a, [5,10,9] ) );
static assert( !__traits(compiles, a.xy=vec3(1,2,3)) );
static assert( !__traits(compiles, a.xx=vec2(1,2)) );
auto d = a.zxy = b.wyx;
static assert( is( d.datatype == double ) );
assert( eq( d, [ 7,5,4 ] ) );
assert( eq( a, [ 5,4,7 ] ) );
a.yzx = a.zxz;
assert( eq( a, [ 7,7,5 ] ) );
auto a = vec3(1,2,3);
auto b = vecD(1,2,3);
auto c = a + b;
assert( is( typeof(c) == vec3 ) );
auto d = b + a;
assert( is( typeof(d) == vecD ) );
assert( eq( c, d ) );
auto f = ivec3(1,2,3);
auto c1 = a + f;
assert( is( typeof(c1) == vec3 ) );
auto d1 = ivec3(f) + ivec3(a);
assert( is( typeof(d1) == ivec3 ) );
assert( eq( c1, d ) );
assert( eq( c, d1 ) );

a *= 2;
b *= 2;
auto e = b *= 2;
assert( eq( a, [2,4,6] ) );
assert( eq( b, a*2 ) );

auto x = 2 * a;
assert( eq( x, [4,8,12] ) );

assert( !!x );
x[0] = float.nan;
assert( !x );
auto a = vec3(2,4,6);
a /= 2;
assert( eq( a, [1,2,3] ) );
auto a = vecD(1,2,3);

auto b = vec3(a);
auto c = vecD(b);

assert( eq( a, b ) );
assert( eq( a, c ) );
auto a = vec3(2,2,1);
assert( eq( a.rebase(vec3(2,0,0),vec3(0,2,0),vec3(0,0,2)), [1,1,.5] ) );
auto a = vec3(1,2,3);
auto b = ivec3(1,2,3);
auto k = a.len2;
assert( is( typeof(k) == float ) );

auto l = b.len2;
assert( is( typeof(l) == int ) );

auto m = b.len;
assert( is( typeof(m) == float ) );

auto n = b.len!real;
assert( is( typeof(n) == real ) );

assert( is( typeof( vec3( 1, 2, 3 ).e ) == vec3 ) );
assert( eq( a.e.len, 1 ) );
alias Vector!(3,cfloat) cvec3;

auto a = cvec3( 1-1i, 2+0i, 0+3i );
static assert( __traits(compiles, a.e) );

{ auto k = a.e; } // no exception
alias Vector!(3,Vector!(3,float)) mat3;
auto a = mat3( vec3(1,0,0), vec3(0,1,0), vec3(0,0,1) );

a *= 2;
a += a;

assert( eq( a[0][0], 4 ) );
assert( eq( a[1][1], 4 ) );
assert( eq( a[2][2], 4 ) );

assert( eq( a[0][1], 0 ) );
assert( eq( a[1][2], 0 ) );
assert( eq( a[2][1], 0 ) );

a ^^= 2;

assert( eq( a[0][0], 16 ) );
assert( eq( a[1][1], 16 ) );
assert( eq( a[2][2], 16 ) );

auto b = -a;

assert( eq( b[0][0], -16) );
assert( eq( b[1][1], -16) );
assert( eq( b[2][2], -16) );

Meta