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); }
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); }
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); }
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); }
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); }
/// <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]); } }
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); }