Exemple #1
0
        public void CommentTest2()
        {
            var text = SampleKif.CommentKif;

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(text);

            Assert.NotNull(kifu);
            Assert.Null(kifu.Error);

            // 手数の確認
            var count = 134;

            Assert.AreEqual(count, kifu.MoveList.Count());

            // コメントの確認
            var commentList = SampleKif.GetCommentList(SampleKif.CommentKif);

            for (var node = kifu.RootNode; node != null; node = node.NextNode)
            {
                Assert.AreEqual(commentList[node.MoveCount], node.Comment);
            }

            // 入出力テストを行います。
            TestUtil.ReadWriteTest(kifu, KifuFormat.Kif, count);
        }
Exemple #2
0
        /// <summary>
        /// 棋譜の読み込みテストを行います。
        /// </summary>
        private static void TestKif(string path)
        {
            var text = string.Empty;

            using (var reader = new StreamReader(path, KifuObject.DefaultEncoding))
            {
                text = reader.ReadToEnd();
            }

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(text);

            Assert.NotNull(kifu);

            // 手数を取得
            var countObj = GetMoveCount(text);

            Assert.NotNull(countObj);

            var count = countObj.Value + (kifu.Error != null ? -2 : -1);

            Assert.LessOrEqual(count, kifu.MoveList.Count());

            // 入出力テストを行います。
            TestUtil.ReadWriteTest(kifu, KifuFormat.Kif, count);
        }
Exemple #3
0
        public void NormalTest()
        {
            var content =
                "V2.2\n" +
                "N+大橋宗桂\n" +
                "N-本因坊算砂\n" +
                "PI\n+\n" +
                "+7776FU\n-3334FU\n+6766FU\n-7162GI\n+7978GI\n\n" +
                "-5354FU\n+5756FU\n-3142GI\n+7867GI\n-6253GI\n\n" +
                "+3948GI\n-4344FU\n+4746FU\n-4243GI\n+4857GI\n\n" +
                "-3435FU\n+2726FU\n-4334GI\n+2625FU\n-2233KA\n\n" +
                "+4938KI\n-8222HI\n+3847KI\n-5162OU\n+5968OU\n\n" +
                "-6272OU\n+6878OU\n-4152KI\n+6968KI\n-3351KA\n\n" +
                "+6665FU\n-2324FU\n+2524FU\n-5124KA\n+3736FU\n\n" +
                "-0025FU\n+3635FU\n-2435KA\n+4736KI\n-3526KA\n\n" +
                "+0027FU\n-2659UM\n+4645FU\n-2133KE\n+4544FU\n\n" +
                "-0035FU\n+3646KI\n-2526FU\n+2726FU\n-5926UM\n\n" +
                "+0036FU\n-2627UM\n+2848HI\n-3536FU\n+0035FU\n\n" +
                "-3425GI\n+0023FU\n-2223HI\n+4443TO\n-5243KI\n\n" +
                "+4636KI\n-0044FU\n+3637KI\n-2745UM\n+4828HI\n\n" +
                "-0026FU\n+5746GI\n-4342KI\n+4645GI\n-3345KE\n\n" +
                "+3746KI\n-2627TO\n+2827HI\n-2526GI\n+2747HI\n\n" +
                "-0038GI\n+4748HI\n-4537NK\n+2937KE\n-2637GI\n\n" +
                "%TORYO\n";

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(content);

            Assert.NotNull(kifu);

            // 書き込みテスト
            var kif = KifuWriter.WriteTo(kifu, KifuFormat.Csa);

            CompareCsaKif(content, kif, true);
        }
Exemple #4
0
        public void CommentTest2()
        {
            var sample = SampleKif.Get("Kif_Comment.kif");

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(sample);

            Assert.NotNull(kifu);
            Assert.Null(kifu.Error);

            // 手数の確認
            var count = 134;

            Assert.AreEqual(count, kifu.MoveList.Count());

            // コメントの確認
            var commentList = SampleKif.GetCommentList(sample);

            for (var node = kifu.RootNode; node != null; node = node.NextNode)
            {
                if (commentList[node.MoveCount] == null)
                {
                    Assert.False(node.CommentList.Any());
                }
                else
                {
                    Assert.AreEqual(commentList[node.MoveCount], node.CommentList);
                }
            }

            // 入出力テストを行います。
            TestUtil.ReadWriteTest(kifu, KifuFormat.Kif, count);
        }
