package { import flash.display.Sprite; import flash.text.TextField; import flash.utils.getTimer; import flash.utils.ByteArray; import flash.utils.Endian; import cmodule.mersenne.CLibInit; [SWF(width=425, height=200, frameRate=30, backgroundColor=0x000000)] public class TestAlchemy extends Sprite { private var test_number:int = 10000; private var txt:TextField; private var lib:Object; private var mt:MersenneTwister; public function TestAlchemy() { super(); //AS3版 mt = new MersenneTwister(); //Alchemy版 var loader:CLibInit = new CLibInit; lib = loader.init(); //初期化するよ mt.init_genrand( 100 ); lib.init_genrand( 100 ); //表示用のフィールド txt = new TextField(); txt.textColor = 0xffffff; txt.text = "[test mersenne twister] num:" + String(test_number) + "\n"; txt.width = stage.stageWidth; txt.height = stage.stageHeight; addChild( txt ); //テストだ //test(); test_as3(); test_alchemy(); test_alchemy_array(); test_alchemy_byteArray(); } /** * as版とalchemy版の値を比較してみるよ */ public function test():void { var dd:String = "compare "; var da:Array = test_as3(); var db:Array = test_alchemy_byteArray(); for ( var k:int = 0; k < test_number; k++ ) { var a:uint = da[k]; var b:uint = db[k]; if ( a != b ) dd += String(a) + " " + String(b) + ","; } txt.appendText( dd + " end\n"); } /** * AS3 版テスト */ public function test_as3():Array { txt.appendText( "as3:" ); var t:int = getTimer(); var a:Array = []; for (var i:int = 0; i < test_number; i++) a[i] = mt.genrand_int32(); txt.appendText( " " + String(getTimer() - t) + "\n"); return a; } /** * Alchemy 素直なテスト * 呼び出しが多いと遅い */ public function test_alchemy():Array { txt.appendText( "alchemy:" ); var t:int = getTimer(); var a:Array = []; for (var i:int = 0; i < test_number; i++) a[i] = uint(lib.genrand_int32()); txt.appendText( " " + String(getTimer() - t) + "\n"); return a; } /** * Alchemy Cの中でArrayつくって返すテスト * Cの中でAS3呼び出しすると遅いみたい */ public function test_alchemy_array():Array { txt.appendText( "alchemy_array:" ); var t:int = getTimer(); var a:Array = lib.genrand_int32_array(test_number); txt.appendText( " " + String(getTimer() - t) + "\n"); return a; } /** * Alchemy Cの中でByteArrayつくって返すテスト */ public function test_alchemy_byteArray():Array { txt.appendText( "alchemy_bytearray:" ); var t:int = getTimer(); var ba:ByteArray = lib.genrand_int32_byteArray(test_number); ba.endian = Endian.LITTLE_ENDIAN; ba.position = 0; var a:Array = []; for ( var i:int = 0; i < test_number; i++ ) a[i] = ba.readUnsignedInt(); txt.appendText( " " + String(getTimer() - t) + "\n"); return a; } } }