mahjong_engine 1.1.3 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/.github/workflows/qlty-coverage.yml +2 -2
  2. package/dist/BlockDivider.d.ts +11 -0
  3. package/dist/BlockDivider.d.ts.map +1 -0
  4. package/dist/BlockDivider.js +109 -0
  5. package/dist/BlockDivider.js.map +1 -0
  6. package/dist/BlockHais.d.ts +27 -0
  7. package/dist/BlockHais.d.ts.map +1 -0
  8. package/dist/BlockHais.js +78 -0
  9. package/dist/BlockHais.js.map +1 -0
  10. package/dist/BlockHaisList.d.ts +19 -0
  11. package/dist/BlockHaisList.d.ts.map +1 -0
  12. package/dist/BlockHaisList.js +81 -0
  13. package/dist/BlockHaisList.js.map +1 -0
  14. package/dist/Hai.d.ts +16 -0
  15. package/dist/Hai.d.ts.map +1 -0
  16. package/dist/Hai.js +67 -0
  17. package/dist/Hai.js.map +1 -0
  18. package/dist/Hais.d.ts +15 -0
  19. package/dist/Hais.d.ts.map +1 -0
  20. package/dist/Hais.js +40 -0
  21. package/dist/Hais.js.map +1 -0
  22. package/dist/IMentsu.d.ts +20 -0
  23. package/dist/IMentsu.d.ts.map +1 -0
  24. package/dist/IMentsu.js +2 -0
  25. package/dist/IMentsu.js.map +1 -0
  26. package/dist/MachiCalculator.d.ts +9 -0
  27. package/dist/MachiCalculator.d.ts.map +1 -0
  28. package/dist/MachiCalculator.js +49 -0
  29. package/dist/MachiCalculator.js.map +1 -0
  30. package/dist/MahjongConsts.d.ts +43 -0
  31. package/dist/MahjongConsts.d.ts.map +1 -0
  32. package/dist/MahjongConsts.js +55 -0
  33. package/dist/MahjongConsts.js.map +1 -0
  34. package/dist/Meld.d.ts +26 -0
  35. package/dist/Meld.d.ts.map +1 -0
  36. package/dist/Meld.js +71 -0
  37. package/dist/Meld.js.map +1 -0
  38. package/dist/Melds.d.ts +9 -0
  39. package/dist/Melds.d.ts.map +1 -0
  40. package/dist/Melds.js +14 -0
  41. package/dist/Melds.js.map +1 -0
  42. package/dist/MentsuAnalyzer.d.ts +11 -0
  43. package/dist/MentsuAnalyzer.d.ts.map +1 -0
  44. package/dist/MentsuAnalyzer.js +19 -0
  45. package/dist/MentsuAnalyzer.js.map +1 -0
  46. package/dist/PlayerContext.d.ts +30 -0
  47. package/dist/PlayerContext.d.ts.map +1 -0
  48. package/dist/PlayerContext.js +26 -0
  49. package/dist/PlayerContext.js.map +1 -0
  50. package/dist/PlayerHand.d.ts +12 -0
  51. package/dist/PlayerHand.d.ts.map +1 -0
  52. package/dist/PlayerHand.js +24 -0
  53. package/dist/PlayerHand.js.map +1 -0
  54. package/dist/ShantenCalculator.d.ts +14 -0
  55. package/dist/ShantenCalculator.d.ts.map +1 -0
  56. package/dist/ShantenCalculator.js +108 -0
  57. package/dist/ShantenCalculator.js.map +1 -0
  58. package/dist/index.d.ts +19 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +18 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/modules/ShantenCalculator.d.ts +3 -3
  63. package/dist/modules/ShantenCalculator.d.ts.map +1 -1
  64. package/dist/modules/ShantenCalculator.js +2 -2
  65. package/dist/modules/ShantenCalculator.js.map +1 -1
  66. package/dist/modules/tensuu/FuCalculator.d.ts +2 -1
  67. package/dist/modules/tensuu/FuCalculator.d.ts.map +1 -1
  68. package/dist/modules/tensuu/FuCalculator.js.map +1 -1
  69. package/dist/modules/tensuu/ScoreResolver.d.ts +3 -3
  70. package/dist/modules/tensuu/ScoreResolver.d.ts.map +1 -1
  71. package/dist/modules/tensuu/ScoreResolver.js +18 -11
  72. package/dist/modules/tensuu/ScoreResolver.js.map +1 -1
  73. package/dist/modules/tensuu/ScoreResult.d.ts +10 -1
  74. package/dist/modules/tensuu/ScoreResult.d.ts.map +1 -1
  75. package/dist/modules/tensuu/ScoreResult.js +7 -7
  76. package/dist/modules/tensuu/ScoreResult.js.map +1 -1
  77. package/dist/modules/tensuu/TensuuCalculator.d.ts +7 -2
  78. package/dist/modules/tensuu/TensuuCalculator.d.ts.map +1 -1
  79. package/dist/modules/tensuu/TensuuCalculator.js +8 -4
  80. package/dist/modules/tensuu/TensuuCalculator.js.map +1 -1
  81. package/dist/modules/yaku/NormalYakuChecker.d.ts +2 -1
  82. package/dist/modules/yaku/NormalYakuChecker.d.ts.map +1 -1
  83. package/dist/modules/yaku/NormalYakuChecker.js +10 -9
  84. package/dist/modules/yaku/NormalYakuChecker.js.map +1 -1
  85. package/dist/modules/yaku/YakuChecker.d.ts +2 -1
  86. package/dist/modules/yaku/YakuChecker.d.ts.map +1 -1
  87. package/dist/modules/yaku/YakuChecker.js +5 -4
  88. package/dist/modules/yaku/YakuChecker.js.map +1 -1
  89. package/dist/modules/yaku/YakuDetail.d.ts +7 -0
  90. package/dist/modules/yaku/YakuDetail.d.ts.map +1 -0
  91. package/dist/modules/yaku/YakuDetail.js +11 -0
  92. package/dist/modules/yaku/YakuDetail.js.map +1 -0
  93. package/dist/modules/yaku/YakuDetails.d.ts +13 -0
  94. package/dist/modules/yaku/YakuDetails.d.ts.map +1 -0
  95. package/dist/modules/yaku/YakuDetails.js +32 -0
  96. package/dist/modules/yaku/YakuDetails.js.map +1 -0
  97. package/dist/modules/yaku/YakumanChecker.d.ts +2 -1
  98. package/dist/modules/yaku/YakumanChecker.d.ts.map +1 -1
  99. package/dist/modules/yaku/YakumanChecker.js +8 -7
  100. package/dist/modules/yaku/YakumanChecker.js.map +1 -1
  101. package/dist/tensuu/FuCalculator.d.ts +15 -0
  102. package/dist/tensuu/FuCalculator.d.ts.map +1 -0
  103. package/dist/tensuu/FuCalculator.js +105 -0
  104. package/dist/tensuu/FuCalculator.js.map +1 -0
  105. package/dist/tensuu/FuDetail.d.ts +10 -0
  106. package/dist/tensuu/FuDetail.d.ts.map +1 -0
  107. package/dist/tensuu/FuDetail.js +13 -0
  108. package/dist/tensuu/FuDetail.js.map +1 -0
  109. package/dist/tensuu/ScoreResolver.d.ts +14 -0
  110. package/dist/tensuu/ScoreResolver.d.ts.map +1 -0
  111. package/dist/tensuu/ScoreResolver.js +40 -0
  112. package/dist/tensuu/ScoreResolver.js.map +1 -0
  113. package/dist/tensuu/ScoreResult.d.ts +12 -0
  114. package/dist/tensuu/ScoreResult.d.ts.map +1 -0
  115. package/dist/tensuu/ScoreResult.js +17 -0
  116. package/dist/tensuu/ScoreResult.js.map +1 -0
  117. package/dist/tensuu/TensuuCalculator.d.ts +14 -0
  118. package/dist/tensuu/TensuuCalculator.d.ts.map +1 -0
  119. package/dist/tensuu/TensuuCalculator.js +39 -0
  120. package/dist/tensuu/TensuuCalculator.js.map +1 -0
  121. package/dist/tensuu/TensuuResult.d.ts +15 -0
  122. package/dist/tensuu/TensuuResult.d.ts.map +1 -0
  123. package/dist/tensuu/TensuuResult.js +15 -0
  124. package/dist/tensuu/TensuuResult.js.map +1 -0
  125. package/dist/tests/hanName.test.js +2 -1
  126. package/dist/tests/hanName.test.js.map +1 -1
  127. package/dist/tests/shanten/chitoitsu.d.ts +6 -0
  128. package/dist/tests/shanten/chitoitsu.d.ts.map +1 -0
  129. package/dist/tests/shanten/chitoitsu.js +43 -0
  130. package/dist/tests/shanten/chitoitsu.js.map +1 -0
  131. package/dist/tests/shanten/kokushi.d.ts +6 -0
  132. package/dist/tests/shanten/kokushi.d.ts.map +1 -0
  133. package/dist/tests/shanten/kokushi.js +23 -0
  134. package/dist/tests/shanten/kokushi.js.map +1 -0
  135. package/dist/tests/shanten/normal.d.ts +6 -0
  136. package/dist/tests/shanten/normal.d.ts.map +1 -0
  137. package/dist/tests/shanten/normal.js +118 -0
  138. package/dist/tests/shanten/normal.js.map +1 -0
  139. package/dist/tests/shanten.test.js +6 -2
  140. package/dist/tests/shanten.test.js.map +1 -1
  141. package/dist/tests/tensuu/fu.d.ts.map +1 -1
  142. package/dist/tests/tensuu/fu.js +2 -22
  143. package/dist/tests/tensuu/fu.js.map +1 -1
  144. package/dist/tests/tensuu/hanName.d.ts.map +1 -1
  145. package/dist/tests/tensuu/hanName.js +33 -0
  146. package/dist/tests/tensuu/hanName.js.map +1 -1
  147. package/dist/tests/tensuu/tensuuNum.d.ts.map +1 -1
  148. package/dist/tests/tensuu/tensuuNum.js +20 -0
  149. package/dist/tests/tensuu/tensuuNum.js.map +1 -1
  150. package/dist/tests/tensuuFromNum.test.js +1 -1
  151. package/dist/tests/tensuuFromNum.test.js.map +1 -1
  152. package/dist/tests/testConsts.d.ts +2 -0
  153. package/dist/tests/testConsts.d.ts.map +1 -1
  154. package/dist/tests/yaku.test.js +3 -3
  155. package/dist/tests/yaku.test.js.map +1 -1
  156. package/dist/tileDefs.d.ts +42 -0
  157. package/dist/tileDefs.d.ts.map +1 -0
  158. package/dist/tileDefs.js +20 -0
  159. package/dist/tileDefs.js.map +1 -0
  160. package/dist/yaku/NormalYakuChecker.d.ts +7 -0
  161. package/dist/yaku/NormalYakuChecker.d.ts.map +1 -0
  162. package/dist/yaku/NormalYakuChecker.js +30 -0
  163. package/dist/yaku/NormalYakuChecker.js.map +1 -0
  164. package/dist/yaku/YakuChecker.d.ts +7 -0
  165. package/dist/yaku/YakuChecker.d.ts.map +1 -0
  166. package/dist/yaku/YakuChecker.js +23 -0
  167. package/dist/yaku/YakuChecker.js.map +1 -0
  168. package/dist/yaku/YakuCheckerBase.d.ts +33 -0
  169. package/dist/yaku/YakuCheckerBase.d.ts.map +1 -0
  170. package/dist/yaku/YakuCheckerBase.js +150 -0
  171. package/dist/yaku/YakuCheckerBase.js.map +1 -0
  172. package/dist/yaku/YakuContext.d.ts +14 -0
  173. package/dist/yaku/YakuContext.d.ts.map +1 -0
  174. package/dist/yaku/YakuContext.js +17 -0
  175. package/dist/yaku/YakuContext.js.map +1 -0
  176. package/dist/yaku/YakumanChecker.d.ts +7 -0
  177. package/dist/yaku/YakumanChecker.d.ts.map +1 -0
  178. package/dist/yaku/YakumanChecker.js +32 -0
  179. package/dist/yaku/YakumanChecker.js.map +1 -0
  180. package/dist/yaku/index.d.ts +6 -0
  181. package/dist/yaku/index.d.ts.map +1 -0
  182. package/dist/yaku/index.js +82 -0
  183. package/dist/yaku/index.js.map +1 -0
  184. package/dist/yaku/normal/ChinitsuChecker.d.ts +9 -0
  185. package/dist/yaku/normal/ChinitsuChecker.d.ts.map +1 -0
  186. package/dist/yaku/normal/ChinitsuChecker.js +20 -0
  187. package/dist/yaku/normal/ChinitsuChecker.js.map +1 -0
  188. package/dist/yaku/normal/ChitoitsuChecker.d.ts +8 -0
  189. package/dist/yaku/normal/ChitoitsuChecker.d.ts.map +1 -0
  190. package/dist/yaku/normal/ChitoitsuChecker.js +16 -0
  191. package/dist/yaku/normal/ChitoitsuChecker.js.map +1 -0
  192. package/dist/yaku/normal/DaburiiChecker.d.ts +8 -0
  193. package/dist/yaku/normal/DaburiiChecker.d.ts.map +1 -0
  194. package/dist/yaku/normal/DaburiiChecker.js +14 -0
  195. package/dist/yaku/normal/DaburiiChecker.js.map +1 -0
  196. package/dist/yaku/normal/DoukouChecker.d.ts +8 -0
  197. package/dist/yaku/normal/DoukouChecker.d.ts.map +1 -0
  198. package/dist/yaku/normal/DoukouChecker.js +13 -0
  199. package/dist/yaku/normal/DoukouChecker.js.map +1 -0
  200. package/dist/yaku/normal/HonchanChecker.d.ts +8 -0
  201. package/dist/yaku/normal/HonchanChecker.d.ts.map +1 -0
  202. package/dist/yaku/normal/HonchanChecker.js +18 -0
  203. package/dist/yaku/normal/HonchanChecker.js.map +1 -0
  204. package/dist/yaku/normal/HonitsuChecker.d.ts +8 -0
  205. package/dist/yaku/normal/HonitsuChecker.d.ts.map +1 -0
  206. package/dist/yaku/normal/HonitsuChecker.js +16 -0
  207. package/dist/yaku/normal/HonitsuChecker.js.map +1 -0
  208. package/dist/yaku/normal/HonrotoChecker.d.ts +8 -0
  209. package/dist/yaku/normal/HonrotoChecker.d.ts.map +1 -0
  210. package/dist/yaku/normal/HonrotoChecker.js +17 -0
  211. package/dist/yaku/normal/HonrotoChecker.js.map +1 -0
  212. package/dist/yaku/normal/IipekoChecker.d.ts +8 -0
  213. package/dist/yaku/normal/IipekoChecker.d.ts.map +1 -0
  214. package/dist/yaku/normal/IipekoChecker.js +14 -0
  215. package/dist/yaku/normal/IipekoChecker.js.map +1 -0
  216. package/dist/yaku/normal/IppatsuChecker.d.ts +8 -0
  217. package/dist/yaku/normal/IppatsuChecker.d.ts.map +1 -0
  218. package/dist/yaku/normal/IppatsuChecker.js +12 -0
  219. package/dist/yaku/normal/IppatsuChecker.js.map +1 -0
  220. package/dist/yaku/normal/IttsuuChecker.d.ts +8 -0
  221. package/dist/yaku/normal/IttsuuChecker.d.ts.map +1 -0
  222. package/dist/yaku/normal/IttsuuChecker.js +21 -0
  223. package/dist/yaku/normal/IttsuuChecker.js.map +1 -0
  224. package/dist/yaku/normal/JunchanChecker.d.ts +8 -0
  225. package/dist/yaku/normal/JunchanChecker.d.ts.map +1 -0
  226. package/dist/yaku/normal/JunchanChecker.js +15 -0
  227. package/dist/yaku/normal/JunchanChecker.js.map +1 -0
  228. package/dist/yaku/normal/KazehaiChecker.d.ts +11 -0
  229. package/dist/yaku/normal/KazehaiChecker.d.ts.map +1 -0
  230. package/dist/yaku/normal/KazehaiChecker.js +20 -0
  231. package/dist/yaku/normal/KazehaiChecker.js.map +1 -0
  232. package/dist/yaku/normal/MenzenTsumoChecker.d.ts +8 -0
  233. package/dist/yaku/normal/MenzenTsumoChecker.d.ts.map +1 -0
  234. package/dist/yaku/normal/MenzenTsumoChecker.js +12 -0
  235. package/dist/yaku/normal/MenzenTsumoChecker.js.map +1 -0
  236. package/dist/yaku/normal/PinfuChecker.d.ts +8 -0
  237. package/dist/yaku/normal/PinfuChecker.d.ts.map +1 -0
  238. package/dist/yaku/normal/PinfuChecker.js +26 -0
  239. package/dist/yaku/normal/PinfuChecker.js.map +1 -0
  240. package/dist/yaku/normal/RenpuuhaiChecker.d.ts +8 -0
  241. package/dist/yaku/normal/RenpuuhaiChecker.d.ts.map +1 -0
  242. package/dist/yaku/normal/RenpuuhaiChecker.js +18 -0
  243. package/dist/yaku/normal/RenpuuhaiChecker.js.map +1 -0
  244. package/dist/yaku/normal/RiichiChecker.d.ts +8 -0
  245. package/dist/yaku/normal/RiichiChecker.d.ts.map +1 -0
  246. package/dist/yaku/normal/RiichiChecker.js +14 -0
  247. package/dist/yaku/normal/RiichiChecker.js.map +1 -0
  248. package/dist/yaku/normal/RyanpekoChecker.d.ts +8 -0
  249. package/dist/yaku/normal/RyanpekoChecker.d.ts.map +1 -0
  250. package/dist/yaku/normal/RyanpekoChecker.js +14 -0
  251. package/dist/yaku/normal/RyanpekoChecker.js.map +1 -0
  252. package/dist/yaku/normal/SanankoChecker.d.ts +8 -0
  253. package/dist/yaku/normal/SanankoChecker.d.ts.map +1 -0
  254. package/dist/yaku/normal/SanankoChecker.js +13 -0
  255. package/dist/yaku/normal/SanankoChecker.js.map +1 -0
  256. package/dist/yaku/normal/SankantsuChecker.d.ts +8 -0
  257. package/dist/yaku/normal/SankantsuChecker.d.ts.map +1 -0
  258. package/dist/yaku/normal/SankantsuChecker.js +13 -0
  259. package/dist/yaku/normal/SankantsuChecker.js.map +1 -0
  260. package/dist/yaku/normal/SanshokuChecker.d.ts +8 -0
  261. package/dist/yaku/normal/SanshokuChecker.d.ts.map +1 -0
  262. package/dist/yaku/normal/SanshokuChecker.js +13 -0
  263. package/dist/yaku/normal/SanshokuChecker.js.map +1 -0
  264. package/dist/yaku/normal/ShosangenChecker.d.ts +8 -0
  265. package/dist/yaku/normal/ShosangenChecker.d.ts.map +1 -0
  266. package/dist/yaku/normal/ShosangenChecker.js +16 -0
  267. package/dist/yaku/normal/ShosangenChecker.js.map +1 -0
  268. package/dist/yaku/normal/TanyaoChecker.d.ts +8 -0
  269. package/dist/yaku/normal/TanyaoChecker.d.ts.map +1 -0
  270. package/dist/yaku/normal/TanyaoChecker.js +14 -0
  271. package/dist/yaku/normal/TanyaoChecker.js.map +1 -0
  272. package/dist/yaku/normal/ToitoiChecker.d.ts +8 -0
  273. package/dist/yaku/normal/ToitoiChecker.d.ts.map +1 -0
  274. package/dist/yaku/normal/ToitoiChecker.js +13 -0
  275. package/dist/yaku/normal/ToitoiChecker.js.map +1 -0
  276. package/dist/yaku/normal/YakuhaiChecker.d.ts +9 -0
  277. package/dist/yaku/normal/YakuhaiChecker.d.ts.map +1 -0
  278. package/dist/yaku/normal/YakuhaiChecker.js +18 -0
  279. package/dist/yaku/normal/YakuhaiChecker.js.map +1 -0
  280. package/dist/yaku/yakuman/ChinrotoChecker.d.ts +6 -0
  281. package/dist/yaku/yakuman/ChinrotoChecker.d.ts.map +1 -0
  282. package/dist/yaku/yakuman/ChinrotoChecker.js +9 -0
  283. package/dist/yaku/yakuman/ChinrotoChecker.js.map +1 -0
  284. package/dist/yaku/yakuman/Churen9Checker.d.ts +10 -0
  285. package/dist/yaku/yakuman/Churen9Checker.d.ts.map +1 -0
  286. package/dist/yaku/yakuman/Churen9Checker.js +13 -0
  287. package/dist/yaku/yakuman/Churen9Checker.js.map +1 -0
  288. package/dist/yaku/yakuman/ChurenChecker.d.ts +7 -0
  289. package/dist/yaku/yakuman/ChurenChecker.d.ts.map +1 -0
  290. package/dist/yaku/yakuman/ChurenChecker.js +29 -0
  291. package/dist/yaku/yakuman/ChurenChecker.js.map +1 -0
  292. package/dist/yaku/yakuman/DaisangenChecker.d.ts +6 -0
  293. package/dist/yaku/yakuman/DaisangenChecker.d.ts.map +1 -0
  294. package/dist/yaku/yakuman/DaisangenChecker.js +11 -0
  295. package/dist/yaku/yakuman/DaisangenChecker.js.map +1 -0
  296. package/dist/yaku/yakuman/DaisushiChecker.d.ts +8 -0
  297. package/dist/yaku/yakuman/DaisushiChecker.d.ts.map +1 -0
  298. package/dist/yaku/yakuman/DaisushiChecker.js +16 -0
  299. package/dist/yaku/yakuman/DaisushiChecker.js.map +1 -0
  300. package/dist/yaku/yakuman/ExtendedYakumanChecker.d.ts +9 -0
  301. package/dist/yaku/yakuman/ExtendedYakumanChecker.d.ts.map +1 -0
  302. package/dist/yaku/yakuman/ExtendedYakumanChecker.js +14 -0
  303. package/dist/yaku/yakuman/ExtendedYakumanChecker.js.map +1 -0
  304. package/dist/yaku/yakuman/Kokushi13Checker.d.ts +10 -0
  305. package/dist/yaku/yakuman/Kokushi13Checker.d.ts.map +1 -0
  306. package/dist/yaku/yakuman/Kokushi13Checker.js +13 -0
  307. package/dist/yaku/yakuman/Kokushi13Checker.js.map +1 -0
  308. package/dist/yaku/yakuman/KokushiChecker.d.ts +7 -0
  309. package/dist/yaku/yakuman/KokushiChecker.d.ts.map +1 -0
  310. package/dist/yaku/yakuman/KokushiChecker.js +14 -0
  311. package/dist/yaku/yakuman/KokushiChecker.js.map +1 -0
  312. package/dist/yaku/yakuman/RyuisoChecker.d.ts +6 -0
  313. package/dist/yaku/yakuman/RyuisoChecker.d.ts.map +1 -0
  314. package/dist/yaku/yakuman/RyuisoChecker.js +13 -0
  315. package/dist/yaku/yakuman/RyuisoChecker.js.map +1 -0
  316. package/dist/yaku/yakuman/ShosushiChecker.d.ts +6 -0
  317. package/dist/yaku/yakuman/ShosushiChecker.d.ts.map +1 -0
  318. package/dist/yaku/yakuman/ShosushiChecker.js +11 -0
  319. package/dist/yaku/yakuman/ShosushiChecker.js.map +1 -0
  320. package/dist/yaku/yakuman/SuankoChecker.d.ts +7 -0
  321. package/dist/yaku/yakuman/SuankoChecker.d.ts.map +1 -0
  322. package/dist/yaku/yakuman/SuankoChecker.js +13 -0
  323. package/dist/yaku/yakuman/SuankoChecker.js.map +1 -0
  324. package/dist/yaku/yakuman/SuankoTankiChecker.d.ts +8 -0
  325. package/dist/yaku/yakuman/SuankoTankiChecker.d.ts.map +1 -0
  326. package/dist/yaku/yakuman/SuankoTankiChecker.js +24 -0
  327. package/dist/yaku/yakuman/SuankoTankiChecker.js.map +1 -0
  328. package/dist/yaku/yakuman/SukantsuChecker.d.ts +6 -0
  329. package/dist/yaku/yakuman/SukantsuChecker.d.ts.map +1 -0
  330. package/dist/yaku/yakuman/SukantsuChecker.js +8 -0
  331. package/dist/yaku/yakuman/SukantsuChecker.js.map +1 -0
  332. package/dist/yaku/yakuman/TsuisoChecker.d.ts +6 -0
  333. package/dist/yaku/yakuman/TsuisoChecker.d.ts.map +1 -0
  334. package/dist/yaku/yakuman/TsuisoChecker.js +9 -0
  335. package/dist/yaku/yakuman/TsuisoChecker.js.map +1 -0
  336. package/modules/ShantenCalculator.ts +5 -5
  337. package/modules/tensuu/FuCalculator.ts +3 -2
  338. package/modules/tensuu/ScoreResolver.ts +21 -14
  339. package/modules/tensuu/ScoreResult.ts +17 -14
  340. package/modules/tensuu/TensuuCalculator.ts +10 -5
  341. package/modules/yaku/NormalYakuChecker.ts +11 -10
  342. package/modules/yaku/YakuChecker.ts +6 -5
  343. package/modules/yaku/YakuDetail.ts +11 -0
  344. package/modules/yaku/YakuDetails.ts +42 -0
  345. package/modules/yaku/YakumanChecker.ts +9 -7
  346. package/package.json +1 -1
  347. package/tests/hanName.test.ts +2 -1
  348. package/tests/shanten/chitoitsu.ts +42 -0
  349. package/tests/shanten/kokushi.ts +23 -0
  350. package/tests/shanten/{test1.ts → normal.ts} +7 -32
  351. package/tests/shanten.test.ts +6 -2
  352. package/tests/tensuu/fu.ts +2 -22
  353. package/tests/tensuu/hanName.ts +33 -0
  354. package/tests/tensuu/tensuuNum.ts +20 -0
  355. package/tests/tensuuFromNum.test.ts +1 -1
  356. package/tests/testConsts.ts +3 -1
  357. package/tests/yaku.test.ts +7 -5
