示例#1
0
        static void TestExpandSpace()
        {
            LifeNodeBase empty = LifeNode.EmptySpace(8);

            Debug.Assert(empty.Population == 0);
            LifeNodeBase largerSpace = empty.ExpandUniverse();

            Debug.Assert(largerSpace.Dimension == 16);
            Debug.Assert(largerSpace.Population == 0);

            empty       = LifeNode.EmptySpace(2);
            largerSpace = empty.ExpandUniverse();
            Debug.Assert(largerSpace.Population == 0);
            Debug.Assert(largerSpace.Dimension == 4);

            LifeNodeBase block = createBlock();

            largerSpace = block.ExpandUniverse();
            Debug.Assert(largerSpace.Population == 4);
            Debug.Assert(largerSpace.Dimension == 8);

            block       = LeafLifeNode.CreateNode(0x0f);
            largerSpace = block.ExpandUniverse();
            Debug.Assert(largerSpace.Equals(createBlock()));
            Debug.Assert(largerSpace.Population == 4);
            Debug.Assert(largerSpace.Dimension == 4);
        }
示例#2
0
        static LifeNode createBlock()
        {
            LeafLifeNode nw    = LeafLifeNode.CreateNode(8);
            LeafLifeNode ne    = LeafLifeNode.CreateNode(4);
            LeafLifeNode sw    = LeafLifeNode.CreateNode(2);
            LeafLifeNode se    = LeafLifeNode.CreateNode(1);
            LifeNode     block = LifeNode.CreateNode(nw, ne, sw, se);

            Debug.Assert(block.Population == 4);
            return(block);
        }
示例#3
0
        static LifeNode HorizontalLine()
        {
            LeafLifeNode leaf   = LeafLifeNode.CreateNode(3);
            LifeNode     level1 = LifeNode.CreateNode(leaf, leaf, LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(0));
            int          dim    = 4;
            LifeNode     retval = level1;

            for (int i = 0; i < 7; i++)
            {
                retval = LifeNode.CreateNode(retval, retval, LifeNode.EmptySpace(dim), LifeNode.EmptySpace(dim));
                dim    = dim * 2;
            }
            return(retval);
        }
示例#4
0
 static void TestBits()
 {
     for (int i = 0; i < 16; i++)
     {
         LeafLifeNode temp  = LeafLifeNode.CreateNode(i);
         int          count = 0;
         for (int j = 0; j < 2; j++)
         {
             for (int k = 0; k < 2; k++)
             {
                 if (temp.IsAlive(j, k))
                 {
                     count++;
                 }
             }
         }
         Debug.Assert(count == temp.Population);
     }
 }
示例#5
0
        static LifeNode Glider()
        {
            LifeNode level1 = LifeNode.CreateNode(LeafLifeNode.CreateNode(13), LeafLifeNode.CreateNode(1), LeafLifeNode.CreateNode(2), LeafLifeNode.CreateNode(0));

            return(level1);
        }
示例#6
0
        static LifeNode Blinker()
        {
            LifeNode level1 = LifeNode.CreateNode(LeafLifeNode.CreateNode(3), LeafLifeNode.CreateNode(1), LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(0));

            return(level1);
        }
示例#7
0
        static void TestTemporaryNodes()
        {
            LifeNode     block = createBlock();
            LifeNodeBase temp  = block.TemporaryCenterNode();

            Debug.Assert(temp.IsLeaf);
            Debug.Assert(temp.Population == 4);
            LifeNode w = LifeNode.CreateNode(LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(8), LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(2));
            LifeNode e = LifeNode.CreateNode(LeafLifeNode.CreateNode(4), LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(0));

            LifeNodeBase hx = LifeNode.TemporaryCenterXNode(w, e);

            Debug.Assert(hx.IsLeaf);
            Debug.Assert(hx.Population == 3);
            Debug.Assert(hx.IsAlive(0, 0));
            Debug.Assert(hx.IsAlive(1, 0));
            Debug.Assert(hx.IsAlive(0, 1));
            Debug.Assert(!hx.IsAlive(1, 1));

            LifeNode n = LifeNode.CreateNode(LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(8), LeafLifeNode.CreateNode(4));
            LifeNode s = LifeNode.CreateNode(LeafLifeNode.CreateNode(2), LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(0));

            LifeNodeBase vy = LifeNode.TemporaryCenterYNode(n, s);

            Debug.Assert(vy.IsLeaf);
            Debug.Assert(vy.Population == 3);
            Debug.Assert(vy.IsAlive(0, 0));
            Debug.Assert(vy.IsAlive(1, 0));
            Debug.Assert(vy.IsAlive(0, 1));
            Debug.Assert(!vy.IsAlive(1, 1));

            LifeNode     random = (LifeNode)LifeNode.RandomSpace(16);
            LifeNodeBase center = random.TemporaryCenterNode();

            Debug.Assert(center.Dimension == 8);
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    Debug.Assert(random.IsAlive(i + 4, j + 4) == center.IsAlive(i, j));
                }
            }
            LifeNode     random2 = (LifeNode)LifeNode.RandomSpace(16);
            LifeNodeBase centerx = LifeNode.TemporaryCenterXNode(random, random2);

            Debug.Assert(centerx.Dimension == 8);
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    Debug.Assert(random.IsAlive(i + 12, j + 4) == centerx.IsAlive(i, j));
                    Debug.Assert(random2.IsAlive(i, j + 4) == centerx.IsAlive(i + 4, j));
                }
            }

            LifeNodeBase centery = LifeNode.TemporaryCenterYNode(random, random2);

            Debug.Assert(centery.Dimension == 8);
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    Debug.Assert(random.IsAlive(i + 4, j + 12) == centery.IsAlive(i, j));
                    Debug.Assert(random2.IsAlive(i + 4, j) == centery.IsAlive(i, j + 4));
                }
            }
        }