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); }
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); }
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); }
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); } }
static LifeNode Glider() { LifeNode level1 = LifeNode.CreateNode(LeafLifeNode.CreateNode(13), LeafLifeNode.CreateNode(1), LeafLifeNode.CreateNode(2), LeafLifeNode.CreateNode(0)); return(level1); }
static LifeNode Blinker() { LifeNode level1 = LifeNode.CreateNode(LeafLifeNode.CreateNode(3), LeafLifeNode.CreateNode(1), LeafLifeNode.CreateNode(0), LeafLifeNode.CreateNode(0)); return(level1); }
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)); } } }