예제 #1
0
        public void InitialValueTest()
        {
            string input = @"
!A(3)[?],
!B[?],
!C(1)[freshid()];";
            var    p     = new ResedaParser();

            p.dispTree(input);
            var         term = p.Generate(input);
            InputEvent  a    = (InputEvent)term.subProcess.structuredData[0];
            InputEvent  b    = (InputEvent)term.subProcess.structuredData[1];
            OutputEvent c    = (OutputEvent)term.subProcess.structuredData[2];

            System.Diagnostics.Debug.WriteLine(term.subProcess.ToSource());
            var term2 = p.Generate(term.subProcess.ToSource());

            Assert.AreEqual(term.ToSource(), term2.ToSource());

            Assert.AreEqual(c.marking.value.ToString(), "1");
            Assert.AreEqual(a.marking.value.ToString(), "3");
            Assert.IsNull(b.marking.value);
            c.Execute();
            Assert.AreEqual(c.marking.value.ToString(), "4");
            b.Execute(1);
            Assert.AreEqual(c.marking.value.ToString(), "4");
            a.Execute(5);
            Assert.AreEqual(a.marking.value.ToString(), "5");
            c.Execute();
            Assert.AreEqual(c.marking.value.ToString(), "6");

            /*
             * c.Execute();
             * System.Diagnostics.Debug.WriteLine(c.ToSource());
             * System.Diagnostics.Debug.WriteLine(c.marking.value);
             * Assert.AreEqual(c.marking.value.ToString(), "0");
             * c.Execute();
             * Assert.AreEqual(c.marking.value.ToString(), "1");
             * a.Execute(3);
             * c.Execute();
             * Assert.AreEqual(c.marking.value.ToString(), "4");
             *
             * b.Execute(1);
             * c.Execute();
             * Assert.AreEqual(c.marking.value.ToString(), "5");
             *
             * b.Execute(10);
             * c.Execute();
             * Assert.AreEqual(c.marking.value.ToString(), "11");
             */
        }
예제 #2
0
        public void GuardedCondition()
        {
            string input = @"A[],
B[],
D[],
C[];
A[(count(@/C)==0)] -->* B,
D -->* C
";
            var    p     = new ResedaParser();

            p.dispTree(input);
            var term = p.Generate(input);

            System.Diagnostics.Debug.WriteLine(term.subProcess.ToSource());
            var term2 = p.Generate(term.subProcess.ToSource());

            Assert.AreEqual(term.ToSource(), term2.ToSource());
            OutputEvent a = (OutputEvent)term.subProcess.structuredData[0];
            OutputEvent b = (OutputEvent)term.subProcess.structuredData[1];
            OutputEvent d = (OutputEvent)term.subProcess.structuredData[2];
            OutputEvent c = (OutputEvent)term.subProcess.structuredData[3];

            Assert.IsTrue(b.IsEnabled());
            b.Execute();

            Assert.IsFalse(c.IsEnabled());
            Assert.ThrowsException <Exception>(() =>
            {
                c.Execute();
            });
        }
예제 #3
0
        public void BooleanExpresionTest()
        {
            string input = "A[?]," +
                           "B[?]," +
                           "C[@A:v + @B:v > 5 && !(@A:v - @B:v > 10)]" +
                           "; ";

            var p = new ResedaParser();

            p.dispTree(input);

            var term  = p.Generate(input);
            var term2 = p.Generate(term.subProcess.ToSource());

            Assert.AreEqual(term.ToSource(), term2.ToSource());



            InputEvent  a = (InputEvent)term.subProcess.structuredData[0];
            InputEvent  b = (InputEvent)term.subProcess.structuredData[1];
            OutputEvent c = (OutputEvent)term.subProcess.structuredData[2];



            a.Execute(3);
            b.Execute(5);
            System.Diagnostics.Debug.WriteLine(term.PrintTree(true));

            c.Execute();
            var val = (BoolType)c.marking.value;

            Assert.AreEqual(val.value, true);
            System.Diagnostics.Debug.WriteLine(term.PrintTree(true));


            a.Execute(20);
            c.Execute();
            val = (BoolType)c.marking.value;
            Assert.AreEqual(val.value, false);
            System.Diagnostics.Debug.WriteLine(term.PrintTree(true));
        }
예제 #4
0
        public void BPMTestThomas()
        {
            string input = @"orders[]{
 create_order[?:@/customers/customer/customer_id:value]
 ;
 create_order -->>{
 order[]{
 !order_id[freshid()],
 !customer_id[@trigger:value]
 }
}
},
customers[]{
 create_customer[?],
 customer[] {
 customer_id(0)[],
 customer_name('John')[] 
 },
 customer[]{
 customer_id(1)[],
 customer_name('Mary')[]
 }
 ;
 create_customer -->> {
 customer[]{
 !customer_id[freshid()],
 !customer_name[?]
 }
 }
}";
            var    p     = new ResedaParser();

            p.dispTree(input);
            var term = p.Generate(input);

            System.Diagnostics.Debug.WriteLine(term.subProcess.ToSource());
            var term2 = p.Generate(term.subProcess.ToSource());

            //Assert.AreEqual(term.ToSource(), term2.ToSource());
            InputEvent create_order = (InputEvent)term.subProcess.structuredData[0].subProcess.structuredData[0];

            create_order.Execute(1);

            System.Diagnostics.Debug.WriteLine(term.ToSource());

            OutputEvent o1 = (OutputEvent)term.subProcess.structuredData[0].subProcess.structuredData[1].subProcess.structuredData[0];
            OutputEvent o2 = (OutputEvent)term.subProcess.structuredData[0].subProcess.structuredData[1].subProcess.structuredData[1];

            o1.Execute();
            o2.Execute();
            System.Diagnostics.Debug.WriteLine(term.ToSource());
        }
