Example #1
0
//--------------------------------------------------------------------------------------------------
//  Create/sort search sets according to radii
//--------------------------------------------------------------------------------------------------
        private void GenerateSearchSets()
        {
            for (int i = 0; i < m_Radius + 1; i++)
            {
                m_SearchSets[i] = new SearchSet(i);

                for (int y = -m_Radius; y < m_Radius + 1; y++)
                {
                    for (int x = -m_Radius; x < m_Radius + 1; x++)
                    {
                        CircleEntry entry = m_Matrices[i, y + m_Radius, x + m_Radius];

                        if (entry == null)
                        {
                            continue;
                        }
                        if (entry.Distance > m_Radius)
                        {
                            continue;
                        }

                        m_SearchSets[i].AddEntry(entry);

                        m_nEntries++;
                    }
                }
            }
        }
Example #2
0
//--------------------------------------------------------------------------------------------------
//  Debugging
//--------------------------------------------------------------------------------------------------
        public void DumpMatrices( )
        {
            Console.WriteLine("\n");
            for (int i = 0; i < m_Radius + 1; i++)
            {
                for (int y = -m_Radius; y < m_Radius + 1; y++)
                {
                    for (int x = -m_Radius; x < m_Radius + 1; x++)
                    {
                        CircleEntry entry = m_Matrices[i, y + m_Radius, x + m_Radius];

                        if (entry == null)
                        {
                            Console.Write("-- ");
                        }
                        else
                        {
                            Console.Write("{0:00} ", entry.Distance);
                        }
                    }
                    Console.WriteLine("");
                }
                Console.WriteLine("\n");
            }
        }
Example #3
0
        private void AddMatrixEntry(int i, int x, int y)
        {
            double      theta = Trig.Theta(x, y);
            CircleEntry entry = new CircleEntry(x, y, theta);

            m_Matrices[i, y + m_Radius, x + m_Radius] = entry;
        }
Example #4
0
 public void CircleEntry_Clear_Test()
 {
     int count = 100;
     int[] reff = count.Repeat (i => i).ToArray ();
     CircleEntry<int> circle = new CircleEntry<int> (reff);
     Assert.AreEqual (reff.Length, circle.Count);
     circle.Clear ();
     Assert.AreEqual (1, circle.Count);
 }
Example #5
0
 public void CircleEntry_Constructor_Tests()
 {
     int[] arr = new int[] { 0, 1, 2, 3, 4, 5, 6, 7,	8, 9 };
     CircleEntry<int> start = new CircleEntry<int> (arr);
     for (int n = 0; n < 10; n++) {
         Assert.AreEqual (n, start.Value);
         start = start.Next;
     }
     for (int n = 0; n < 10; n++) {
         Assert.AreEqual (n, start.Value);
         start ++;
     }
     start --;
     for (int n = 9; n >= 0; n--) {
         Assert.AreEqual (n, start.Value);
         start --;
     }
 }
Example #6
0
        public void CircleEntry_Find_Test()
        {
            int count = 100;
            int[] reff = count.Repeat (i => i).ToArray ();
            CircleEntry<int> circle = new CircleEntry<int> (reff);

            foreach (int searchFor in count.Range ()) {
                Assert.IsTrue (circle.Contains (searchFor));

                Assert.AreEqual (searchFor, circle.Find (searchFor).At (0));
                Assert.AreEqual (searchFor, circle.Find (t => t == searchFor).At (0));

                IEnumerable<CircleEntry<int>> found1;
                Assert.IsTrue (circle.Contains (searchFor, out found1));
                Assert.AreEqual (searchFor, found1.At (0));
                Assert.IsTrue (circle.Contains (t => t == searchFor, out found1));
                Assert.AreEqual (searchFor, found1.At (0));

                CircleEntry<int> found2;
                Assert.IsTrue (circle.Contains (searchFor, out found2));
                Assert.AreEqual (searchFor, found2);
                Assert.IsTrue (circle.Contains (t => t == searchFor, out found2));
                Assert.AreEqual (searchFor, found2);

                if (found2 != circle) {
                    circle.Remove (searchFor);
                    Assert.IsFalse (circle.Contains (searchFor, out found1));
                    Assert.IsNull (found1.At (0));
                    Assert.IsFalse (circle.Contains (t => t == searchFor, out found1));
                    Assert.IsNull (found1.At (0));
                }
            }
            foreach (int searchFor in count.Range ().Skip (1)) {
                circle.Remove (searchFor);
            }

            Assert.AreEqual (1, circle.Count);
        }
Example #7
0
 public void CircleEntry_CopyTo_Test()
 {
     int count = 100;
     int[] reff = count.Repeat (i => i).ToArray ();
     CircleEntry<int> circle = new CircleEntry<int> (reff);
     int[] copy = count.Repeat (i => -1).ToArray ();
     circle.CopyTo (copy, 0);
     count.Repeat (i => Assert.AreEqual (reff [i], copy [i]));
 }
