Esempio n. 1
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);
        }
Esempio n. 2
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);
        }
Esempio n. 3
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);
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
        public void VariationTest()
        {
            var sample = SampleKif.Get("Kif_Variation.kif");

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

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

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

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

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

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

            CompareWithoutSpace(sample, kif);
        }
Esempio n. 6
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]);
            }
        }
Esempio n. 7
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);
        }