예제 #5
0
        public void CountTest()
        {
            string input = @"
!A[?],
!A[?],
!C[count(@A)];";
            var    p     = new ResedaParser();

            p.dispTree(input);
            var         term = p.Generate(input);
            OutputEvent c    = (OutputEvent)term.subProcess.structuredData[2];

            System.Diagnostics.Debug.WriteLine(term.subProcess.ToSource());
            var term2 = p.Generate(term.subProcess.ToSource());

            Assert.AreEqual(term.ToSource(), term2.ToSource());
            c.Execute();
            System.Diagnostics.Debug.WriteLine(c.ToSource());
            System.Diagnostics.Debug.WriteLine(c.marking.value);
            Assert.AreEqual(c.marking.value.ToString(), "2");
        }
예제 #6
0
        public void FilterTest()
        {
            string input = "A[]," +
                           "B[]," +
                           "B[]," +
                           "C[]" +
                           "; A -->* B[1]";

            var p = new ResedaParser();

            p.dispTree(input);

            var term  = p.Generate(input);
            var term2 = p.Generate(term.subProcess.ToSource());

            Assert.AreEqual(term.ToSource(), term2.ToSource());



            OutputEvent a  = (OutputEvent)term.subProcess.structuredData[0];
            OutputEvent b0 = (OutputEvent)term.subProcess.structuredData[1];
            OutputEvent b1 = (OutputEvent)term.subProcess.structuredData[2];
            OutputEvent c  = (OutputEvent)term.subProcess.structuredData[3];


            b0.Execute();
            System.Diagnostics.Debug.WriteLine(term.PrintTree(true));

            try
            {
                b1.Execute();
                Assert.Fail();
            }
            catch
            { }

            System.Diagnostics.Debug.WriteLine(term.PrintTree(true));
        }
예제 #7
0
        public void CurrentHackingTest()
        {
            string input = "A[?]," +
                           "B[?]," +
                           "C[@A:v + @B:v * 10]," +
                           "D[]," +
                           "E[]" +
                           "; A -->* B," +
                           " D -->> {N[?];}," +
                           "E -->% *";
            var p = new ResedaParser();

            p.dispTree(input);

            //System.Diagnostics.Debug.WriteLine(p.Generate(input).PrintTree());

            var term = p.Generate(input);

            System.Diagnostics.Debug.WriteLine(term.subProcess.ToSource());

            //var term2 = term.CloneJson();
            var term2 = p.Generate(term.subProcess.ToSource());

            InputEvent  a = (InputEvent)term.subProcess.structuredData[0];
            InputEvent  b = (InputEvent)term.subProcess.structuredData[1];
            OutputEvent c = (OutputEvent)term.subProcess.structuredData[2];
            OutputEvent d = (OutputEvent)term.subProcess.structuredData[3];
            OutputEvent e = (OutputEvent)term.subProcess.structuredData[4];

            a.Execute(1);
            System.Diagnostics.Debug.WriteLine(term.PrintTree(true));

            b.Execute(5);
            System.Diagnostics.Debug.WriteLine(term.PrintTree(true));

            c.Execute();
            System.Diagnostics.Debug.WriteLine(term.PrintTree(true));

            d.Execute();
            System.Diagnostics.Debug.WriteLine(term.PrintTree(true));

            d.Execute();
            System.Diagnostics.Debug.WriteLine(term.PrintTree(true));

            System.Diagnostics.Debug.WriteLine("TERM 2");

            a = (InputEvent)term2.subProcess.structuredData[0];
            b = (InputEvent)term2.subProcess.structuredData[1];
            c = (OutputEvent)term2.subProcess.structuredData[2];
            d = (OutputEvent)term2.subProcess.structuredData[3];
            e = (OutputEvent)term2.subProcess.structuredData[4];

            System.Diagnostics.Debug.WriteLine(term2.PrintTree(true));
            a.Execute(1);
            System.Diagnostics.Debug.WriteLine(term2.PrintTree(true));

            b.Execute(5);
            System.Diagnostics.Debug.WriteLine(term2.PrintTree(true));

            c.Execute();
            System.Diagnostics.Debug.WriteLine(term2.PrintTree(true));

            d.Execute();
            System.Diagnostics.Debug.WriteLine(term2.PrintTree(true));

            d.Execute();
            System.Diagnostics.Debug.WriteLine(term2.PrintTree(true));
        }