Exemple #5
0
        public void FlipPiecesTest()
        {
            var bod1 =
                "後手の持駒:飛 桂 香 歩三 \n" +
                "  9 8 7 6 5 4 3 2 1\n" +
                "+---------------------------+\n" +
                "|v香 ・ 龍 ・ ・ ・ ・ ・ ・|一\n" +
                "| ・ ・ ・ ・v玉 ・ ・ ・ ・|二\n" +
                "| ・ 香v歩 ・v金 ・v桂 ・ ・|三\n" +
                "| ・ 歩v銀v銀v金 ・ ・ 銀 ・|四\n" +
                "| 歩 ・ ・ ・ ・ 歩 歩 ・ ・|五\n" +
                "| 香 ・ 歩 ・ 馬 ・ ・ ・v歩|六\n" +
                "|v歩 ・ 桂 金 ・ ・ ・ ・ ・|七\n" +
                "| ・ 玉 銀 金 ・ ・ 馬 ・ ・|八\n" +
                "| ・ ・ ・ ・ ・ ・ ・ ・ ・|九\n" +
                "+---------------------------+\n" +
                "先手の持駒:桂 歩七 ";
            var bod2 =
                "後手の持駒:桂 歩七 \n" +
                "  9 8 7 6 5 4 3 2 1\n" +
                "+---------------------------+\n" +
                "| ・ ・ ・ ・ ・ ・ ・ ・ ・|一\n" +
                "| ・ ・v馬 ・ ・v金v銀v玉 ・|二\n" +
                "| ・ ・ ・ ・ ・v金v桂 ・ 歩|三\n" +
                "| 歩 ・ ・ ・v馬 ・v歩 ・v香|四\n" +
                "| ・ ・v歩v歩 ・ ・ ・ ・v歩|五\n" +
                "| ・v銀 ・ ・ 金 銀 銀v歩 ・|六\n" +
                "| ・ ・ 桂 ・ 金 ・ 歩v香 ・|七\n" +
                "| ・ ・ ・ ・ 玉 ・ ・ ・ ・|八\n" +
                "| ・ ・ ・ ・ ・ ・v龍 ・ 香|九\n" +
                "+---------------------------+\n" +
                "先手の持駒:飛 桂 香 歩三 ";

            var kifu1 = KifuReader.LoadFrom(bod1);

            Assert.NotNull(kifu1);

            var board1 = kifu1.CreateBoard();

            Assert.NotNull(board1);
            Assert.True(board1.Validate());

            var kifu2 = KifuReader.LoadFrom(bod2);

            Assert.NotNull(kifu2);

            var board2 = kifu2.CreateBoard();

            Assert.NotNull(board2);
            Assert.True(board2.Validate());

            board1.FlipPieces();
            Assert.True(board1.BoardEquals(board2));
        }
