<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" verticalGap="20" viewSourceURL="srcview/index.html">

    <!-- add Yahoo! Flex styles (http://developer.yahoo.com/flash/articles/yahoo-flex-skin.html) -->
    <mx:Style source="styles/yflexskin.css" />

    <mx:Script>
        <![CDATA[
            import classes.TestResult;
            import mx.collections.ArrayCollection;
        
            import classes.TestInstanceMethod;
            import classes.TestStaticMethod;
            
            [Bindable]
            private var executionTimes:ArrayCollection = new ArrayCollection();
            private var iterations:int = 5000000;
            private var currentTest:TestResult;
            private var instanceClass:TestInstanceMethod = new TestInstanceMethod();
            private var testInProgress:Boolean = false;
            
            private function startTest():void{
                if(!testInProgress){
                    currentTest = new TestResult();
                    testInProgress = true;
                    startInstanceMethods();
                }else{
                    testInProgress = false;
                    startStaticMethods();
                }
            }

            private function startInstanceMethods():void{
                var startTime:int = getTimer();
                for(var i:int=0; i<iterations; i++){
                    instanceClass.testMethod();
                }
                var endTime:int = getTimer();
                var executionTime:int = endTime - startTime;
                currentTest.instanceTime =  executionTime;
                btn_main.label = "Test Static Method";
                btn_main.enabled = true;
                txt_main.text = "Instance method executed in: " + executionTime + " ms";
                txt_main.text += "\n\nPress the button again to compare the static method.";
            }
            
            private function startStaticMethods():void{
                var startTime:int = getTimer();
                for(var i:int=0; i<iterations; i++){
                    TestStaticMethod.testMethod();
                }
                var endTime:int = getTimer();
                var executionTime:int = endTime - startTime;
                currentTest.staticTime =  executionTime;
                currentTest.difference = currentTest.staticTime - currentTest.instanceTime;
                executionTimes.addItem(currentTest);
                btn_main.label = "Test Instance Method Again";
                btn_main.enabled = true;
                txt_main.text = "Static method executed in: " + (endTime-startTime) + " ms";
            }
            
        ]]>
        
    </mx:Script>
    
    <mx:DataGrid dataProvider="{executionTimes}">
        <mx:columns>
            <mx:DataGridColumn headerText="Instance (ms)" dataField="instanceTime" />
            <mx:DataGridColumn headerText="Static (ms)" dataField="staticTime" />
            <mx:DataGridColumn headerText="Difference" dataField="difference" />
        </mx:columns>
    </mx:DataGrid>
    <mx:VBox>
        <mx:Button id="btn_main" label="Test Instance Methods"  click="startTest()" />
        <mx:Text id="txt_main" width="100%" fontWeight="bold" />
    </mx:VBox>
    
</mx:Application>