Ejemplo n.º 1
0
        public void When_Two_Group_Do_It()
        {
            var target = GroupParser.NobiGroupParser();
            var grpA   = new BitPlane(10);

            grpA.Add(new Coords(1, 1));
            grpA.Add(new Coords(1, 2));
            grpA.Add(new Coords(1, 3));
            grpA.Add(new Coords(1, 4));

            var grpB = new BitPlane(10);

            grpB.Add(new Coords(4, 1));
            grpB.Add(new Coords(4, 2));
            grpB.Add(new Coords(4, 3));
            grpB.Add(new Coords(4, 4));

            var data = new BitPlane(10);

            data.Or(grpA);
            data.Or(grpB);

            var actual = target.Parse(data.Copy());

            Assert.AreEqual(2, actual.Count);
            BitPlaneTestHelper.AssertBitPlane(grpA, actual[0], "Group A"); //Todo Algorithm : Make to Order Tolerance
            BitPlaneTestHelper.AssertBitPlane(grpB, actual[1], "Group B");
        }
Ejemplo n.º 2
0
        public void When_Empty_BitPlane_Do_EmptyList()
        {
            var target = GroupParser.NobiGroupParser();
            var data   = new BitPlane(19);

            var actual = target.Parse(data);

            Assert.AreEqual(0, actual.Count);
        }
Ejemplo n.º 3
0
 public static void TraceBitPlane(BitPlane plane, string name)
 {
     Trace.WriteLine(name);
     for (byte i = 0; i < plane.Width; i++)
     {
         for (byte j = 0; j < plane.Height; j++)
         {
             Trace.Write(plane[i, j] ? "X" : "O");
         }
         Trace.WriteLine($"|{i}");
     }
 }
Ejemplo n.º 4
0
        private GoPlayerStat Build(BitPlane me, BitPlane all)
        {
            var ret    = new GoPlayerStat();
            var groups = _groupParser.Parse(me);

            foreach (var group in groups)
            {
                var liberties = _libertiesParser.Parse(group, all);
                ret.Groups.Add(new GroupStat(group, liberties));
            }

            return(ret);
        }
Ejemplo n.º 5
0
 private void DecompilePlaneValue(string key, BitPlane plane)
 {
     for (byte i = 0; i < plane.Width; i++)
     {
         for (byte j = 0; j < plane.Height; j++)
         {
             if (plane[i, j])
             {
                 b.p(key, DecompilePointValue(i, j));
             }
         }
     }
 }
Ejemplo n.º 6
0
        public void When_Singleton_Stones_Do_It()
        {
            var target = GroupParser.NobiGroupParser();
            var data   = new BitPlane(19);

            data.Add(new Coords(1, 1));
            data.Add(new Coords(2, 2));
            data.Add(new Coords(3, 3));
            data.Add(new Coords(4, 4));
            data.Add(new Coords(5, 5));
            var actual = target.Parse(data);

            Assert.AreEqual(5, actual.Count);
        }
Ejemplo n.º 7
0
        public BitPlane Parse(BitPlane group, BitPlane allStones)
        {
            var ret = new BitPlane(allStones.Width, allStones.Height);

            foreach (var coords in group.Unabled)
            {
                var liberties = AnalyticHelper.HortogonalCoord(coords).Where(
                    x => allStones.InOfRange(x) && !allStones[x]
                    );
                ret.AddRange(liberties);
            }

            return(ret);
        }
Ejemplo n.º 8
0
        public void When_One_Group_Do_It()
        {
            var target = GroupParser.NobiGroupParser();
            var grpA   = new BitPlane(10);

            grpA.Add(new Coords(1, 1));
            grpA.Add(new Coords(1, 2));
            grpA.Add(new Coords(1, 3));
            grpA.Add(new Coords(1, 4));

            var actual = target.Parse(grpA.Copy());

            Assert.AreEqual(1, actual.Count);
            BitPlaneTestHelper.AssertBitPlane(grpA, actual[0], "Group A");
        }
