示例#1
0
文件: Scatter.cs 项目: Yinzhe-Qi/RPS
        /// <summary>
        /// 线段类的单元测试
        /// </summary>
        /// <param name="epsilon"></param>
        /// <returns></returns>
        public static string RunTest(double epsilon = 1e-3)
        {
            DateTime time = DateTime.Now;
            StringBuilder sb = new StringBuilder("Scatter Class Test Begin at " + time.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
            test_log.Add(time, "");

            //test IsSegmentsLegal
            sb.AppendLine("----------------------------");
            sb.AppendLine("IsSegmentsLegal test 1");
            LineSegment[] segs = null;
            Debug.Assert(new Scatter().IsSegmentsLegal(segs) == false, "result should be false");
            sb.AppendLine("IsSegmentsLegal test 2");
            segs = new LineSegment[] { new LineSegment(new Point(0, 0), new Point(1, 1)) };
            Debug.Assert(new Scatter().IsSegmentsLegal(segs) == false, "result should be false");
            sb.AppendLine("IsSegmentsLegal test 3");
            segs = new LineSegment[] { new LineSegment(new Point(0, 0), new Point(1, 1)), 
                                       new LineSegment(new Point(1, 1), new Point(1, 0)), 
                                       new LineSegment(new Point(1, 0), new Point(0, 0)) };
            Debug.Assert(new Scatter().IsSegmentsLegal(segs) == true, "result should be true");
            sb.AppendLine("IsSegmentsLegal test 4");
            segs = new LineSegment[] { new LineSegment(new Point(0, 0), new Point(0, 1)),
                                       new LineSegment(new Point(0, 1), new Point(1, 1)),
                                       new LineSegment(new Point(1, 1), new Point(1, 0)), 
                                       new LineSegment(new Point(1, 0), new Point(0, 0)) };
            Debug.Assert(new Scatter().IsSegmentsLegal(segs) == true, "result should be true");
            sb.AppendLine("IsSegmentsLegal test 5");
            segs = new LineSegment[] { new LineSegment(new Point(0, 0), new Point(0, 1)),
                                       new LineSegment(new Point(1, 1), new Point(1, 0)), 
                                       new LineSegment(new Point(1, 0), new Point(0, 0)) };
            Debug.Assert(new Scatter().IsSegmentsLegal(segs) == false, "result should be false");
            sb.AppendLine("IsSegmentsLegal test 6");
            segs = new LineSegment[] { new LineSegment(new Point(0, 0), new Point(0, 1)),
                                       new LineSegment(new Point(0, 1), new Point(1, 1)),
                                       new LineSegment(new Point(1, 1), new Point(1, 0)), 
                                       new LineSegment(new Point(1, 0), new Point(0, 0)),
                                       new LineSegment(new Point(0, 0), new Point(0, 1)) };
            Debug.Assert(new Scatter().IsSegmentsLegal(segs) == false, "result should be false");
            sb.AppendLine("IsSegmentsLegal test 7");
            segs = new LineSegment[] { new LineSegment(new Point(0, 0), new Point(0, 1)),
                                       new LineSegment(new Point(0, 1), new Point(1, 1)),
                                       new LineSegment(new Point(1, 1), new Point(1, 0)), 
                                       new LineSegment(new Point(1, 0), new Point(0, 0)),
                                       new LineSegment(new Point(0, 0), new Point(2, 1)) };
            Debug.Assert(new Scatter().IsSegmentsLegal(segs) == false, "result should be false");
            sb.AppendLine("IsSegmentsLegal test 8");
            segs = new LineSegment[] { new LineSegment(new Point(0, 0), new Point(0, 2)),
                                       new LineSegment(new Point(0, 2), new Point(1, 2)),
                                       new LineSegment(new Point(1, 2), new Point(1, 4)), 
                                       new LineSegment(new Point(1, 4), new Point(0, 4)),
                                       new LineSegment(new Point(0, 4), new Point(0, 6)),
                                       new LineSegment(new Point(0, 6), new Point(2, 6)),
                                       new LineSegment(new Point(2, 6), new Point(2, 4)),
                                       new LineSegment(new Point(2, 4), new Point(4, 4)),
                                       new LineSegment(new Point(4, 4), new Point(4, 2)),
                                       new LineSegment(new Point(4, 2), new Point(2, 2)), 
                                       new LineSegment(new Point(2, 2), new Point(2, 0)), 
                                       new LineSegment(new Point(2, 0), new Point(0, 0))};
            Debug.Assert(new Scatter().IsSegmentsLegal(segs) == true, "result should be true");
            sb.AppendLine("IsSegmentsLegal test 9");
            Point[] pts = new Point[] { new Point(0, 0), new Point(0, 2),
                                        new Point(1, 2),
                                        new Point(1, 4), 
                                        new Point(0, 4),
                                        new Point(0, 6),
                                        new Point(2, 6),
                                        new Point(2, 4),
                                        new Point(4, 4),
                                        new Point(4, 2),
                                        new Point(2, 2), 
                                        new Point(2, 0) };
            Scatter s = new Scatter(pts);

            //test BorderRect
            sb.AppendLine("----------------------------");
            LineSegment[] sgs = new LineSegment[] { new LineSegment(new Point(0, 0), new Point(0, 2)),
                                                   new LineSegment(new Point(0, 2), new Point(1, 2)),
                                                   new LineSegment(new Point(1, 2), new Point(1, 4)), 
                                                   new LineSegment(new Point(1, 4), new Point(0, 4)),
                                                   new LineSegment(new Point(0, 4), new Point(0, 6)),
                                                   new LineSegment(new Point(0, 6), new Point(2, 6)),
                                                   new LineSegment(new Point(2, 6), new Point(2, 4)),
                                                   new LineSegment(new Point(2, 4), new Point(4, 4)),
                                                   new LineSegment(new Point(4, 4), new Point(4, 2)),
                                                   new LineSegment(new Point(4, 2), new Point(2, 2)), 
                                                   new LineSegment(new Point(2, 2), new Point(2, 0)), 
                                                   new LineSegment(new Point(2, 0), new Point(0, 0))};
            s = new Scatter(sgs, SCATTER_SEG_DIRECTION.ANTI_CLOCKWISE);
            sb.AppendLine("BorderRect test 1");
            Debug.Assert(s.BorderRect == new Rectangle(0, 0, 4, 6), "rect should be (0, 0, 4, 6)");
            sb.AppendLine("BorderRect test 2");
            sgs = new LineSegment[] { new LineSegment(new Point(2, 0), new Point(0, 2)),
                                    new LineSegment(new Point(0, 2), new Point(2, 4)),
                                    new LineSegment(new Point(2, 4), new Point(4, 2)), 
                                    new LineSegment(new Point(4, 2), new Point(2, 0)) };
            s = new Scatter(sgs, SCATTER_SEG_DIRECTION.ANTI_CLOCKWISE);
            Debug.Assert(s.BorderRect == new Rectangle(0, 0, 4, 4), "rect should be (0, 0, 4, 4)");

            //test GetClosestReflectionPoint
            sb.AppendLine("----------------------------");
            sgs = new LineSegment[] { new LineSegment(new Point(0, 0), new Point(0, 2)),
                                    new LineSegment(new Point(0, 2), new Point(1, 2)),
                                    new LineSegment(new Point(1, 2), new Point(1, 4)), 
                                    new LineSegment(new Point(1, 4), new Point(0, 4)),
                                    new LineSegment(new Point(0, 4), new Point(0, 6)),
                                    new LineSegment(new Point(0, 6), new Point(2, 6)),
                                    new LineSegment(new Point(2, 6), new Point(2, 4)),
                                    new LineSegment(new Point(2, 4), new Point(4, 4)),
                                    new LineSegment(new Point(4, 4), new Point(4, 2)),
                                    new LineSegment(new Point(4, 2), new Point(2, 2)), 
                                    new LineSegment(new Point(2, 2), new Point(2, 0)), 
                                    new LineSegment(new Point(2, 0), new Point(0, 0))};
            s = new Scatter(sgs, SCATTER_SEG_DIRECTION.ANTI_CLOCKWISE);
            LineSegment ss;
            sb.AppendLine("GetClosestReflectionPoint test 1");
            LineSegment seg = new LineSegment(new Point(0, 10), new Point(10, 10));
            Debug.Assert(s.GetClosestReflectionPoint(seg, out ss) == null && ss == null, "point should be null");
            sb.AppendLine("GetClosestReflectionPoint test 2");
            seg = new LineSegment(new Point(0, 2), new Point(8, 2));
            //Point? aaa = s.GetClosestReflectionPoint(seg, out ss);
            //Debug.Assert(aaa.Value == new Point(0, 2));
            Debug.Assert(s.GetClosestReflectionPoint(seg, out ss) == new Point(0, 2), "point should be (0, 2)");

            test_log[time] = sb.ToString();
            return test_log[time];
        }