Ejemplo n.º 1
0
        public void RestoreWay()
        {
            var startPoint = new ObjectPoint(0, 0, ObjectType.StartPoint);
            var endPoint   = new ObjectPoint(2, 2, ObjectType.EndPoint);

            //   0      1     2      3      |
            //------------------------------+---
            //  (a)0  (-)1   (-)2   (x)'    | 0
            //  (-)1  (x)'   (-)3   (-)4    | 1
            //  (-)2  (x)'   (b)4   (x)'    | 2
            WaveObject[,] area = new WaveObject[3, 4]
            {
                { new WaveObject(value: 0, type: ObjectType.StartPoint),        // -- 0,0
                  new WaveObject(value: 1, type: ObjectType.None),              //    0,1
                  new WaveObject(value: 2, type: ObjectType.None),              //    0,2
                  new WaveObject(value: null, type: ObjectType.Block) },        //    0,3
                { new WaveObject(value: 1, type: ObjectType.None),              // -- 1,0
                  new WaveObject(value: null, type: ObjectType.Block),          //    1,1
                  new WaveObject(value: 3, type: ObjectType.None),              //    1,2
                  new WaveObject(value: 4, type: ObjectType.None) },            //    1,3
                { new WaveObject(value: 2, type: ObjectType.None),              // -- 2,0
                  new WaveObject(value: null, type: ObjectType.Block),          //    2,1
                  new WaveObject(value: 4, type: ObjectType.EndPoint),          //    2,2
                  new WaveObject(value: null, type: ObjectType.Block) }         //    2,3
            };
            // x,y
            // 0,0 -> 0,1 -> 0,2 -> 1,2 -> 2,2
            List <ObjectPoint> expectedResult = new List <ObjectPoint>()
            {
                new ObjectPoint {
                    X = 0, Y = 1, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 0, Y = 2, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 1, Y = 2, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 2, Y = 2, Obj = ObjectType.EndPoint
                }
            };

            List <ObjectPoint> path = WaveAlgLee.RestoreWay(area, startPoint, endPoint);

            if (path.Count == 0)
            {
                Assert.Fail("Result path list count 0 elements");
            }
            for (int i = 0; i < path.Count; i++)
            {
                Assert.AreEqual(expectedResult[i], path[i]);
            }
        }
