public void Unit_HoraResultTest() { //親40符3翻 ダブ東 ツモ 7800点 { var expected = 7800; var tehai = new Tehai(new List<string>() { "1m", "2m", "3m", "4p", "5p", "6p", "7p", "7p", "7p", "9p", "9p", "E", "E", "E" }); var gameId = 1; var playerPosition = 0; var lastAddedPai = "E"; var ifr = new InfoForResult(gameId, playerPosition); ifr.IsTsumo = true; ifr.IsFured = false; ifr.IsMenzen = true; ifr.UseYamaPaiNum = 5; ifr.SetLastAddedPai(lastAddedPai); var fd = new Field(); var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai); Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome); } //親50符2翻 ツモ 三暗刻 { var expected = 9600; var tehai = new Tehai(new List<string>() { "1m", "1m", "1m", "2p", "2p", "2p", "4p", "5p", "5p", "5p", "6p", "E", "E", "5p" }); var gameId = 1; var playerPosition = 0; var lastAddedPai = "5p"; var ifr = new InfoForResult(gameId, playerPosition); ifr.IsTsumo = true; ifr.IsFured = false; ifr.IsMenzen = true; ifr.UseYamaPaiNum = 5; ifr.SetLastAddedPai(lastAddedPai); var fd = new Field(); var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai); Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome); } //子20符2翻 タンピン { var expected = 2000; var tehai = new Tehai(new List<string>() { "2m", "3m", "4m", "2p", "3p", "4p", "4p", "5p", "6p", "4s", "5s", "8s", "8s" }); var gameId = 1; var playerPosition = 1; var lastAddedPai = "6s"; var ifr = new InfoForResult(gameId, playerPosition); ifr.IsTsumo = false; ifr.IsFured = false; ifr.IsMenzen = true; ifr.UseYamaPaiNum = 5; var fd = new Field(); ifr.SetLastAddedPai(lastAddedPai); var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai); Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome); } //子20符3翻 タンヤオ三食一盃口 { var expected = 8000; var tehai = new Tehai(new List<string>() { "2m", "3m", "4m", "2p", "3p", "4p", "2p", "4p", "5s", "5s", "2s", "3s", "4s" }); var gameId = 1; var playerPosition = 1; var lastAddedPai = "3p"; var ifr = new InfoForResult(gameId, playerPosition); ifr.IsTsumo = false; ifr.IsFured = false; ifr.IsMenzen = true; ifr.UseYamaPaiNum = 5; var fd = new Field(); ifr.SetLastAddedPai(lastAddedPai); var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai); Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome); } //子40符1翻 自摸 { var expected = 1500; var tehai = new Tehai(new List<string>() { "1m", "2m", "3m", "3m", "4m", "5m", "1p", "1p", "1p", "2s", "3s", "4s", "5s", "5s" }); var gameId = 1; var playerPosition = 1; var lastAddedPai = "3m"; var ifr = new InfoForResult(gameId, playerPosition); ifr.IsTsumo = true; ifr.IsFured = false; ifr.IsMenzen = true; ifr.UseYamaPaiNum = 5; var fd = new Field(); ifr.SetLastAddedPai(lastAddedPai); var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai); Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome); } //子50符2翻 ロン { var expected = 3200; var tehai = new Tehai(new List<string>() { "1m", "1m", "1m", "2m", "2m", "2m", "1p", "1p", "1p", "2p", "3p", "4s", "4s" }); var gameId = 1; var playerPosition = 1; var lastAddedPai = "1p"; var ifr = new InfoForResult(gameId, playerPosition); ifr.IsTsumo = false; ifr.IsFured = false; ifr.IsMenzen = true; ifr.UseYamaPaiNum = 5; var fd = new Field(); ifr.SetLastAddedPai(lastAddedPai); var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai); Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome); } }
public void Unit_YakuResultTest() { //chinitsu pinfu iipeiko { Tehai testTehai = new Tehai(new List<string> { "1m", "2m", "3m", "4m", "5m", "6m", "7m", "7m", "1m", "2m", "2m", "3m", "3m", "4m" }); var lastAdded = "4m"; var testIfr = new InfoForResult(); testIfr.IsMenzen = true; testIfr.IsOya = true; testIfr.IsTsumo = true; testIfr.UseYamaPaiNum = 10; testIfr.SetLastAddedPai(lastAdded); var result = new HoraResult(); result = ResultCalclator.CalcHoraResult(testTehai, testIfr, new Field(), lastAdded); var yakuMap = result.yakuResult.yakus; Assert.IsTrue(yakuMap.Count(e => (string)e[0] == MJUtil.YAKU_STRING[(int)MJUtil.Yaku.CHINNITSU]) == 1); Assert.IsTrue(yakuMap.Count(e => (string)e[0] == MJUtil.YAKU_STRING[(int)MJUtil.Yaku.PINFU]) == 1); Assert.IsTrue(yakuMap.Count(e => (string)e[0] == MJUtil.YAKU_STRING[(int)MJUtil.Yaku.IIPEIKOU]) == 1); } }
public void Unit_HoraResultTestUseHoraPatternExamples() { using (StreamReader sr = new StreamReader(@"../../HoraPatternOutputSmall.txt", Encoding.GetEncoding("shift_jis"))) { var lineNumber = 0; while (true) { string line = sr.ReadLine(); if (line == null) break; lineNumber++; var obj = JsonConvert.DeserializeObject<MJsonMessageHora_Extend>(line); int expected = obj.hora_points; var gameId = obj.kyoku; var playerPosition = obj.actor; var lastAddedPai = obj.pai; var stubOyaId = 0;// replaced after var ifr = new InfoForResult(gameId, playerPosition, stubOyaId, obj.bakaze); ifr.IsTsumo = obj.actor == obj.target; var ankantsuCount = obj.hora_furos.Count(e => e[0] == "ankantsu"); ifr.IsMenzen = obj.hora_furos.Count - ankantsuCount == 0; ifr.IsFured = !ifr.IsMenzen; ifr.UseYamaPaiNum = 5; ifr.SetLastAddedPai(lastAddedPai); ifr.IsIppatsu = yakuContains(obj, "ippatsu"); ifr.IsReach = yakuContains(obj, "reach"); ifr.IsDoubleReach = yakuContains(obj, "double_reach"); ifr.IsHaitei = yakuContains(obj, "haiteiraoyue"); ifr.IsHoutei = yakuContains(obj, "hoteiraoyui"); ifr.IsRinshan = yakuContains(obj, "rinshankaiho"); ifr.IsChankan = yakuContains(obj, "chankan"); ifr.IsOya = (obj.kyoku - 1 - obj.actor + Constants.PLAYER_NUM) % Constants.PLAYER_NUM == 0; foreach (var doraMarker in obj.dora_markers) { ifr.RegisterDoraMarker(doraMarker); } ifr.RegisterUraDoraMarker(obj.uradora_markers); var fd = new Field(obj.kyoku, 0, 0, 0,obj.bakaze); var tehai = new Tehai(obj.hora_tehais); foreach (var furo in obj.hora_furos) { // ankan don't contains furo.furopai if (MJUtil.TARTSU_TYPE_STRING_ENUM_MAP[furo[0]] == MJUtil.TartsuType.ANKANTSU) { var f = new Furo(furo[0], Pai.UNKNOWN_PAI_STRING, furo.GetRange(1, furo.Count - 1)); tehai.furos.Add(f); } else { var f = new Furo(furo[0], furo[1], furo.GetRange(2, furo.Count - 2)); tehai.furos.Add(f); } } if (ifr.IsTsumo) { tehai.tehai.Add(new Pai(lastAddedPai)); } var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai); var myPointResult = result.pointResult.HoraPlayerIncome; if (myPointResult != expected) { Debug.WriteLine(lineNumber + ", acc = " + expected + " --> " + myPointResult + " tehais:" + string.Join(",", tehai.GetTehaiStringList().ToList())); foreach (var yaku in result.yakuResult.yakus) { Debug.WriteLine("accual yaku {0}, han {1}",yaku[0],yaku[1]); } result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai); } Assert.AreEqual(expected, myPointResult); } } }