public void CtorWithNullHandler()
 {
     try {
         var task = new VariableArgumentTask<int> (1, null);
         Assert.Fail ("#2");
     } catch (ArgumentNullException) {}
 }
 public void CtorWithBadArgs()
 {
     int cnt = 1;
     try {
         var task = new VariableArgumentTask<int> (-1, (a) => cnt += a.Length);
         Assert.Fail ("#1");
     } catch (OverflowException) {} //LAMEIMPL should throw a smarter exception
 }
        public void Execute()
        {
            int cnt = 1;
            var task = new VariableArgumentTask<int> (2, (a) => cnt += a.Length);

            try {
                task.Execute ();
                Assert.Fail ("#1");
            } catch (NullReferenceException) {}

            task [0] = new PortElement<int> (10);
            try {
                task.Execute ();
                Assert.Fail ("#2");
            } catch (NullReferenceException) {}

            task [1] = new PortElement<int> (20);
            Assert.IsNull (task.Execute (), "#3");
            Assert.AreEqual (3, cnt, "#4");
        }
        public void ExecuteWithBoundFirstArg()
        {
            double cntA = 1;
            int cntB = 1;
            var task = new VariableArgumentTask<double, int> (1, (a, b) => { cntA += a; cntB += b.Length; });

            task [0] = new PortElement <double> (4);
            task [1] = new PortElement <int> (2);
            Assert.IsNull (task.Execute (), "#1");
            Assert.AreEqual (5, cntA, "#2");
            Assert.AreEqual (2, cntB, "#3");
        }
 public void PortElementCountWithBoundFirstArg()
 {
     double cntA = 1;
     int cntB = 1;
     var task = new VariableArgumentTask<double, int> (1, (a, b) => { cntA += a; cntB += b.Length; });
     Assert.AreEqual (2, task.PortElementCount, "#1");
 }
        public void PortElementCount()
        {
            int cnt = 1;
            var task = new VariableArgumentTask<int> (3, (a) => cnt += a.Length);

            Assert.AreEqual (3, task.PortElementCount, "#1");
        }
        public void PartialCloneEmptyElements()
        {
            int cnt = 1;
            var task = new VariableArgumentTask<int> (2, (a) => cnt += a.Length);
            task [0] = new PortElement<int> (10);
            task [1] = new PortElement<int> (20);

            var tk = task.PartialClone ();
            Assert.IsNull (tk [0], "#1");
            Assert.IsNull (tk [0], "#2");
        }
        public void ItemPropertyBounds()
        {
            int cnt = 1;
            var task = new VariableArgumentTask<int> (5, (a) => cnt += a.Length);

            try {
                task [-1] = new PortElement<int> (10);
                Assert.Fail ("#1");
            } catch (IndexOutOfRangeException) {}

            try {
                task [5] = new PortElement<int> (10);
                Assert.Fail ("#2");
            } catch (IndexOutOfRangeException) {}

            try {
                var obj = task [-1];
                Assert.Fail ("#3");
            } catch (IndexOutOfRangeException) {}

            try {
                var obj = task [5];
                Assert.Fail ("#4");
            } catch (IndexOutOfRangeException) {}
        }