//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

function test1(o)
{
    var count = 0;
    for(var i=0;i<10;i++)
    {
        count += o.x.y;
        count += o.x.y;
        count += o.x.w;
        count += o.z;
    }
    return count;
}
var o = {x:{y:2, w:3}, z:1};
print("\ntest1");
test1(o);
test1(o);
test1(o);

function test2(o)
{
    var a=0;var b =0;
    o.x;
    for(var i=0;i<10;i++)
    {
        o.x++
    }
    return b;
}
o.x=1;
print("\ntest2");
test2(o)
test2(o)
test2(o)

var Direction = new Object();
Direction.NONE     = 0;
Direction.FORWARD  = 1;
Direction.BACKWARD = -1;

function inlinee(o)
{
    o.count += Direction.FORWARD;
    return true;
}
function testInlined(o)
{
    
    for(var i = 0; i < 1000; i++)
    {
        if(!inlinee(o))
        {
            o.count = 1;
        }
        inlinee(o);
    }
}

print("\ntestInlined");
var obj = {count:0, dir:1};

obj.count= 1;
o.dir=1;
testInlined(obj);
print(o.count);

obj.count = 1;
obj.dir =2;
testInlined(obj);
print(obj.count);

obj.count = 1;
obj.dir =1;
testInlined(obj);
print(obj.count);


function test3()
{
    function OrderedCollection() {
        this.elms = new Array();
    }

    OrderedCollection.prototype.size = function() {
        return this.elms.length;
    }

    OrderedCollection.prototype.at = function (index) {
        return this.elms[index];
    }

    function Plan() {
        this.v = new OrderedCollection();
    }

    Plan.prototype.add = function(c){
        this.v.elms.push(c);
    }
    Plan.prototype.size = function () {
        return this.v.size();
    }

    Plan.prototype.constraintAt = function (index) {
        return this.v.at(index);
    }

    Plan.prototype.execute = function()
    {
        var count = 0;
        for (var i = 0; i < this.size(); i++) {
            this.constraintAt(i);
            count += Direction.FORWARD;
        }
        return count;
    }

    var plan = new Plan();
    for(var i = 0; i < 10; i++)
    {
        plan.add(1);
    }
    print(plan.execute());
    print(plan.execute());
    print(plan.execute());
}
print("\ntest3");
test3();

