LinkedList/Vector loop methods test

by skyboy
♥0 | Line 152 | Modified 2011-07-19 16:32:09 | MIT License
play

ActionScript3 source code

/**
 * Copyright skyboy ( http://wonderfl.net/user/skyboy )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/mabh
 */

package {
    import flash.display.*
    import flash.events.*;
    import flash.geom.*
    import flash.globalization.*;
    import flash.media.*;
    import flash.net.*;
    import flash.system.*;
    import flash.text.*;
    import flash.utils.*;
    [SWF(width='465', height='465', backgroundColor='#333333', frameRate='60')]
    public class FlashTest extends Sprite {
        public static const WIDTH:Number = 465;
        public static const HEIGHT:Number = 465;
        public static const hw:Number = WIDTH / 2;
        public static const hy:Number = HEIGHT / 2;
        private var logger:TextField;
        private var bytes:ByteArray;
        private const file:FileReference = new FileReference();
        private function log(...args):void {
            logger.appendText(args.join(" ") + "\n");
            logger.scrollV = logger.numLines;
        }
        private function saveFile(e:MouseEvent):void {
            try {
                var a:String;
                try {
                    a = file.name;
                } catch (b:*) {
                    a = "file.swf";
                }
                bytes = loaderInfo.bytes;
                file.save(bytes, a);
            } catch (er:Error) {
                //log(e)
            }
            e.stopImmediatePropagation();
            e.stopPropagation();
            e.preventDefault();
        }
        public function FlashTest() {
            graphics.beginFill(0xEEEEEE);
            graphics.drawRoundRect(0, 0, WIDTH, HEIGHT, 30);
            graphics.endFill();
            logger = new TextField();
            logger.autoSize = TextFieldAutoSize.LEFT;
            logger.defaultTextFormat = new TextFormat("Monaco");
            addChild(logger);
            var b:Sprite = new Sprite;
            var c:Graphics = b.graphics;
            c.beginFill(0x666666);
            c.drawRoundRect(0, 0, 100, 50, 30);
            c.endFill();
            (b.addChild(new TextField) as TextField).appendText("Save");
            var a:SimpleButton = new SimpleButton(b, b, b, b);
            addChild(a).x = WIDTH - 100;
            a.y = HEIGHT - 50;
            a.addEventListener(MouseEvent.CLICK, saveFile);
            if (stage) onAS(null); else addEventListener(Event.ADDED_TO_STAGE, onAS);
        }
        private function onAS(evt:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, onAS);
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP;
            log("                                     Click to test.");
            addEventListener(MouseEvent.CLICK, onCC);
        }
        private var test:Test = new Test;
        private function onCC(e:Event):void {
            addChild(test);
            test.runTest(109000001);
        }
    }
}
import flash.display.*;
import flash.system.*;
import flash.text.*;
import flash.utils.*;
internal class Test extends Sprite {
    private var logger:TextField = new TextField();
    public function Test():void {
        logger.y = 20;
        logger.autoSize = TextFieldAutoSize.LEFT;
        logger.defaultTextFormat = new TextFormat("Monaco");
        addChild(logger);
    }
    private function logTest(name:String, time:int, other:int):void {
        logger.appendText(name + ": " + time + " ms; " + other + '\n');
    }
    private function setVersionString():void {
            logger.text = "  ";
            //logger.appendText((Capabilities.supports64BitProcesses ? "64" : Capabilities.supports32BitProcesses ? "32" : "16") + " bit ");
            logger.appendText(Capabilities.os + " ");
            logger.appendText(Capabilities.cpuArchitecture + " ");
            logger.appendText(Capabilities.version.split(",").join(".").split(" ")[1] + " ");
            logger.appendText(Capabilities.isDebugger ? "Debug " : "Release ");
            logger.appendText(Capabilities.playerType);
            logger.appendText("\n");
        }
    public function runTest(tests:int):void {
        setVersionString();
        var i:int = tests, t:int, before:int, after:int;
        var head:Node = new Node, n:Node = head;
        var item:Vector.<int> = new Vector.<int>(tests);
        i = 1e6;
        while (i--) n = n.next = new Node;
        n.next = head;
        i = 0;
        before = getTimer();
        while (i < tests) {
            t &= item[i], ++i;
        }
        after = getTimer();
        logTest("Vector, normal", after - before, t);
        i = 0;
        before = getTimer();
        while((tests - i) % 4) t &= item[i], ++i;
        while (i < tests) {
            t &= item[i], ++i;
            t &= item[i], ++i;
            t &= item[i], ++i;
            t &= item[i], ++i;
        }
        after = getTimer();
        logTest("Vector, Duff", after - before, t);
        before = getTimer();
        n = head;
        i = 0;
        while(i++ < tests) n = n.next, t &= n.data;
        after = getTimer();
        logTest("LinkedList", after - before, t);
        i = 0;
        before = getTimer();
        n = head;
        while((tests - i) % 4) n = n.next, t &= n.data, ++i;
        while (i < tests) {
            n = n.next;
            t &= n.data;
            n = n.next;
            t &= n.data;
            n = n.next; 
            t &= n.data;
            n = n.next;
            t &= n.data;
            i += 4;
        }
        after = getTimer();
        logTest("LinkedList, Duff", after - before, t);
    }
}
internal class Node {
    public var next:Node;
    public var data:int;
}