Preparation Code Preparation HTML (this will be inserted in the <body>
of a valid HTML5 document in standards mode) (useful when testing DOM operations or including libraries) <script >
var circleFns = {
area : function ( ) {
return Math .PI * this .radius * this .radius ;
},
grow : function ( ) {
this .radius ++;
},
shrink : function ( ) {
this .radius --;
}
}
var asCircle = function ( ) {
this .area = function ( ) {
return Math .PI * this .radius * this .radius ;
};
this .grow = function ( ) {
this .radius ++;
};
this .shrink = function ( ) {
this .radius --;
};
}
var asCircleCached = (function ( ) {
var area = function ( ) {
return Math .PI * this .radius * this .radius ;
};
var grow = function ( ) {
this .radius ++;
};
var shrink = function ( ) {
this .radius --;
};
return function ( ) {
this .area = area, this .grow = grow, this .shrink = shrink;
}
})();
var asCircleCachedPassedObj = (function ( ) {
var area = function ( ) {
return Math .PI * this .radius * this .radius ;
};
var grow = function ( ) {
this .radius ++;
};
var shrink = function ( ) {
this .radius --;
};
return function (obj ) {
var proto = obj.prototype ;
proto.area = area, proto.grow = grow, proto.shrink = shrink;
}
})();
var asCircleCachedPassedProto = (function ( ) {
var area = function ( ) {
return Math .PI * this .radius * this .radius ;
};
var grow = function ( ) {
this .radius ++;
};
var shrink = function ( ) {
this .radius --;
};
return function (proto ) {
proto.area = area, proto.grow = grow, proto.shrink = shrink;
}
})();
Function .prototype .curry = function ( ) {
var fn = this ;
var args = [].slice .call (arguments , 0 );
return function ( ) {
return fn.apply (this , args.concat ([].slice .call (arguments , 0 )));
}
}
var asCircleCachedAndCurried = (function ( ) {
var area = function ( ) {
return Math .PI * this .radius * this .radius ;
};
var grow = function (growBy ) {
this .radius += growBy;
};
var shrink = function (shrinkBy ) {
this .radius -= shrinkBy;
};
return function (options ) {
this .area = area, this .grow = grow.curry (options['growBy' ]), this .shrink = shrink.curry (options['shrinkBy' ])
}
})();
var asCircleWithOptions = function (options ) {
this .area = function ( ) {
return Math .PI * this .radius * this .radius ;
};
this .grow = function ( ) {
this .radius += options.growBy ;
};
this .shrink = function ( ) {
this .radius -= options.shrinkBy ;
};
}
var CircleComponent = function (circle, options ) {
circle.area = function ( ) {
return Math .PI * circle.radius * circle.radius ;
};
circle.grow = function ( ) {
circle.radius += options.growBy ;
};
circle.shrink = function ( ) {
circle.radius -= options.shrinkBy ;
};
};
var CircularObject = function (radius ) {
this .radius = radius
};
</script >
Setup JS
Teardown JS
Test cases
Test #1 Title *
Async
Code * for (var k in circleFns) {
if (circleFns.hasOwnProperty (k)) {
CircularObject .prototype [k] = circleFns[k]
};
}
var obj = new CircularObject (4 );
obj.shrink ();
Test #2 Title *
Async
Code * asCircle.call (CircularObject .prototype );
var obj = new CircularObject (4 );
obj.shrink ();
Title *
Async
Code * asCircleCached.call (CircularObject .prototype );
var obj = new CircularObject (4 );
obj.shrink ();
Title *
Async
Code * asCircleCachedAndCurried.call (
CircularObject .prototype , {
growBy : 2 ,
shrinkBy : 2
});
var obj = new CircularObject (4 );
obj.shrink ();
Title *
Async
Code * asCircleWithOptions.call (
CircularObject .prototype , {
growBy : 2 ,
shrinkBy : 2
});
var obj = new CircularObject (4 );
obj.shrink ();
Title *
Async
Code * var obj = new CircularObject (4 );
CircleComponent (obj, {
growBy : 2 ,
shrinkBy : 2
});
obj.shrink ();
Title *
Async
Code * asCircleCachedPassedObj (CircularObject );
var obj = new CircularObject (4 );
obj.shrink ();
Title *
Async
Code * asCircleCachedPassedProto (CircularObject .prototype );
var obj = new CircularObject (4 );
obj.shrink ();