Exemple #6
0
        public void DurationTest()
        {
            var content =
                "# ----  棋譜ファイル  ----\n" +
                "先手:人間\n" +
                "後手:test\n" +
                "手合割:平手\n" +
                "手数----指手---------消費時間--\n" +
                "   1 7六歩(77)     (01:38 / 00:01:38)\n" +
                "   2 3四歩(33)     (00:01 / 00:00:01)\n" +
                "   3 2六歩(27)     (02:17 / 00:03:55)\n" +
                "   4 3三角(22)     (00:01 / 00:00:02)\n" +
                "   5 同 角成(88)   (01:38 / 00:05:33)\n" +
                "   6 同 桂(21)     (00:01 / 00:00:03)\n" +
                "   7 6八玉(59)     (02:19 / 00:07:52)\n" +
                "   8 4二飛(82)     (00:01 / 00:00:04)\n" +
                "   9 7八玉(68)     (01:26 / 00:09:18)\n" +
                "  10 6二玉(51)     (00:01 / 00:00:05)\n" +
                "  11 8八玉(78)     (01:10 / 00:10:28)\n" +
                "  12 7二玉(62)     (01:01 / 00:01:06)\n" +
                "  13 4八銀(39)     (01:40 / 00:12:08)\n";
            var durations = new string[]
            {
                "00:01:38", "00:00:01", "00:02:17", "00:00:01", "00:01:38",
                "00:00:01", "00:02:19", "00:00:01", "00:01:26", "00:00:01",
                "00:01:10", "00:01:01", "00:01:40",
            };
            var totalDurations = new string[]
            {
                "00:01:38", "00:00:01", "00:03:55", "00:00:02", "00:05:33",
                "00:00:03", "00:07:52", "00:00:04", "00:09:18", "00:00:05",
                "00:10:28", "00:01:06", "00:12:08",
            };

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(content);

            Assert.NotNull(kifu);

            var node = kifu.RootNode;

            for (var i = 0; i < durations.Count(); ++i)
            {
                node = node.NextNode;
                Assert.AreEqual(TimeSpan.Parse(durations[i]), node.Duration);
                Assert.AreEqual(TimeSpan.Parse(totalDurations[i]), node.TotalDuration);
            }

            // 書き込みテスト
            var kif = KifuWriter.WriteTo(kifu, KifuFormat.Kif);

            CompareWithoutSpace(content, kif);
        }
Exemple #7
0
        public void NoNewlineTest()
        {
            var text =
                "先手:谷川浩司\n" +
                "後手:田中寅彦\n" +
                "▲7六歩";

            var kifu = KifuReader.LoadFrom(text);

            Assert.NotNull(kifu);
            Assert.AreEqual(1, kifu.MoveList.Count());
        }
Exemple #8
0
        public void ErrorTest()
        {
            var sample = SampleKif.Get("Ki2_Error.ki2");

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(sample);

            Assert.NotNull(kifu);
            Assert.NotNull(kifu.Error);

            Assert.AreEqual(65, kifu.MoveList.Count());
            Assert.IsInstanceOf(
                typeof(File.FileFormatException),
                kifu.Error);
        }
Exemple #9
0
        public void NormalTest2()
        {
            var content =
                "V2.2\n" +
                "PI\n-\n";

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(content);

            Assert.NotNull(kifu);

            // 書き込みテスト
            var kif = KifuWriter.WriteTo(kifu, KifuFormat.Csa);

            CompareCsaKif(content, kif, true);
        }
Exemple #10
0
        public void VariationTest()
        {
            var text = SampleKif.VariationKif;

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(text);

            Assert.NotNull(kifu);
            Assert.Null(kifu.Error);

            // 手数を確認
            var count = 133;

            Assert.AreEqual(count, kifu.MoveList.Count());

            // 入出力テストを行います。
            TestUtil.ReadWriteTest(kifu, KifuFormat.Kif, count);
        }