Example #8
0
        public void CircleEntry_Implicit_Test()
        {
            int count = 100;
            int[] reff = count.Repeat (i => i).ToArray ();
            CircleEntry<int> circle = new CircleEntry<int> (reff);

            // []-Operator
            count.Repeat (i => Assert.AreEqual (circle [i], i));
            // .Value
            count.Repeat (i => Assert.AreEqual ((circle + i).Value, i));
            // Implicit Cast
            count.Repeat (i => Assert.AreEqual ((int)(circle + i), i));
        }
Example #9
0
 private void AddMatrixEntry( int i, int x, int y )
 {
     double  theta = Trig.Theta( x, y );
     CircleEntry   entry = new CircleEntry(  x, y, theta );
     m_Matrices[i,y+m_Radius,x+m_Radius] = entry;
 }
Example #10
0
 public void CircleEntry_ToCircle_Test()
 {
     int[] reff = new int[] { 2, 6, 4, 5, 8, 7, 3, 1, 0, 9 };
     CircleEntry<int> circle1 = new CircleEntry<int> (reff);
     CircleEntry<int> circle2 = reff.ToCircle ();
     reff.Length.Repeat (i => Assert.AreEqual (circle1 [i], circle2 [i]));
 }
Example #11
0
        public void CircleEntry_Set_Test()
        {
            int count = 100;
            int[] reff = count.Repeat (i => i).ToArray ();
            CircleEntry<int> circle = new CircleEntry<int> (reff);

            count.Repeat (i => Assert.AreEqual (i + 50, circle [i] = i + 50));
        }
Example #12
0
        public void CircleEntry_RemoveAt_Test()
        {
            int count = 100;
            int[] reff = count.Repeat (i => i).ToArray ();
            CircleEntry<int> circle = new CircleEntry<int> (reff);

            Assert.IsTrue (circle.Contains (5));
            circle.RemoveAt (5);
            Assert.IsFalse (circle.Contains (5));
        }
Example #13
0
 public void CircleEntry_RandomAccess_Test()
 {
     int[] reff = new int[] { 2, 6, 4, 5, 8, 7, 3, 1, 0, 9 };
     CircleEntry<int> circle = new CircleEntry<int> (reff);
     foreach (int n in reff) {
         Assert.AreEqual (circle [n], reff [n]);
         Assert.AreEqual ((circle + n).Value, reff [n]);
     }
 }
Example #14
0
 public void CircleEntry_InterfaceNonsense_Test()
 {
     int count = 100;
     int[] reff = count.Repeat (i => i).ToArray ();
     CircleEntry<int> circle = new CircleEntry<int> (reff);
     Assert.IsFalse (circle.IsReadOnly);
 }
Example #15
0
 public void CircleEntry_Insert_Test()
 {
     CircleEntry<int> start = new CircleEntry<int> (new int[] {1});
     start.InsertBefore (0);
     start.InsertAfter (2);
     start = start.Previous;
     for (int n = 0; n < 3; n++) {
         Assert.AreEqual (start.Value, n);
         start = start.Next;
     }
     start.InsertBefore (3);
     for (int n = 0; n < 4; n++) {
         Assert.AreEqual (start.Value, n);
         start = start.Next;
     }
 }
Example #16
0
        public void CircleEntry_IndexOf_Test()
        {
            int count = 100;
            int[] reff = count.Repeat (i => i).ToArray ();
            CircleEntry<int> circle = new CircleEntry<int> (reff);

            count.Repeat (i => Assert.AreEqual (i, circle.IndexOf (i)));
            count.Repeat (i => Assert.AreEqual (i, circle.IndexOf (j => j == i)));
        }
Example #17
0
 public void AddEntry(CircleEntry entry)
 {
     m_Entries.Add(entry.Theta, entry);
 }
Example #18
0
 public void CircleEntry_ToString_Test()
 {
     int[] reff = new int[] { 2, 6, 4, 5, 8, 7, 3, 1, 0, 9 };
     CircleEntry<int> circle = new CircleEntry<int> (reff);
     Assert.IsNotEmpty (circle.ToString ());
     circle = CircleEntry<int>.Empty;
     Assert.IsNotEmpty (circle.ToString ());
 }
Example #19
0
 public void AddEntry( CircleEntry entry )
 {
     m_Entries.Add( entry.Theta, entry );
 }
Example #20
0
 public void Knot_Equals_Test()
 {
     CircleEntry<Edge> start = new CircleEntry<Edge> (new Edge[] {
         Edge.Up,
         Edge.Left,
         Edge.Backward,
         Edge.Down,
         Edge.Right,
         Edge.Forward
     }
                                                     );
     KnotMetaData metaData = new KnotMetaData (name: "test", countEdges: () => start.Count ());
     Knot knot = new Knot (metaData, start);
     for (int i = 0; i < 6; i++) {
         Assert.IsTrue (knot.Equals (new Knot (metaData, start)));
         start = start.Previous;
     }
     start.InsertBefore (Edge.Forward);
     start.InsertAfter (Edge.Backward);
     for (int i = 0; i < 6; i++) {
         Assert.IsFalse (knot.Equals (new Knot (metaData, start)));
         start = start.Previous;
     }
 }