Ejemplo n.º 2
0
        public void RestoreWay_WxH_10x5()
        {
            //  0   1   2   3   4   5   6   7   8   9   |
            //------------------------------------------+---
            //  a   '   '   x   '   '   '   '   '   '   | 0
            //  '   x   '   '   x   x   '   '   x   '   | 1
            //  '   x   x   x   '   '   '   x   x   '   | 2
            //  '   '   '   '   '   '   '   x   '   '   | 3
            //  '   x   '   x   '   '   x   '   b   x   | 4
            //------------------------------------------+---
            //  0   1   2   3   4   5   6   7   8   9   |
            //------------------------------------------+---
            //  a0  1   2   x   14  13  12  13  14  15  | 0
            //  1   x   3   4   x   x   11  12  x   16  | 1
            //  2   x   x   x   8   9   10  x   x   17  | 2
            //  3   4   5   6   7   8   9   x   19  18  | 3
            //  4   x   6   x   8   9   x   '   b20 x   | 4
            //------------------------------------------+---
            //  0   1   2   3   4   5   6   7   8   9   |
            WaveObject[,] area = new WaveObject[10, 5]
            {
                { new WaveObject(value: 0, type: ObjectType.StartPoint),            // -- 0,0
                  new WaveObject(value: 1, type: ObjectType.None),                  //    0,1
                  new WaveObject(value: 2, type: ObjectType.None),                  //    0,2
                  new WaveObject(value: 3, type: ObjectType.None),                  //    0,3
                  new WaveObject(value: 4, type: ObjectType.None) },                //    0,4
                { new WaveObject(value: 1, type: ObjectType.StartPoint),            // -- 1,0
                  new WaveObject(value: null, type: ObjectType.Block),              //    1,1
                  new WaveObject(value: null, type: ObjectType.Block),              //    1,2
                  new WaveObject(value: 4, type: ObjectType.None),                  //    1,3
                  new WaveObject(value: null, type: ObjectType.Block) },            //    2,4
                { new WaveObject(value: 2, type: ObjectType.None),                  // -- 2,0
                  new WaveObject(value: 3, type: ObjectType.None),                  //    2,1
                  new WaveObject(value: null, type: ObjectType.Block),              //    2,2
                  new WaveObject(value: 5, type: ObjectType.None),                  //    2,3
                  new WaveObject(value: 6, type: ObjectType.None) },                //    2,4
                { new WaveObject(value: null, type: ObjectType.Block),              // -- 3,0
                  new WaveObject(value: 4, type: ObjectType.None),                  //    3,1
                  new WaveObject(value: null, type: ObjectType.Block),              //    3,2
                  new WaveObject(value: 6, type: ObjectType.None),                  //    3,3
                  new WaveObject(value: null, type: ObjectType.Block) },            //    3,4
                { new WaveObject(value: 14, type: ObjectType.None),                 // -- 4,0
                  new WaveObject(value: null, type: ObjectType.Block),              //    4,1
                  new WaveObject(value: 8, type: ObjectType.None),                  //    4,2
                  new WaveObject(value: 7, type: ObjectType.None),                  //    4,3
                  new WaveObject(value: 8, type: ObjectType.None) },                //    4,4
                { new WaveObject(value: 13, type: ObjectType.None),                 // -- 5,0
                  new WaveObject(value: null, type: ObjectType.Block),              //    5,1
                  new WaveObject(value: 9, type: ObjectType.None),                  //    5,2
                  new WaveObject(value: 8, type: ObjectType.None),                  //    5,3
                  new WaveObject(value: 9, type: ObjectType.None) },                //    5,4
                { new WaveObject(value: 12, type: ObjectType.None),                 // -- 6,0
                  new WaveObject(value: 11, type: ObjectType.None),                 //    6,1
                  new WaveObject(value: 10, type: ObjectType.None),                 //    6,2
                  new WaveObject(value: 9, type: ObjectType.None),                  //    6,3
                  new WaveObject(value: null, type: ObjectType.Block) },            //    6,4
                { new WaveObject(value: 13, type: ObjectType.None),                 // -- 7,0
                  new WaveObject(value: 12, type: ObjectType.None),                 //    7,1
                  new WaveObject(value: null, type: ObjectType.Block),              //    7,2
                  new WaveObject(value: null, type: ObjectType.Block),              //    7,3
                  new WaveObject(value: null, type: ObjectType.None) },             //    7,4
                { new WaveObject(value: 14, type: ObjectType.None),                 // -- 8,0
                  new WaveObject(value: null, type: ObjectType.Block),              //    8,1
                  new WaveObject(value: null, type: ObjectType.Block),              //    8,2
                  new WaveObject(value: 19, type: ObjectType.None),                 //    8,3
                  new WaveObject(value: 20, type: ObjectType.EndPoint) },           //    8,4
                { new WaveObject(value: 15, type: ObjectType.None),                 // -- 9,0
                  new WaveObject(value: 16, type: ObjectType.None),                 //    9,1
                  new WaveObject(value: 17, type: ObjectType.None),                 //    9,2
                  new WaveObject(value: 18, type: ObjectType.None),                 //    9,3
                  new WaveObject(value: null, type: ObjectType.Block) }             //    9,4
            };
            //  0   1   2   3   4   5   6   7   8   9   |
            //------------------------------------------+---
            //  a0  1   2   x   14  13  12  13  14  15  | 0
            //  1   x   3   4   x   x   11  12  x   16  | 1
            //  2   x   x   x   8   9   10  x   x   17  | 2
            //  3   4   5   6   7   8   9   x   19  18  | 3
            //  4   x   6   x   8   9   x   '   b20 x   | 4
            //------------------------------------------+---
            //  0   1   2   3   4   5   6   7   8   9   |

            var startPoint = new ObjectPoint(0, 0, ObjectType.StartPoint);
            var endPoint   = new ObjectPoint(8, 4, ObjectType.EndPoint);

            // x,y
            // 1,0 -> 2,0 -> 3,0 -> 3,1 -> 3,2 -> 3,3 -> 3,4 -> 3,5
            List <ObjectPoint> expectedResult = new List <ObjectPoint>()
            {
                new ObjectPoint {
                    X = 0, Y = 1, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 0, Y = 2, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 0, Y = 3, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 1, Y = 3, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 2, Y = 3, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 3, Y = 3, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 4, Y = 3, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 5, Y = 3, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 6, Y = 3, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 6, Y = 2, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 6, Y = 1, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 7, Y = 1, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 7, Y = 0, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 8, Y = 0, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 9, Y = 0, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 9, Y = 1, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 9, Y = 2, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 9, Y = 3, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 8, Y = 3, Obj = ObjectType.None
                },
                new ObjectPoint {
                    X = 8, Y = 4, Obj = ObjectType.EndPoint
                }
            };

            List <ObjectPoint> path = WaveAlgLee.RestoreWay(area, startPoint, endPoint);

            if (path.Count == 0)
            {
                Assert.Fail("Result path list count 0 elements");
            }
            for (int i = 0; i < path.Count; i++)
            {
                Assert.AreEqual(expectedResult[i], path[i]);
            }
        }