Exemple #11
0
        public void ErrorTest()
        {
            var text =
                "開始日時:2004/06/22\n" +
                "棋戦:達人戦\n" +
                "戦型:先手三間飛車\n" +
                "先手戦術:早石田\n" +
                "後手戦術:角交換型\n" +
                "手順:▲7六歩△3四歩▲7五歩△4二玉▲7八飛△8八角成▲同銀△4五角\n" +
                "備考:▲升田式石田流\n" +
                "先手:谷川浩司\n" +
                "後手:田中寅彦\n" +
                "\n" +
                "場所:大阪「関西将棋会館」\n" +
                "持ち時間:3時間\n" +
                "*放映日:2004/07/09-16\n" +
                "*棋戦詳細:第12回富士通杯達人戦2回戦第3局\n" +
                "*「谷川浩司王位」vs「田中寅彦九段」\n" +
                "▲7六歩    △3四歩    ▲7五歩    △4二玉    ▲7八飛    △8八角成\n" +
                "▲同 銀    △4五角    ▲5八玉    △2七角成  ▲7四歩    △同 歩\n" +
                "▲5五角    △3三桂    ▲7四飛    △9二飛    ▲3四飛    △2二銀\n" +
                "▲3六歩    △5四歩    ▲7七角    △6二銀    ▲3八金    △2六馬\n" +
                "▲3五歩    △7二飛    ▲2八銀    △3六馬    ▲3七桂    △7七飛成\n" +
                "▲同 銀    △7六歩    ▲6六銀    △8八角    ▲2七銀    △同 馬\n" +
                "▲同 金    △9九角成  ▲5四飛    △5二香    ▲7四飛    △5五銀\n" +
                "▲同 銀    △同 馬    ▲6六銀    △7三銀    ▲3四飛    △4四馬\n" +
                "▲7四歩    △6四銀    ▲4四飛    △同 歩    ▲3四歩    △2九飛\n" +
                "▲1六角    △2五桂    ▲同 桂    △5七香成  ▲同 銀    △5六歩\n" +
                "▲3三歩成  △5一玉    ▲5四桂    △5七歩成  ▲同 玉    △5三銀上\n" +
                "▲4二角    △同 銀    ▲同 と    △同 金    ▲同桂成    △6二玉\n" +
                "▲5二飛\n" +
                "まで73手で先手の勝ち";

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(text);

            Assert.NotNull(kifu);
            Assert.NotNull(kifu.Error);

            Assert.AreEqual(65, kifu.MoveList.Count());
            Assert.IsInstanceOf(
                typeof(Ragnarok.Shogi.File.FileFormatException),
                kifu.Error);
        }
Exemple #12
0
        /// <summary>
        /// 棋譜の読み込み&書き込みテストを行います。
        /// </summary>
        private static void TestKif(string text)
        {
            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(text);

            Assert.NotNull(kifu);

            // 手数を取得
            var countObj = GetMoveCount(text);
            //Assert.NotNull(countObj);

            var count = (countObj.HasValue ? countObj.Value : kifu.MoveList.Count()) +
                        (kifu.Error != null ? -1 : 0);

            Assert.LessOrEqual(count, kifu.MoveList.Count());

            // 入出力テストを行います。
            TestUtil.ReadWriteTest(kifu, KifuFormat.Ki2, count);
        }
Exemple #13
0
        public void Duration81DojoTest()
        {
            var content =
                "#KIF version=2.0 encoding=UTF-8\n" +
                "開始日時:2014/01/01\n" +
                "場所:81Dojo (ver.2014/1/1)\n" +
                "持ち時間:5分+30秒\n" +
                "手合割:平手\n" +
                "先手:test-san1\n" +
                "後手:test-san2\n" +
                "手数----指手---------消費時間--\n" +
                "   1 7六歩(77)   ( 0:5/)\n" +
                "   2 3四歩(33)   ( 0:1/)\n" +
                "   3 2六歩(27)   ( 0:3/)\n" +
                "   4 5四歩(53)   ( 0:1/)\n" +
                "   5 4八銀(39)   ( 0:3/)\n" +
                "   6 8四歩(83)   ( 0:4/)\n";

            var durations = new int[]
            {
                5, 1, 3, 1, 3, 4
            };
            var totalDurations = new int[]
            {
                5, 1, 8, 2, 11, 6
            };

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(content);

            Assert.NotNull(kifu);
            Assert.AreEqual(6, kifu.MoveList.Count());

            var node = kifu.RootNode;

            for (var i = 0; i < durations.Count(); ++i)
            {
                node = node.NextNode;
                Assert.AreEqual(TimeSpan.FromSeconds(durations[i]), node.Duration);
                Assert.AreEqual(TimeSpan.FromSeconds(totalDurations[i]), node.TotalDuration);
            }
        }