@@ -1,6 +1,15 @@
1
1
  import { FuDetail } from "./FuDetail.js";
2
2
  import { TensuuResult } from "./TensuuResult.js";
3
3
 
4
+ interface ScoreDetails {
5
+ han: number,
6
+ fuBasic: number,
7
+ fuCeiled: number,
8
+ tensuu: TensuuResult,
9
+ hanName: string,
10
+ fuDetail: FuDetail[]
11
+ }
12
+
4
13
  export class ScoreResult{
5
14
  public readonly han: number;
6
15
  public readonly fuBasic: number;
@@ -9,19 +18,13 @@ export class ScoreResult{
9
18
  public readonly hanName: string;
10
19
  public readonly fuDetail: FuDetail[];
11
20
 
12
- constructor(
13
- han: number,
14
- fuBasic: number,
15
- fuCeiled: number,
16
- tensuu: TensuuResult,
17
- hanName: string,
18
- fuDetail: FuDetail[]
19
- ){
20
- this.han = han;
21
- this.fuBasic = fuBasic;
22
- this.fuCeiled = fuCeiled;
23
- this.tensuu = tensuu;
24
- this.hanName = hanName;
25
- this.fuDetail = fuDetail;
21
+ constructor(details: ScoreDetails)
22
+ {
23
+ this.han = details.han;
24
+ this.fuBasic = details.fuBasic;
25
+ this.fuCeiled = details.fuCeiled;
26
+ this.tensuu = details.tensuu;
27
+ this.hanName = details.hanName;
28
+ this.fuDetail = details.fuDetail;
26
29
  }
27
30
  }
@@ -1,18 +1,22 @@
1
1
  import { TensuuResult } from './TensuuResult.js';
2
2
 
3
3
  export class TensuuCalculator{
4
- static readonly BASE_LIMITS = [
4
+ static readonly BASE_LIMITS_YAKUMAN = [
5
5
  {han: 78, base: 48000, name: "六倍役満"},
6
6
  {han: 65, base: 40000, name: "五倍役満"},
7
7
  {han: 52, base: 32000, name: "四倍役満"},
8
8
  {han: 39, base: 24000, name: "三倍役満"},
9
9
  {han: 26, base: 16000, name: "二倍役満"},
10
- {han: 13, base: 8000, name: "役満"},
10
+ {han: 13, base: 8000, name: "役満"}
11
+ ];
12
+ static readonly BASE_LIMITS_NORMAL = [
13
+ {han: 13, base: 8000, name: "数え役満"},
11
14
  {han: 11, base: 6000, name: "三倍満"},
12
15
  {han: 8, base: 4000, name: "倍満"},
13
16
  {han: 6, base: 3000, name: "跳満"},
14
17
  {han: 5, base: 2000, name: "満貫"},
15
- ];
18
+ ]
19
+
16
20
 
17
21
  static calcBaseTensuu(han: number, fu: number): number{
18
22
  return Math.min(fu * Math.pow(2, han + 2), 2000);
@@ -35,8 +39,9 @@ export class TensuuCalculator{
35
39
  return new TensuuResult(base, ronOya, ronKo, tsumoOya, tsumoKo);
36
40
  }
37
41
 
38
- static calcTensuu(han: number, fu: number): TensuuResult{
39
- for(const limit of this.BASE_LIMITS){
42
+ static calcTensuu(han: number, fu: number, isYakuman: boolean): TensuuResult{
43
+ const limits = isYakuman ? this.BASE_LIMITS_YAKUMAN : this.BASE_LIMITS_NORMAL;
44
+ for(const limit of limits){
40
45
  if(han >= limit.han) return this.calcTensuuFromBase(limit.base);
41
46
  }
42
47
  return this.calcTensuuFromBase(this.calcBaseTensuu(han, fu));
@@ -1,5 +1,6 @@
1
1
  import { WinEvent } from '../MahjongConsts.js';
2
2
  import { YakuContext } from './YakuContext.js';
3
+ import { YakuDetails } from './YakuDetails.js';
3
4
  import { NormalYakuCheckers } from './index.js';
4
5
 
5
6
  export class NormalYakuChecker{
@@ -10,22 +11,22 @@ export class NormalYakuChecker{
10
11
  }
11
12
 
12
13
  //役判定
13
- check(): Map<string, number> {
14
- const yaku_map: Map<string, number> = new Map();
14
+ check(): YakuDetails {
15
+ const yakuDetails: YakuDetails = new YakuDetails();
15
16
  for(const Checker of NormalYakuCheckers) {
16
17
  const checker = Checker(this.context);
17
- if(checker.check()) yaku_map.set(checker.getName(), checker.getHan());
18
+ if(checker.check()) yakuDetails.add(checker.getName(), checker.getHan());
18
19
  }
19
20
 
20
- if(this.context.ctx.event === WinEvent.RINSHAN) yaku_map.set("嶺上開花", 1);
21
- if(this.context.ctx.event === WinEvent.CHANKAN) yaku_map.set("槍槓", 1);
22
- if(this.context.ctx.event === WinEvent.HAITEI) yaku_map.set("海底摸月", 1);
23
- if(this.context.ctx.event === WinEvent.HOUTEI) yaku_map.set("河底撈魚", 1);
21
+ if(this.context.ctx.event === WinEvent.RINSHAN) yakuDetails.add("嶺上開花", 1);
22
+ if(this.context.ctx.event === WinEvent.CHANKAN) yakuDetails.add("槍槓", 1);
23
+ if(this.context.ctx.event === WinEvent.HAITEI) yakuDetails.add("海底摸月", 1);
24
+ if(this.context.ctx.event === WinEvent.HOUTEI) yakuDetails.add("河底撈魚", 1);
24
25
 
25
- if(yaku_map.size > 0 && this.context.ctx.dora > 0){
26
- yaku_map.set("ドラ", this.context.ctx.dora);
26
+ if(yakuDetails.length > 0 && this.context.ctx.dora > 0){
27
+ yakuDetails.add("ドラ", this.context.ctx.dora);
27
28
  }
28
29
 
29
- return yaku_map;
30
+ return yakuDetails;
30
31
  }
31
32
  }
@@ -1,6 +1,7 @@
1
1
  import { YakumanChecker } from './YakumanChecker.js';
2
2
  import { YakuContext } from './YakuContext.js';
3
3
  import { NormalYakuChecker } from './NormalYakuChecker.js';
4
+ import { YakuDetails } from './YakuDetails.js';
4
5
 
5
6
  export class YakuChecker {
6
7
  private context: YakuContext
@@ -9,18 +10,18 @@ export class YakuChecker {
9
10
  this.context = context;
10
11
  }
11
12
 
12
- check(): Map<string, number> {
13
+ check(): YakuDetails {
13
14
  //手牌と鳴き(カンを考慮して鳴き一つを3と数える)が計14枚かどうか確認する
14
15
  const tehai_num = this.context.hais.length;
15
16
  const furo_num = this.context.melds.length;
16
- if(tehai_num + furo_num * 3 !== 14) return new Map<string, number>();
17
+ if(tehai_num + furo_num * 3 !== 14) return new YakuDetails();
17
18
 
18
- const yakuman_map = new YakumanChecker(this.context).check();
19
- if(yakuman_map.size === 0){
19
+ const yakumanDetails: YakuDetails = new YakumanChecker(this.context).check();
20
+ if(yakumanDetails.length === 0){
20
21
  return new NormalYakuChecker(this.context).check();
21
22
  }
22
23
  else{
23
- return yakuman_map;
24
+ return yakumanDetails;
24
25
  }
25
26
  }
26
27
  }
@@ -0,0 +1,11 @@
1
+ export class YakuDetail{
2
+ readonly yakuName: string;
3
+ readonly han: number;
4
+ readonly isYakuman: boolean;
5
+
6
+ constructor(yakuName: string, han: number, isYakuman?: boolean){
7
+ this.yakuName = yakuName;
8
+ this.han = han;
9
+ this.isYakuman = isYakuman ?? false;
10
+ }
11
+ }
@@ -0,0 +1,42 @@
1
+ import { YakuDetail } from "./YakuDetail";
2
+
3
+ export class YakuDetails{
4
+ private details: YakuDetail[];
5
+
6
+ constructor(details: YakuDetail[] = []) {
7
+ this.details = details;
8
+ }
9
+
10
+ add(yakuName: string, han: number, isYakuman?: boolean){
11
+ this.details.push(new YakuDetail(yakuName, han, isYakuman ?? false));
12
+ }
13
+
14
+ has(yakuName: string){
15
+ return this.details.some(detail => detail.yakuName === yakuName);
16
+ }
17
+
18
+ delete(yakuName: string){
19
+ this.details = this.details.filter(detail => detail.yakuName !== yakuName);
20
+ }
21
+
22
+ calcHonsuu(){
23
+ return this.details.reduce((sum, val) => sum + val.han, 0);
24
+ }
25
+
26
+ isIncludeYakuman(){
27
+ return this.details.some(detail => detail.isYakuman);
28
+ }
29
+
30
+ toMap(){
31
+ return new Map(
32
+ this.details.map(detail => [
33
+ detail.yakuName,
34
+ detail.han
35
+ ])
36
+ );
37
+ }
38
+
39
+ get length(){
40
+ return this.details.length;
41
+ }
42
+ }
@@ -1,5 +1,7 @@
1
1
  import { WinEvent } from '../MahjongConsts.js';
2
2
  import { YakuContext } from './YakuContext.js';
3
+ import { YakuDetail } from './YakuDetail.js';
4
+ import { YakuDetails } from './YakuDetails.js';
3
5
  import { YakumanCheckers } from './index.js';
4
6
 
5
7
  export class YakumanChecker{
@@ -10,25 +12,25 @@ export class YakumanChecker{
10
12
  }
11
13
 
12
14
  //役判定
13
- check(): Map<string, number> {
15
+ check(): YakuDetails {
14
16
  const excludes = [
15
17
  { main: "純正九蓮宝燈", sub: "九蓮宝燈"},
16
18
  { main: "四暗刻単騎", sub: "四暗刻"},
17
19
  { main: "国士無双13面待ち", sub: "国士無双"},
18
20
  ];
19
- const yaku_map: Map<string, number> = new Map();
20
- if(this.context.ctx.event === WinEvent.TENHO) yaku_map.set("天和", 13);
21
- if(this.context.ctx.event === WinEvent.CHIHO) yaku_map.set("地和", 13);
21
+ const yakuDetails: YakuDetails = new YakuDetails();
22
+ if(this.context.ctx.event === WinEvent.TENHO) yakuDetails.add("天和", 13, true);
23
+ if(this.context.ctx.event === WinEvent.CHIHO) yakuDetails.add("地和", 13, true);
22
24
 
23
25
  for(const Checker of YakumanCheckers) {
24
26
  const checker = Checker(this.context);
25
- if(checker.check()) yaku_map.set(checker.getName(), checker.getHan());
27
+ if(checker.check()) yakuDetails.add(checker.getName(), checker.getHan(), true);
26
28
  }
27
29
 
28
30
  for(const { main, sub } of excludes) {
29
- if(yaku_map.has(main)) yaku_map.delete(sub);
31
+ if(yakuDetails.has(main)) yakuDetails.delete(sub);
30
32
  }
31
33
 
32
- return yaku_map;
34
+ return yakuDetails;
33
35
  }
34
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mahjong_engine",
3
- "version": "1.1.3",
3
+ "version": "1.1.5",
4
4
  "description": "mahjong",
5
5
  "homepage": "https://github.com/daicharn/IsTheOrderaMahjong#readme",
6
6
  "bugs": {
@@ -1,6 +1,7 @@
1
1
  import { hanNameCase } from "./testConsts";
2
2
  import { casesHanName } from './tensuu/hanName';
3
3
  import { BlockHaisList, Hai, PlayerContext, PlayerHand, ScoreResolver, TILE, YakuContext } from "../modules";
4
+ import { YakuDetails } from "../modules/yaku/YakuDetails";
4
5
 
5
6
  const testcases: hanNameCase[] = casesHanName;
6
7
 
@@ -11,7 +12,7 @@ testcases.forEach(testcase => {
11
12
  new PlayerHand([], []),
12
13
  new PlayerContext({agariHai: new Hai(TILE.BACK), isTsumo: false, playerWind: TILE.WIND.EAST, roundWind: TILE.WIND.EAST}),
13
14
  new BlockHaisList());
14
- const result = new ScoreResolver(contextStub, new Map()).hanName(testcase.han);
15
+ const result = new ScoreResolver(contextStub, new YakuDetails()).hanName(testcase.han, testcase.isYakuman);
15
16
  expect(result).toEqual(testcase.expected);
16
17
  });
17
18
  });
@@ -0,0 +1,42 @@
1
+ export const casesChitoi = [
2
+ {
3
+ name: "chitoi_1",
4
+ hais: [1,1,4,4,9,9,13,13,17,17,21,21,28,28],
5
+ expected: -1
6
+ },
7
+ {
8
+ name: "chitoi_2",
9
+ hais: [1,1,4,4,9,9,13,13,17,17,21,21,28],
10
+ expected: 0
11
+ },
12
+ {
13
+ name: "chitoi_3",
14
+ hais: [2,2,2,6,6,9,9,14,14,19,19,21,21],
15
+ expected: 1
16
+ },
17
+ {
18
+ name: "chitoi_4",
19
+ hais: [2,2,2,5,7,9,9,14,14,19,19,21,21],
20
+ expected: 1
21
+ },
22
+ {
23
+ name: "chitoi_5",
24
+ hais: [1,1,1,5,5,9,9,13,13,18,18,23,23],
25
+ expected: 1
26
+ },
27
+ {
28
+ name: "chitoi_6",
29
+ hais: [2,2,2,2,7,9,9,14,14,19,19,21,21],
30
+ expected: 2
31
+ },
32
+ {
33
+ name: "chitoi_7",
34
+ hais: [2,2,2,2,7,9,11,14,14,19,19,21,21],
35
+ expected: 2
36
+ },
37
+ {
38
+ name: "chitoi_8",
39
+ hais: [1,4,9,11,14,19,21,23,24,28,29,30,31],
40
+ expected: 6
41
+ },
42
+ ]
@@ -0,0 +1,23 @@
1
+
2
+ export const casesKokushi = [
3
+ {
4
+ name: "kokushi_1",
5
+ hais: [1,9,10,18,19,27,28,29,30,31,32,33,34],
6
+ expected: 0
7
+ },
8
+ {
9
+ name: "kokushi_2",
10
+ hais: [1,9,10,10,19,27,28,29,30,31,32,33,34],
11
+ expected: 0
12
+ },
13
+ {
14
+ name: "kokushi_3",
15
+ hais: [1,9,10,17,19,27,28,29,30,31,32,33,34],
16
+ expected: 1
17
+ },
18
+ {
19
+ name: "kokushi_4",
20
+ hais: [1,9,10,10,10,27,28,29,30,31,32,33,34],
21
+ expected: 1
22
+ },
23
+ ]
@@ -1,4 +1,4 @@
1
- export const cases1 = [
1
+ export const casesNormal = [
2
2
  {
3
3
  name: "naki_1_1",
4
4
  hais: [1,2,3,4,5,6,7,8,10,11],
@@ -69,6 +69,11 @@ export const cases1 = [
69
69
  hais: [1,2,3,4,5,6,7,28,28,31,31,32,32],
70
70
  expected: 1
71
71
  },
72
+ {
73
+ name: "shanten1_5",
74
+ hais: [1,1,1,1,4,4,4,4,7,7,7,7,9],
75
+ expected: 1
76
+ },
72
77
  {
73
78
  name: "shanten2_1",
74
79
  hais: [1,1,1,2,5,11,12,12,13,14,15,17,18],
@@ -108,35 +113,5 @@ export const cases1 = [
108
113
  name: "shanten6_3",
109
114
  hais: [1,4,8,11,14,17,22,27,28,29,30,32,33],
110
115
  expected: 6
111
- },
112
- {
113
- name: "chitoi_1",
114
- hais: [1,1,4,4,9,9,13,13,17,17,21,21,28,28],
115
- expected: -1
116
- },
117
- {
118
- name: "chitoi_2",
119
- hais: [1,1,4,4,9,9,13,13,17,17,21,21,28],
120
- expected: 0
121
- },
122
- {
123
- name: "kokushi_1",
124
- hais: [1,9,10,18,19,27,28,29,30,31,32,33,34],
125
- expected: 0
126
- },
127
- {
128
- name: "kokushi_2",
129
- hais: [1,9,10,10,19,27,28,29,30,31,32,33,34],
130
- expected: 0
131
- },
132
- {
133
- name: "kokushi_3",
134
- hais: [1,9,10,17,19,27,28,29,30,31,32,33,34],
135
- expected: 1
136
- },
137
- {
138
- name: "kokushi_4",
139
- hais: [1,9,10,10,10,27,28,29,30,31,32,33,34],
140
- expected: 1
141
- },
116
+ }
142
117
  ]
@@ -1,5 +1,7 @@
1
1
  import { Hai } from '../modules/Hai';
2
- import { cases1 } from './shanten/test1';
2
+ import { casesNormal } from './shanten/normal';
3
+ import { casesChitoi } from './shanten/chitoitsu';
4
+ import { casesKokushi } from './shanten/kokushi';
3
5
  import { ShantenCalculator } from '../modules/ShantenCalculator';
4
6
 
5
7
  type ShantenCase = {
@@ -9,7 +11,9 @@ type ShantenCase = {
9
11
  };
10
12
 
11
13
  const testcases: Map<string, ShantenCase[]> = new Map();
12
- testcases.set("case1", cases1);
14
+ testcases.set("normal", casesNormal);
15
+ testcases.set("chitoitsu", casesChitoi);
16
+ testcases.set("kokushi", casesKokushi);
13
17
 
14
18
  testcases.forEach((value, key) => {
15
19
  describe(key, () => {
@@ -61,10 +61,8 @@ export const caseFu: TehaiCase<FuSpec[][]>[] = [
61
61
  kuitan: true,
62
62
  melds: [
63
63
  {hai: 2, type: MeldType.CHI},
64
- {hai: 4, type: MeldType.CHI},
65
- {hai: 6, type: MeldType.CHI},
66
64
  ] as MeldSpec[],
67
- hais: [12,13,14,16,16],
65
+ hais: [4,5,6,7,8,9,12,13,14,16,16],
68
66
  expected: [
69
67
  [{name: "喰い平和", fu: 30}]
70
68
  ] as FuSpec[][]
@@ -77,26 +75,8 @@ export const caseFu: TehaiCase<FuSpec[][]>[] = [
77
75
  kuitan: true,
78
76
  melds: [
79
77
  {hai: 1, type: MeldType.CHI},
80
- {hai: 7, type: MeldType.CHI},
81
- {hai: 10, type: MeldType.CHI},
82
- ] as MeldSpec[],
83
- hais: [16,17,18,27,27],
84
- expected: [
85
- [{name: "喰い平和", fu: 30}]
86
- ] as FuSpec[][]
87
- },
88
- {
89
- name: "kuipinfu_4",
90
- desc: "喰い平和",
91
- agariHai: 18,
92
- isTsumo: false,
93
- kuitan: true,
94
- melds: [
95
- {hai: 1, type: MeldType.CHI},
96
- {hai: 7, type: MeldType.CHI},
97
- {hai: 10, type: MeldType.CHI},
98
78
  ] as MeldSpec[],
99
- hais: [16,17,18,29,29],
79
+ hais: [7,8,9,10,11,12,16,17,18,27,27],
100
80
  expected: [
101
81
  [{name: "喰い平和", fu: 30}]
102
82
  ] as FuSpec[][]
@@ -5,114 +5,147 @@ export const casesHanName: hanNameCase[] = [
5
5
  name: "hon1",
6
6
  desc: "なし",
7
7
  han: 1,
8
+ isYakuman: false,
8
9
  expected: ""
9
10
  },
10
11
  {
11
12
  name: "hon2",
12
13
  desc: "なし",
13
14
  han: 2,
15
+ isYakuman: false,
14
16
  expected: ""
15
17
  },
16
18
  {
17
19
  name: "hon3",
18
20
  desc: "なし",
19
21
  han: 3,
22
+ isYakuman: false,
20
23
  expected: ""
21
24
  },
22
25
  {
23
26
  name: "hon4",
24
27
  desc: "なし",
25
28
  han: 4,
29
+ isYakuman: false,
26
30
  expected: ""
27
31
  },
28
32
  {
29
33
  name: "hon5",
30
34
  desc: "満貫",
31
35
  han: 5,
36
+ isYakuman: false,
32
37
  expected: "満貫"
33
38
  },
34
39
  {
35
40
  name: "hon6",
36
41
  desc: "跳満",
37
42
  han: 6,
43
+ isYakuman: false,
38
44
  expected: "跳満"
39
45
  },
40
46
  {
41
47
  name: "hon7",
42
48
  desc: "跳満",
43
49
  han: 7,
50
+ isYakuman: false,
44
51
  expected: "跳満"
45
52
  },
46
53
  {
47
54
  name: "hon8",
48
55
  desc: "跳満",
49
56
  han: 8,
57
+ isYakuman: false,
50
58
  expected: "倍満"
51
59
  },
52
60
  {
53
61
  name: "hon9",
54
62
  desc: "倍満",
55
63
  han: 9,
64
+ isYakuman: false,
56
65
  expected: "倍満"
57
66
  },
58
67
  {
59
68
  name: "hon10",
60
69
  desc: "倍満",
61
70
  han: 10,
71
+ isYakuman: false,
62
72
  expected: "倍満"
63
73
  },
64
74
  {
65
75
  name: "hon11",
66
76
  desc: "三倍満",
67
77
  han: 11,
78
+ isYakuman: false,
68
79
  expected: "三倍満"
69
80
  },
70
81
  {
71
82
  name: "hon12",
72
83
  desc: "三倍満",
73
84
  han: 12,
85
+ isYakuman: false,
74
86
  expected: "三倍満"
75
87
  },
76
88
  {
77
89
  name: "hon13",
78
90
  desc: "役満以上",
79
91
  han: 13,
92
+ isYakuman: false,
93
+ expected: "数え役満"
94
+ },
95
+ {
96
+ name: "hon13",
97
+ desc: "役満以上",
98
+ han: 13,
99
+ isYakuman: true,
80
100
  expected: "役満"
81
101
  },
82
102
  {
83
103
  name: "hon26",
84
104
  desc: "役満以上",
85
105
  han: 26,
106
+ isYakuman: false,
107
+ expected: "数え役満"
108
+ },
109
+ {
110
+ name: "hon26",
111
+ desc: "役満以上",
112
+ han: 26,
113
+ isYakuman: true,
86
114
  expected: "二倍役満"
87
115
  },
88
116
  {
89
117
  name: "hon39",
90
118
  desc: "役満以上",
91
119
  han: 39,
120
+ isYakuman: true,
92
121
  expected: "三倍役満"
93
122
  },
94
123
  {
95
124
  name: "hon52",
96
125
  desc: "役満以上",
97
126
  han: 52,
127
+ isYakuman: true,
98
128
  expected: "四倍役満"
99
129
  },
100
130
  {
101
131
  name: "hon65",
102
132
  desc: "役満以上",
103
133
  han: 65,
134
+ isYakuman: true,
104
135
  expected: "五倍役満"
105
136
  },
106
137
  {
107
138
  name: "hon78",
108
139
  desc: "役満以上",
109
140
  han: 78,
141
+ isYakuman: true,
110
142
  expected: "六倍役満"
111
143
  },
112
144
  {
113
145
  name: "hon79",
114
146
  desc: "役満以上",
115
147
  han: 79,
148
+ isYakuman: true,
116
149
  expected: "六倍役満"
117
150
  },
118
151
  ]
@@ -282,11 +282,27 @@ export const caseNum: TensuuNumCase[] = [
282
282
  fusuu: 20,
283
283
  expected: new TensuuResult(8000, 48000, 32000, 16000, {oya:16000, ko:8000})
284
284
  },
285
+ {
286
+ name: "hon13",
287
+ desc: "13翻",
288
+ honsuu: 13,
289
+ fusuu: 20,
290
+ isYakuman: true,
291
+ expected: new TensuuResult(8000, 48000, 32000, 16000, {oya:16000, ko:8000})
292
+ },
293
+ {
294
+ name: "hon26",
295
+ desc: "26翻",
296
+ honsuu: 26,
297
+ fusuu: 20,
298
+ expected: new TensuuResult(8000, 48000, 32000, 16000, {oya:16000, ko:8000})
299
+ },
285
300
  {
286
301
  name: "hon26",
287
302
  desc: "26翻",
288
303
  honsuu: 26,
289
304
  fusuu: 20,
305
+ isYakuman: true,
290
306
  expected: new TensuuResult(16000, 96000, 64000, 32000, {oya:32000, ko:16000})
291
307
  },
292
308
  {
@@ -294,6 +310,7 @@ export const caseNum: TensuuNumCase[] = [
294
310
  desc: "39翻",
295
311
  honsuu: 39,
296
312
  fusuu: 20,
313
+ isYakuman: true,
297
314
  expected: new TensuuResult(24000, 144000, 96000, 48000, {oya:48000, ko:24000})
298
315
  },
299
316
  {
@@ -301,6 +318,7 @@ export const caseNum: TensuuNumCase[] = [
301
318
  desc: "52翻",
302
319
  honsuu: 52,
303
320
  fusuu: 20,
321
+ isYakuman: true,
304
322
  expected: new TensuuResult(32000, 192000, 128000, 64000, {oya:64000, ko:32000})
305
323
  },
306
324
  {
@@ -308,6 +326,7 @@ export const caseNum: TensuuNumCase[] = [
308
326
  desc: "65翻",
309
327
  honsuu: 65,
310
328
  fusuu: 20,
329
+ isYakuman: true,
311
330
  expected: new TensuuResult(40000, 240000, 160000, 80000, {oya:80000, ko:40000})
312
331
  },
313
332
  {
@@ -315,6 +334,7 @@ export const caseNum: TensuuNumCase[] = [
315
334
  desc: "78翻",
316
335
  honsuu: 78,
317
336
  fusuu: 20,
337
+ isYakuman: true,
318
338
  expected: new TensuuResult(48000, 288000, 192000, 96000, {oya:96000, ko:48000})
319
339
  },
320
340
  ];
@@ -8,7 +8,7 @@ caseNum.forEach(casenum => testcases.push(casenum));
8
8
  testcases.forEach(testcase => {
9
9
  describe(testcase.desc, () => {
10
10
  test(testcase.name, () => {
11
- const expected = TensuuCalculator.calcTensuu(testcase.honsuu, testcase.fusuu);
11
+ const expected = TensuuCalculator.calcTensuu(testcase.honsuu, testcase.fusuu, testcase.isYakuman ?? false);
12
12
  expect(testcase.expected).toEqual(expected);
13
13
  });
14
14
  });