com.neolao.test.Speed

Fait un test de vitesse sur des fonctions

Exemple

var a:Function = function(p){
	return p*p;
};
var b:Function = function(p){
	return Math.pow(p, 2);
};
Speed.run([a, b]);

Propriétés

Visibilité Type Nom Status Description
static public Number loop Nombre d'invocations des fonctions
static public Array functions Liste des fonctions à tester
static public Array params Liste des paramètres des fonctions
static public Array result Liste des résultats de chaque test

Méthodes

Visibilité Return Nom Param 1 Param 2 Param 3 Description
static public String run pFunctions:Array pParams:Array pLoop:Number Test de fonctions
static private Void _run Exécution du test
static private Void _fastest Calcul du plus rapide

Change Log

[13/06/2005] Version 1.0

Création

Source

/**
 * Fait un test de vitesse sur des fonctions
 * @author 		neolao <neo@neolao.com>
 * @version 		1.0 (13/06/2005)
 */
class com.neolao.test.Speed{
	static public var className:String = "Speed";
	static public var version:String = "1.0";
 
	// ----------------------------- VARIABLES ---------------------------------
	/**
	 * Nombre d'invocations des fonctions
	 */
	static public var loop:Number = 10000;
	/**
	 * Liste des fonctions à tester
	 */
	static public var functions:Array;
	/**
	 * Liste des paramètres des fonctions
	 */
	static public var params:Array;
	/**
	 * Liste des résultats de chaque test
	 */
	static public var result:Array;
 
	/*=========================== METHODES PRIVEES ===========================*/
	/*========================================================================*/
	/**
	 * Exécution du test
	 */
	static private function _run(Void):Void{
		var vTimeStart, f, i:Number;
		var vParams:Array;
 
		result = new Array();
 
		for(f=0; f<functions.length; f++){
			vParams = (params[f][1] != undefined)?params[f]:new Array(params[f]);
			vTimeStart = getTimer();
			for(i=0; i<loop; i++){
				functions[f].apply(null, vParams);
			}
			result[f] = new Object();
			result[f].time = getTimer() - vTimeStart;
			result[f].average = result[f].time / loop;
		}
 
		_fastest();
	}
	/**
	 * Calcul du plus rapide
	 */
	static private function _fastest(Void):Void{
		var vFastest:Number = -1;
 
		for(var r:Number=0; r<result.length; r++){
			if(vFastest == -1 || result[r].time < vFastest){
				vFastest = result[r].time;
			}
		}
		for(r=0; r<result.length; r++){
			result[r].percent = Math.ceil(100 * result[r].time / vFastest);
			if(result[r].time == vFastest){
				result[r].flag = " -> ";
			}else{
				result[r].flag = "    ";
			}
		}
	}
	/*===================== FIN = METHODES PRIVEES = FIN =====================*/
	/*========================================================================*/
 
	/*============================ GETTER  SETTER ============================*/
	/*========================================================================*/
 
	/*====================== FIN = GETTER  SETTER = FIN ======================*/
	/*========================================================================*/
 
	/*========================== METHODES PUBLIQUES ==========================*/
	/*========================================================================*/
	/**
	 * Test de fonctions
	 * @param pFunctions La liste des fonctions à tester
	 * @param pParams La liste des paramètres de ces fonctions
	 * @param pLoop Le nombre d'invocations des fonctions
	 */
	static public function run(pFunctions:Array, pParams:Array, pLoop:Number):String{
		var vResult:String = "";
 
		functions = pFunctions;
		params = pParams;
		if(pLoop){
			loop = pLoop;
		}
 
		_run();
 
		vResult += "------ SPEED TEST --------------------------------------\n";
		for(var r:Number=0; r<result.length; r++){
			vResult += "[" + (r+1) + "]" + result[r].flag + result[r].percent + "% (time:" + result[r].time + "ms, average:" + result[r].average + "ms)\n";
		}
		vResult += "--------------------------------------------------------";
 
		trace(vResult);
		return vResult;
	}
	/*==================== FIN = METHODES PUBLIQUES = FIN ====================*/
	/*========================================================================*/
}