Exemple #14
0
        public void TimeTest()
        {
            var timeSeconds = new int[]
            {
                1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                13, 1, 19, 21, 27, 15, 13, 6, 14, 15,
                13, 6, 11, 7, 19, 5, 17, 18, 1, 17,
                1, 16, 22, 16, 21, 16, 1, 16, 1, 16,
                13, 6, 8, 12, 13, 7, 7, 13, 15, 16,
                12, 9, 2, 17, 9, 17, 12, 9, 41, 25,
                2, 17, 42, 1, 30, 1, 44, 1, 10, 19,
                1, 18, 1, 19, 40, 1, 15, 31, 1, 18,
                17, 1, 44, 19, 1, 18, 12, 22, 16, 19,
                1, 19, 1, 18, 9, 19, 27, 18, 1, 18,
                25, 19, 1, 18, 17, 22, 12, 8, 1, 17,
                30, 1, 16, 1, 1, 1, 1, 2, 1, 1,
                1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                0,  // 投了分
            };
            var sample = Get("SampleCsa.csa");

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(sample);

            Assert.NotNull(kifu);
            Assert.AreEqual(timeSeconds.Count(), kifu.MoveList.Count());

            // 消費時間の比較
            var node = kifu.RootNode;

            for (var i = 0; i < timeSeconds.Count(); ++i)
            {
                node = node.NextNode;
                Assert.AreEqual(timeSeconds[i], node.DurationSeconds);
            }

            // 書き込みテスト
            var kif = KifuWriter.WriteTo(kifu, KifuFormat.Csa);

            CompareCsaKif(sample, kif, false);
        }
Exemple #15
0
        /// <summary>
        /// 棋譜ファイルの読み込みを行います。
        /// </summary>
        public static void LoadKif(ShogiUIElement3D control, TextReader reader)
        {
            try
            {
                if (reader == null)
                {
                    return;
                }

                // ファイルを読み込み局面を作成します。
                var file  = KifuReader.Load(reader);
                var board = file.CreateBoard();

                control.Board = board;
            }
            catch (Exception ex)
            {
                DialogUtil.ShowError(ex,
                                     "棋譜ファイルの読み込みに失敗しました( ̄ω ̄;)");
            }
        }
Exemple #16
0
        public void VariationMissTest()
        {
            var sample = SampleKif.Get("Kif_VariationMiss.kif");

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(sample);

            Assert.NotNull(kifu);
            Assert.Null(kifu.Error);

            // 手数を確認
            var count = 143;

            Assert.AreEqual(count, kifu.MoveList.Count());

            // 入出力テストを行います。
            TestUtil.ReadWriteTest(kifu, KifuFormat.Kif, count);

            // 書き込みテスト
            //var kif = KifuWriter.WriteTo(kifu, KifuFormat.Kif);
            //CompareWithoutSpace(sample, kif);
        }
Exemple #17
0
        public void PVComment2Test()
        {
            var sample = SampleKif.Get("Kif_PV2.kif");

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(sample);

            Assert.NotNull(kifu);
            Assert.Null(kifu.Error);

            // 手数の確認
            var count = 30;

            Assert.AreEqual(count, kifu.MoveList.Count());

            // 入出力テストを行います。
            TestUtil.ReadWriteTest(kifu, KifuFormat.Kif, count);

            // 書き込みテスト
            var kif = KifuWriter.WriteTo(kifu, KifuFormat.Kif);

            CompareWithoutSpace(sample, kif);
        }
Exemple #18
0
        /// <summary>
        /// 棋譜の出力+入力を行い、ファイルが正しく扱えているか調べます。
        /// </summary>
        public static void ReadWriteTest(KifuObject kifu0, KifuFormat format,
                                         int moveCount)
        {
            // 棋譜の書き出し
            var wrote = KifuWriter.WriteTo(kifu0, format);

            Assert.IsNotNullOrEmpty(wrote);

            // 棋譜の読み込み パート2
            var kifu1 = KifuReader.LoadFrom(wrote);

            Assert.NotNull(kifu1);

            // 読み込んだ棋譜の確認
            Assert.LessOrEqual(moveCount, kifu1.MoveList.Count());

            // 局面の比較を行います。
            var board0 = kifu0.StartBoard.Clone();

            kifu0.MoveList.ForEach(_ => board0.DoMove(_));

            var board1 = kifu1.StartBoard.Clone();

            kifu1.MoveList.ForEach(_ => board1.DoMove(_));

            Assert.True(Board.BoardEquals(kifu0.StartBoard, kifu1.StartBoard));
            Assert.True(kifu0.RootNode.NodeEquals(kifu1.RootNode, true));
            Assert.True(Board.BoardEquals(board0, board1));

            // ヘッダ要素を比較します。
            Assert.AreEqual(kifu0.Header.Count(), kifu1.Header.Count());
            foreach (var item0 in kifu0.Header)
            {
                Assert.True(kifu1.Header.Contains(item0.Key));
                Assert.AreEqual(item0.Value, kifu1.Header[item0.Key]);
            }
        }
