THREE = {};
    
THREE.Vector3 = function ( x, y, z ) {

    this.x = x || 0;
    this.y = y || 0;
    this.z = z || 0;

};

THREE.Vector3.prototype = {

    constructor: THREE.Vector3,
    
    length: function () {

            return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );

    }
    
};

THREE.Vector3X = function ( x, y, z ) {

    var elements = this.elements = new Float32Array( 3 );
    elements[0] = x || 0;
    elements[1] = y || 1;
    elements[2] = z || 2;

};

THREE.Vector3X.prototype = {

    constructor: THREE.Vector3X,
    
    length: function () {

            return Math.sqrt( this.elements[0] * this.elements[0] + this.elements[1] * this.elements[1] + this.elements[2] * this.elements[2] );

    }
    
};


THREE.Vector3Y = function ( x, y, z ) {

    this.elements = [ x || 0, y || 1, z || 2 ];

};

THREE.Vector3Y.prototype = {

    constructor: THREE.Vector3Y,
    
    length: function () {

            return Math.sqrt( this.elements[0] * this.elements[0] + this.elements[1] * this.elements[1] + this.elements[2] * this.elements[2] );

    }
    
};


var suite = new Benchmark.Suite;

suite.add('Vector3-Set', function() {

    var array = [];
    for ( var i = 0; i < 100000; i ++ ) {
        var v = new THREE.Vector3( i, i, i );
        array.push( v );
    }

    var result = 0;
    for ( var i = 0; i < 100000; i ++ ) {
        var v = array[i];
        result += v.length();
    }
});

suite.add('Vector3-Float32Array', function() {

    var array = [];
    for ( var i = 0; i < 100000; i ++ ) {
        var v = new THREE.Vector3X( i, i, i );
        array.push( v );
    }

    var result = 0;
    for ( var i = 0; i < 100000; i ++ ) {
        var v = array[i];
        result += v.length();
    }
});

suite.add('Vector3-Array', function() {

    var array = [];
    for ( var i = 0; i < 100000; i ++ ) {
        var v = new THREE.Vector3Y( i, i, i );
        array.push( v );
    }

    var result = 0;
    for ( var i = 0; i < 100000; i ++ ) {
        var v = array[i];
        result += v.length();
    }
});

suite.on('cycle', function(event, bench) {
  console.log(String(event.target));
});

suite.on('complete', function() {
  console.log('Fastest is ' + this.filter('fastest').pluck('name'));
  console.log( "Done" );
});

suite.run(true);