예제 #1
0
        public void ComplexScript1()
        {
            CSharpContext context = new CSharpContext(ParserContextBehavior.Easy);

            string output = "";

            context.AssignmentPermissions = AssignmentPermissions.All;

            context.Set("f", new Action <int>(delegate(int i) { output += i; }));


            int[] array = new int[50];

            context.Set("array", array);

            for (int i = 0; i < array.Length; i++)
            {
                array[i] = i + 1;
            }

            Random rnd = new Random();

            for (int i = 0; i < array.Length - 1; i++)
            {
                int idx = rnd.Next(i + 1, array.Length - 1);

                int tmp = array[idx];
                array[idx] = array[i];
                array[i]   = tmp;
            }

            string script =
                @"

numSwaps = 0;

foreach (i in [0...array.Length-2])
{
   foreach (j in [i+1...array.Length-1])
   {
        if (array[i] > array[j])
        {
             tmp = array[i];
             array[i] = array[j];
             array[j] = tmp;
 
             numSwaps = numSwaps + 1;
        }
   }
}

return numSwaps;
";

            _parser.Evaluate(script, context);

            object o;
            Type   t;

            context.Get("array", out o, out t);

            array = (int[])o;


            Assert.AreEqual(1, array[0]);
            Assert.AreEqual(2, array[1]);
            Assert.AreEqual(3, array[2]);
            Assert.AreEqual(4, array[3]);
            Assert.AreEqual(5, array[4]);
            Assert.AreEqual(6, array[5]);
            Assert.AreEqual(7, array[6]);
            Assert.AreEqual(8, array[7]);
            Assert.AreEqual(9, array[8]);
        }