Exemple #19
0
        public void DurationUsapyonTest()
        {
            var content =
                "先手:あなた\n" +
                "後手:うさぴょんLv2\n" +
                "手合い割り:平手\n" +
                "  1: ▲7六歩         6s\n" +
                "  2: △8四歩         1s\n" +
                "  3: ▲5八金右       3s\n" +
                "  4: △3四歩         1s\n" +
                "  5: ▲6八金寄       3s\n" +
                "  6: △5二王        10s\n";

            var durations = new int[]
            {
                6, 1, 3, 1, 3, 10
            };
            var totalDurations = new int[]
            {
                6, 1, 9, 2, 12, 12
            };

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(content);

            Assert.NotNull(kifu);
            Assert.AreEqual(6, kifu.MoveList.Count());

            var node = kifu.RootNode;

            for (var i = 0; i < durations.Count(); ++i)
            {
                node = node.NextNode;
                Assert.AreEqual(TimeSpan.FromSeconds(durations[i]), node.Duration);
                Assert.AreEqual(TimeSpan.FromSeconds(totalDurations[i]), node.TotalDuration);
            }
        }
Exemple #20
0
        public void NormalizeTest2()
        {
            var boardStr =
                "# ----  棋譜ファイル  ----\n" +
                "先手:先手\n" +
                "後手:後手\n" +
                "後手の持駒:歩 \n" +
                "  9 8 7 6 5 4 3 2 1\n" +
                "+---------------------------+\n" +
                "| ・ ・ ・ ・v玉 ・ ・ ・ ・|一\n" +
                "| 角 ・ ・ ・v歩 ・ ・ ・ ・|二\n" +
                "| ・ ・ ・ ・ ・ 金v銀 ・ ・|三\n" +
                "| 角 ・ ・ ・ ・ 金 金 金 ・|四\n" +
                "| ・ 桂 ・ 桂 ・ ・ ・ ・ ・|五\n" +
                "| ・ ・ ・ ・ ・ ・ ・ ・ ・|六\n" +
                "| ・ ・ ・ ・ ・ ・ ・ ・ ・|七\n" +
                "| ・ ・ ・ ・ 飛 ・ 飛 ・ ・|八\n" +
                "| ・ ・ ・ ・ ・ ・ ・ ・ 香|九\n" +
                "+---------------------------+\n" +
                "先手の持駒:桂 \n" +
                "手数=0\n" +
                "後手番\n" +
                "手数----指手---------消費時間--\n" +
                "   1 △1五歩打     (00:00/00:00:00)";
            var kifu = KifuReader.LoadFrom(boardStr);

            Assert.NotNull(kifu);

            var board = kifu.CreateBoard();

            Assert.NotNull(board);
            Assert.True(board.Validate());
            Assert.AreEqual(BWType.Black, board.Turn);

            // 桂
            TestMove(board, "73桂左");
            TestMove(board, "73桂右");
            TestMove(board, "73桂右成る");
            TestMove(board, "73桂左不成り");
            TestMove(board, "73桂打");
            TestInvalidMove(board, "73桂");
            TestInvalidMove(board, "73桂成らず");
            TestInvalidMove(board, "73桂直");
            TestInvalidMove(board, "73桂寄");

            Assert.AreEqual(M("▲23桂"), board.NormalizeMove(M("23桂打")));

            // 金
            TestMove(board, "33金寄");
            TestMove(board, "33金直");
            TestMove(board, "33金左上");
            TestMove(board, "33金右");
            TestMove(board, "33金右上");
            TestInvalidMove(board, "33金");
            TestInvalidMove(board, "33金打");
            TestInvalidMove(board, "33金左");

            // 飛車
            TestMove(board, "48飛車右");
            TestMove(board, "48飛車左");
            TestMove(board, "48飛車左成らず");
            TestInvalidMove(board, "48飛車");
            TestInvalidMove(board, "48飛車成る");
            TestInvalidMove(board, "48飛車左成る");
            TestInvalidMove(board, "48飛車直");
            TestInvalidMove(board, "48飛車寄");
            TestInvalidMove(board, "48飛車引");

            // 角
            TestMove(board, "83角行");
            TestMove(board, "83角上");
            TestMove(board, "83角引");
            TestMove(board, "83角行成る");
            TestInvalidMove(board, "83角成らず");
            TestInvalidMove(board, "83角右");
            TestInvalidMove(board, "83角左");
            TestInvalidMove(board, "83角直");
            TestInvalidMove(board, "83角左成");
            TestInvalidMove(board, "83角打");

            // 香車
            TestMove(board, "15香");
            TestMove(board, "同香");
            TestMove(board, "同香成らず");
            TestMove(board, "同香直");
            TestInvalidMove(board, "同香左");
            TestInvalidMove(board, "同香打");
            TestInvalidMove(board, "同香成");
            TestInvalidMove(board, "同香寄");
            TestInvalidMove(board, "同香引");
            Assert.AreEqual(M("▲同香"), board.NormalizeMove(M("同香直")));
        }
