public void UTSignalFragmentGetChildrenTouching4()
        {
            ISignalContainer testItem1 = new SignalFragment(
                new List <ISignalContent> {
                new Wave(1, 0),
                new Wave(1, -3),                                       //si
                new SignalFragment(6, new List <ISignalContent> {      //si
                    new Wave(1, 9),                                    //si
                    new SignalFragment(-2, new List <ISignalContent> { //si
                        new Wave(1, -1)                                //si
                    }),
                    new SignalFragment(2, new List <ISignalContent> {
                        new Wave(1, 0),
                        new Wave(1, 2)
                    })
                }),
                new SignalFragment(24, new List <ISignalContent> { //si
                    new Wave(1, 0),
                    new Wave(1, 27)                                //si
                }),
                new SignalFragment(3, new List <ISignalContent> {
                    new Wave(1, 3)
                })
            }
                ) as ISignalContainer;

            Assert.AreEqual(3, testItem1.GetChildrenTouching(3, recursive: true).Count);
            Assert.AreEqual(7, testItem1.GetChildrenTouching(3, loopLength: 6, recursive: true).Count);
        }
        public void UTSignalFragmentGetChildrenTouching6()
        {
            ISignalContainer testItem1 = new SignalFragment(
                new List <ISignalContent> {
                new Wave(1, 0),
                new Wave(1, 3),
                new SignalFragment(new List <ISignalContent> {
                    new Wave(1, 3),
                    new SignalFragment(new List <ISignalContent> {
                        new Wave(1, 0)
                    }),
                    new SignalFragment(2, new List <ISignalContent> {
                        new Wave(1, 0),
                        new Wave(1, 1)
                    })
                }),
                new SignalFragment(2, new List <ISignalContent> {
                    new Wave(1, 0),
                    new Wave(1, 1)
                }),
                new SignalFragment(1, new List <ISignalContent> {
                    new Wave(1, 0)
                })
            }
                ) as ISignalContainer;

            Assert.AreEqual(5, testItem1.GetChildrenTouching(3, recursive: false, collectorArray: new List <ISignalContent> {
                new Wave(1, 0), new Wave(1, 3)
            }).Count);
        }
        public void UTSignalFragmentConstructor2()
        {
            SignalFragment testItem = new SignalFragment(3);

            Assert.IsNotNull(testItem);
            Assert.AreEqual((testItem as ISignalContent).Offset, 3);
        }
        public void UTSignalFragmentHasValuesAt4()
        {
            SignalFragment testItem1 = new SignalFragment(0,
                                                          new List <ISignalContent> {
                new Wave(1, 0),
                new SignalFragment(-3, new List <ISignalContent> {
                    new Wave(-3, 0),
                    new Wave(1, 2)
                }),
                new SignalFragment(6, new List <ISignalContent> {
                    new Wave(4, 4),
                    new Wave(4, 8),
                })
            }
                                                          );

            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(0, 6));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(1, 6));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(2, 6));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(3, 6));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(4, 6));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(5, 6));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(0, 6, recursive: false));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(2, 6, recursive: false));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(3, 6, recursive: false));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(4, 6, recursive: false));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(5, 6, recursive: false));
        }
        public void UTSignalFragmentHasValuesAt3()
        {
            SignalFragment testItem1 = new SignalFragment(0,
                                                          new List <ISignalContent> {
                new Wave(1, 0),
                new SignalFragment(0, new List <ISignalContent> {
                    new Wave(1, 0),
                    new Wave(1, 1)
                }),
                new SignalFragment(3, new List <ISignalContent> {
                    new Wave(3, 0),
                    new Wave(1, 3)
                }),
                new SignalFragment(6, new List <ISignalContent> {
                    new Wave(4, 4),
                    new Wave(4, -2),
                })
            }
                                                          );

            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(0));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(1));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(3));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(4));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(10));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(2));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(5));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(0, recursive: false));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(1, recursive: false));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(3, recursive: false));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(4, recursive: false));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(10, recursive: false));
        }
        public void UTSignalFragmentConstructor3()
        {
            List <ISignalContent> newContents = new List <ISignalContent> {
                new Wave(1), new Wave(2, 2)
            };
            SignalFragment testItem = new SignalFragment(newContents);

            Assert.IsNotNull(testItem);
            Assert.IsTrue((testItem as ISignalHandler).HasValuesAt(0));
            Assert.IsTrue((testItem as ISignalHandler).HasValuesAt(2));
            Assert.IsFalse((testItem as ISignalHandler).HasValuesAt(3));
            Assert.IsFalse((testItem as ISignalHandler).HasValuesAt(5));
        }
        public void UTSignalFragmentHasValuesAt2()
        {
            SignalFragment testItem1 = new SignalFragment(0,
                                                          new List <ISignalContent> {
                new Wave(-3, -3),
                new Wave(6, 6),
                new Wave(8, 8)
            }
                                                          );

            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(-4, 6));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(3, 6));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(0, 6));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(2, 6));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(6, 7));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(1, 7));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(1, 6));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(-4));

            SignalFragment testItem2 = new SignalFragment(-3,
                                                          new List <ISignalContent> {
                new Wave(2, 5),
                new Wave(-5, -2)
            }
                                                          );

            Assert.IsTrue((testItem2 as ISignalHandler).HasValuesAt(2, 6));
            Assert.IsTrue((testItem2 as ISignalHandler).HasValuesAt(-4, 6));
            Assert.IsTrue((testItem2 as ISignalHandler).HasValuesAt(14, 6));
            Assert.IsTrue((testItem2 as ISignalHandler).HasValuesAt(1, 6));
            Assert.IsFalse((testItem2 as ISignalHandler).HasValuesAt(-4));
            Assert.IsFalse((testItem2 as ISignalHandler).HasValuesAt(3, 6));
            Assert.IsFalse((testItem2 as ISignalHandler).HasValuesAt(4, 6));
            Assert.IsFalse((testItem2 as ISignalHandler).HasValuesAt(5, 6));
            Assert.IsFalse((testItem2 as ISignalHandler).HasValuesAt(0, 6));

            SignalFragment testItem3 = new SignalFragment(2,
                                                          new List <ISignalContent> {
                new Wave(2, 0),
                new Wave(-2, -4),
                new Wave(7, 5)
            }
                                                          );

            Assert.IsTrue((testItem3 as ISignalHandler).HasValuesAt(2, 6));
            Assert.IsTrue((testItem3 as ISignalHandler).HasValuesAt(4, 6));
            Assert.IsTrue((testItem3 as ISignalHandler).HasValuesAt(1, 6));
            Assert.IsFalse((testItem3 as ISignalHandler).HasValuesAt(3, 6));
            Assert.IsFalse((testItem3 as ISignalHandler).HasValuesAt(5, 6));
        }
        public void UTSignalFragmentAddChild2()
        {
            ISignalContainer testItem1 = new SignalFragment(0,
                                                            new List <ISignalContent> {
                new Wave(1, 0)
            }
                                                            ) as ISignalContainer;

            Assert.IsTrue(testItem1.HasValuesAt(0));
            Assert.AreEqual(testItem1.GetChildren(new List <ISignalContent>()).Count, 1);

            testItem1.AddChild(null);

            Assert.AreEqual(testItem1.GetChildren(new List <ISignalContent>()).Count, 1);
        }
        public void UTSignalFragmentGetChildrenTouching2()
        {
            ISignalContainer testItem1 = new SignalFragment(
                new List <ISignalContent> {
                new Wave(1, 0),
                new Wave(1, -3),                                       //si
                new SignalFragment(6, new List <ISignalContent> {      //si
                    new Wave(1, 3),                                    //si
                    new SignalFragment(-2, new List <ISignalContent> { //si
                        new Wave(1, -1)                                //si
                    }),
                    new SignalFragment(2, new List <ISignalContent> {
                        new Wave(1, 0),
                        new Wave(1, 2)
                    })
                }),
                new SignalFragment(24, new List <ISignalContent> { //si
                    new Wave(1, 0),
                    new Wave(1, 27)                                //si
                }),
                new SignalFragment(3, new List <ISignalContent> {
                    new Wave(1, 3)
                })
            }
                ) as ISignalContainer;

            Assert.AreEqual(3, testItem1.GetChildrenTouching(3, loopLength: 6, recursive: false).Count);

            //non-existent
            ISignalContainer testItem2 = new SignalFragment(
                new List <ISignalContent> {
                new Wave(1, 0),
                new Wave(1, -3),
                new SignalFragment(3, new List <ISignalContent> {
                    new Wave(1, 5),
                    new Wave(1, 7),
                }),
                new SignalFragment(24, new List <ISignalContent> {
                    new Wave(1, 11),
                }),
                new SignalFragment(-9, new List <ISignalContent> {
                    new Wave(1, -5),
                })
            }
                ) as ISignalContainer;

            Assert.AreEqual(0, testItem2.GetChildrenTouching(1, loopLength: 6, recursive: true).Count);
        }
        public void UTSignalFragmentGetValuesAt3()
        {
            SignalFragment testItem1 = new SignalFragment(0,
                                                          new List <ISignalContent> {
                new Wave(1, 0),
                new Wave(1, 2),
                new SignalFragment(0, new List <ISignalContent> {
                    new Wave(1, 0),
                    new Wave(1, 2)
                })
            }
                                                          );

            Assert.AreEqual(2, (testItem1 as ISignalHandler).GetValuesAt(0).Value);
            Assert.AreEqual(2, (testItem1 as ISignalHandler).GetValuesAt(2).Value);
            Assert.AreEqual(1, (testItem1 as ISignalHandler).GetValuesAt(0, recursive: false).Value);
            Assert.AreEqual(1, (testItem1 as ISignalHandler).GetValuesAt(2, recursive: false).Value);
        }
        public void UTSignalFragmentAddChildAt2()
        {
            ISignalContainer testItem1 = new SignalFragment(1,
                                                            new List <ISignalContent> {
                new Wave(1, 0)
            }
                                                            ) as ISignalContainer;
            ISignalContent testWave1 = new Wave(1, -2) as ISignalContent;

            Assert.IsTrue(testItem1.HasValuesAt(1));
            Assert.IsFalse(testItem1.HasValuesAt(3));
            Assert.AreEqual(testItem1.GetChildren(new List <ISignalContent>()).Count, 1);

            testItem1.AddChildAt(testWave1, 2, true);

            Assert.IsTrue(testItem1.HasValuesAt(1));
            Assert.IsTrue(testItem1.HasValuesAt(3));
            Assert.IsFalse(testItem1.HasValuesAt(-2));
            Assert.AreEqual(testItem1.GetChildren(new List <ISignalContent>()).Count, 2);
        }
        public void UTSignalFragmentGetValuesAt2()
        {
            SignalFragment testItem1 = new SignalFragment(0,
                                                          new List <ISignalContent> {
                new Wave(1, 0),
                new SignalFragment(-3, new List <ISignalContent> {
                    new Wave(1, 3),
                    new Wave(1, -1)
                }),
                new SignalFragment(6, new List <ISignalContent> {
                    new Wave(1, 0),
                    new Wave(1, 8),
                })
            }
                                                          );

            Assert.AreEqual(1, (testItem1 as ISignalHandler).GetValuesAt(0, loopLength: 6, recursive: false).Value);
            Assert.AreEqual(0, (testItem1 as ISignalHandler).GetValuesAt(2, loopLength: 6, recursive: false).Value);
            Assert.AreEqual(3, (testItem1 as ISignalHandler).GetValuesAt(0, loopLength: 6, recursive: true).Value);
            Assert.AreEqual(2, (testItem1 as ISignalHandler).GetValuesAt(2, loopLength: 6, recursive: true).Value);
        }
        public void UTSignalFragmentHasValuesAt1()
        {
            SignalFragment testItem1 = new SignalFragment(0,
                                                          new List <ISignalContent> {
                new Wave(0, 0),
                new Wave(2, 2)
            }
                                                          );

            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(0));
            Assert.IsTrue((testItem1 as ISignalHandler).HasValuesAt(2));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(1));
            Assert.IsFalse((testItem1 as ISignalHandler).HasValuesAt(-4));

            SignalFragment testItem2 = new SignalFragment(3,
                                                          new List <ISignalContent> {
                new Wave(8, 5),
                new Wave(1, -2)
            }
                                                          );

            Assert.IsFalse((testItem2 as ISignalHandler).HasValuesAt(-2));
            Assert.IsFalse((testItem2 as ISignalHandler).HasValuesAt(5));
            Assert.IsTrue((testItem2 as ISignalHandler).HasValuesAt(8));
            Assert.IsTrue((testItem2 as ISignalHandler).HasValuesAt(1));

            SignalFragment testItem3 = new SignalFragment(-2,
                                                          new List <ISignalContent> {
                new Wave(0, 2),
                new Wave(-4, -2),
                new Wave(5, 7)
            }
                                                          );

            Assert.IsTrue((testItem3 as ISignalHandler).HasValuesAt(0));
            Assert.IsTrue((testItem3 as ISignalHandler).HasValuesAt(-4));
            Assert.IsTrue((testItem3 as ISignalHandler).HasValuesAt(5));
            Assert.IsFalse((testItem3 as ISignalHandler).HasValuesAt(2));
            Assert.IsFalse((testItem3 as ISignalHandler).HasValuesAt(7));
        }
        public void UTSignalFragmentGetValuesAt4()
        {
            SignalFragment testItem1 = new SignalFragment(0,
                                                          new List <ISignalContent> {
                new Wave(1, 0),
                new Wave(1, 2),
                new SignalFragment(0, new List <ISignalContent> {
                    new Wave(1, 2)
                })
            }
                                                          );


            ISignalStack testCollector = new WaveStack();

            (testItem1 as ISignalHandler).GetValuesAt(0, collectorStack: testCollector);
            Assert.AreEqual(1, testCollector.Value);

            testCollector = new WaveStack();
            (testItem1 as ISignalHandler).GetValuesAt(2, collectorStack: testCollector);
            Assert.AreEqual(2, testCollector.Value);
        }
        public void UTSignalFragmentGetChildren2()
        {
            ISignalContainer testItem1 = new SignalFragment(
                new List <ISignalContent> {
                new Wave(1, 0),
                new Wave(1, 0),
                new SignalFragment(new List <ISignalContent> {
                    new Wave(1, 0),
                    new SignalFragment(new List <ISignalContent> {
                        new Wave(1, 0)
                    }),
                    new SignalFragment(new List <ISignalContent> {
                        new Wave(1, 0)
                    })
                }),
                new SignalFragment(new List <ISignalContent> {
                    new Wave(1, 0)
                })
            }
                ) as ISignalContainer;

            Assert.AreEqual(testItem1.GetChildren().Count, 10);
        }
        public void UTSignalFragmentAutoRebaseOffsets2()
        {
            ISignalContainer testItem1 = new SignalFragment(-3,
                                                            new List <ISignalContent> {
                new Wave(-6, -3),
                new Wave(-7, -4),
                new SignalFragment(-5, new List <ISignalContent> {
                    new Wave(-9, -1)
                })
            }
                                                            ) as ISignalContainer;

            Assert.AreEqual(-6, testItem1.GetValuesAt(-6).Value);
            Assert.AreEqual(-7, testItem1.GetValuesAt(-7).Value);
            Assert.AreEqual(-9, testItem1.GetValuesAt(-9).Value);

            testItem1.AutoRebaseOffsets();

            Assert.AreEqual(-6, testItem1.GetValuesAt(-6).Value);
            Assert.AreEqual(-7, testItem1.GetValuesAt(-7).Value);
            Assert.AreEqual(-9, testItem1.GetValuesAt(-9).Value);
            Assert.AreEqual(-9, (testItem1 as ISignalContent).Offset);
            Assert.AreEqual(0, (testItem1.GetChildrenTouching(-9, recursive: false)[0] as ISignalContent).Offset);
        }
        public void UTSignalFragmentAutoRebaseOffsets1()
        {
            ISignalContainer testItem1 = new SignalFragment(3,
                                                            new List <ISignalContent> {
                new Wave(6, 3),
                new Wave(7, 4),
                new SignalFragment(5, new List <ISignalContent> {
                    new Wave(9, 1)
                })
            }
                                                            ) as ISignalContainer;

            Assert.AreEqual(6, testItem1.GetValuesAt(6).Value);
            Assert.AreEqual(7, testItem1.GetValuesAt(7).Value);
            Assert.AreEqual(9, testItem1.GetValuesAt(9).Value);

            testItem1.AutoRebaseOffsets();

            Assert.AreEqual(6, testItem1.GetValuesAt(6).Value);
            Assert.AreEqual(7, testItem1.GetValuesAt(7).Value);
            Assert.AreEqual(9, testItem1.GetValuesAt(9).Value);
            Assert.AreEqual(6, (testItem1 as ISignalContent).Offset);
            Assert.AreEqual(3, (testItem1.GetChildrenTouching(9, recursive: false)[0] as ISignalContent).Offset);
        }