Ejemplo n.º 9
0
        public List <BitPlane> Parse(BitPlane stones)
        {
            var ret   = new List <BitPlane>();
            var scope = stones.Copy();

            while (scope.Unabled.Any())
            {
                var grp = GroupWalker(scope, scope.Unabled.First());
                var bp  = new BitPlane(stones.Width, stones.Height);
                bp.AddRange(grp);
                ret.Add(bp);
            }

            return(ret);
        }
Ejemplo n.º 10
0
        private IEnumerable <ICoords> GroupWalker(BitPlane scope, ICoords fuse)
        {
            var todo = new List <ICoords>();

            todo.Add(fuse);

            while (todo.Any())
            {
                var target = todo.First();
                yield return(target);

                scope.Remove(target);
                todo.Remove(target);
                todo.AddRange(_walk(scope, target));
            }
        }
Ejemplo n.º 11
0
        public void When_Corner_Do_Two()
        {
            var target = new LibertiesParser();

            var data = new BitPlane(11);

            data.Add(new Coords(0, 0));

            var actual   = target.Parse(data, data);
            var excepted = new BitPlane(11);

            excepted.Add(new Coords(0, 1));
            excepted.Add(new Coords(1, 0));

            BitPlaneTestHelper.AssertBitPlane(excepted, actual, "Corner");
        }
Ejemplo n.º 12
0
        public void When_Tengen_Do_Four()
        {
            var target = new LibertiesParser();

            var data = new BitPlane(11);

            data.Add(new Coords(5, 5));

            var actual   = target.Parse(data, data);
            var excepted = new BitPlane(11);

            excepted.Add(new Coords(4, 5));
            excepted.Add(new Coords(6, 5));
            excepted.Add(new Coords(5, 4));
            excepted.Add(new Coords(5, 6));

            BitPlaneTestHelper.AssertBitPlane(excepted, actual, "Tengen");
        }
Ejemplo n.º 13
0
        private static string DecompilePlaneValue(BitPlane plane)
        {
            var result = new StringBuilder();

            for (byte i = 0; i < plane.Width; i++)
            {
                for (byte j = 0; j < plane.Height; j++)
                {
                    if (plane[i, j])
                    {
                        result.Append('[');
                        result.Append(Convert.ToChar(i + 'a').ToString());
                        result.Append(Convert.ToChar(j + 'a').ToString());
                        result.Append(']');
                    }
                }
            }
            return(result.ToString());
        }
Ejemplo n.º 14
0
        public static void AssertBitPlane(BitPlane excepted, BitPlane actual, string message)
        {
            var compare = excepted.Copy();

            compare.Xor(actual);

            if (!compare.Empty())
            {
                Trace.WriteLine(message);
                TraceBitPlane(actual, "actual :");
                TraceBitPlane(excepted, "excepted :");
                TraceBitPlane(compare, "Errors :");
                Assert.Fail("See Trace");
            }
            else
            {
                TraceBitPlane(actual, "Ok!");
            }
        }
Ejemplo n.º 15
0
        public void When_Atari_Do_Zero()
        {
            var target = new LibertiesParser();

            var grp = new BitPlane(11);

            grp.Add(new Coords(5, 5));

            var all = new BitPlane(11);

            all.Add(new Coords(5, 5));
            all.Add(new Coords(4, 5));
            all.Add(new Coords(6, 5));
            all.Add(new Coords(5, 4));
            all.Add(new Coords(5, 6));

            var actual   = target.Parse(grp, all);
            var excepted = new BitPlane(11);

            BitPlaneTestHelper.AssertBitPlane(excepted, actual, "Atari");
        }
Ejemplo n.º 16
0
 public GroupStat(BitPlane stones, BitPlane liberties)
 {
     Stones    = stones;
     Liberties = liberties;
 }
Ejemplo n.º 17
0
 public static IEnumerable <ICoords> NobiWalk(BitPlane scope, ICoords target)
 {
     return(HortogonalCoord(target).Where(x => scope.InOfRange(x) && scope[x]));
 }