Exemple #21
0
        public void CommentTest()
        {
            var content =
                "# ----  サンプル棋譜ファイル  ----\n" +
                "手合割:平手\n" +
                "手数----指手---------消費時間--\n" +
                "*今王将戦は因縁の師弟対決となりました。\n" +
                "*受けの気風の師匠に対して、弟子の平方は完全な攻め将棋。\n" +
                "   1 7六歩(77)   (00:00:01 / 00:00:01)\n" +
                "*最初はオーソドックスに\n" +
                "   2 3四歩(33)   (00:00:01 / 00:00:01)\n" +
                "   3 2六歩(27)   (00:00:02 / 00:00:01)\n" +
                "   4 8四歩(83)   (00:00:03 / 00:00:01)\n" +
                "*よくある進行になりました。\n" +
                "   5 2五歩(26)   (00:00:03 / 00:00:01)\n" +
                "   6 8五歩(84)   (00:00:04 / 00:00:01)\n" +
                "   7 2四歩(25)   (00:00:04 / 00:00:01)\n" +
                "   8 同 歩(23)   (00:00:05 / 00:00:01)\n" +
                "   9 同 飛(28)   (00:00:05 / 00:00:01)\n" +
                "  10 8六歩(85)   (00:00:05 / 00:00:01)\n" +
                "  11 同 歩(87)   (00:00:05 / 00:00:01)\n" +
                "  12 同 飛(82)   (00:00:06 / 00:00:01)\n" +
                "*お互い金を上がらずにここまで来ました。しかもノータイム。\n" +
                "*これは先手側不利と言われている展開ですが、果たしてどうなるでしょうか。\n" +
                "  13 3四飛(24)   (00:00:01 / 00:00:01)\n" +
                "*先手は横歩を取りましたね。\n" +
                "  14 7六飛(86)   (00:00:01 / 00:00:01)\n" +
                "*後手も横歩を取りましたが、これは大丈夫なのでしょうか?\n" +
                "*嫌な変化が見ているような気もしますが。\n";

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(content);

            Assert.NotNull(kifu);
            Assert.AreEqual(14, kifu.MoveList.Count());

            // コメント一覧
            var comments = new string[15];

            comments[0] =
                "今王将戦は因縁の師弟対決となりました。\n" +
                "受けの気風の師匠に対して、弟子の平方は完全な攻め将棋。";
            comments[1] =
                "最初はオーソドックスに";
            comments[4] =
                "よくある進行になりました。";
            comments[12] =
                "お互い金を上がらずにここまで来ました。しかもノータイム。\n" +
                "これは先手側不利と言われている展開ですが、果たしてどうなるでしょうか。";
            comments[13] =
                "先手は横歩を取りましたね。";
            comments[14] =
                "後手も横歩を取りましたが、これは大丈夫なのでしょうか?\n" +
                "嫌な変化が見ているような気もしますが。";

            for (var node = kifu.RootNode; node != null; node = node.NextNode)
            {
                Assert.AreEqual(comments[node.MoveCount], node.Comment);
            }

            // 入出力テストを行います。
            TestUtil.ReadWriteTest(kifu, KifuFormat.Kif, 14);
        }
Exemple #22
0
        public void CommentTest()
        {
            var content =
                "# ----  棋譜ファイル  ----\n" +
                "手合割:平手\n" +
                "手数----指手---------消費時間--\n" +
                "*今王将戦は因縁の師弟対決となりました。\n" +
                "*受けの気風の師匠に対して、弟子の平方は完全な攻め将棋。\n" +
                "   1 7六歩(77)     (00:01 / 00:00:01)\n" +
                "*最初はオーソドックスに\n" +
                "   2 3四歩(33)     (00:01 / 00:00:01)\n" +
                "   3 2六歩(27)     (00:02 / 00:00:03)\n" +
                "   4 8四歩(83)     (00:03 / 00:00:04)\n" +
                "*よくある進行になりました。\n" +
                "   5 2五歩(26)     (00:03 / 00:00:06)\n" +
                "   6 8五歩(84)     (00:04 / 00:00:08)\n" +
                "   7 2四歩(25)     (00:04 / 00:00:10)\n" +
                "   8 同 歩(23)     (00:05 / 00:00:13)\n" +
                "   9 同 飛(28)     (00:05 / 00:00:15)\n" +
                "  10 8六歩(85)     (00:05 / 00:00:18)\n" +
                "  11 同 歩(87)     (00:05 / 00:00:20)\n" +
                "  12 同 飛(82)     (00:06 / 00:00:24)\n" +
                "*お互い金を上がらずにここまで来ました。しかもノータイム。\n" +
                "*これは先手側不利と言われている展開ですが、果たしてどうなるでしょうか。\n" +
                "  13 3四飛(24)     (00:01 / 00:00:21)\n" +
                "*先手は横歩を取りましたね。\n" +
                "  14 7六飛(86)     (00:01 / 00:00:25)\n" +
                "*後手も横歩を取りましたが、これは大丈夫なのでしょうか?\n" +
                "*嫌な変化が見ているような気もしますが。\n";

            // 棋譜の読み込み
            var kifu = KifuReader.LoadFrom(content);

            Assert.NotNull(kifu);
            Assert.AreEqual(14, kifu.MoveList.Count());

            // コメント一覧
            var comments = new List <string> [15];

            comments[0] = new List <string> {
                "今王将戦は因縁の師弟対決となりました。",
                "受けの気風の師匠に対して、弟子の平方は完全な攻め将棋。",
            };
            comments[1] = new List <string> {
                "最初はオーソドックスに"
            };
            comments[4] = new List <string> {
                "よくある進行になりました。"
            };
            comments[12] = new List <string> {
                "お互い金を上がらずにここまで来ました。しかもノータイム。",
                "これは先手側不利と言われている展開ですが、果たしてどうなるでしょうか。",
            };
            comments[13] = new List <string> {
                "先手は横歩を取りましたね。"
            };
            comments[14] = new List <string> {
                "後手も横歩を取りましたが、これは大丈夫なのでしょうか?",
                "嫌な変化が見ているような気もしますが。",
            };

            for (var node = kifu.RootNode; node != null; node = node.NextNode)
            {
                if (comments[node.MoveCount] == null)
                {
                    Assert.False(node.CommentList.Any());
                }
                else
                {
                    Assert.AreEqual(comments[node.MoveCount], node.CommentList);
                }
            }

            // 入出力テストを行います。
            TestUtil.ReadWriteTest(kifu, KifuFormat.Kif, 14);

            // 書き込みテスト
            var kif = KifuWriter.WriteTo(kifu, KifuFormat.Kif);

            CompareWithoutSpace(content, kif);
        }