mahjong_engine 1.0.0

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 (332) hide show
  1. package/.github/workflows/qlty-coverage.yml +36 -0
  2. package/dist/BlockDivider.d.ts +11 -0
  3. package/dist/BlockDivider.d.ts.map +1 -0
  4. package/dist/BlockDivider.js +114 -0
  5. package/dist/BlockDivider.js.map +1 -0
  6. package/dist/BlockHais.d.ts +26 -0
  7. package/dist/BlockHais.d.ts.map +1 -0
  8. package/dist/BlockHais.js +77 -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 +85 -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 +71 -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 +44 -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 +3 -0
  25. package/dist/IMentsu.js.map +1 -0
  26. package/dist/MachiCalculator.d.ts +7 -0
  27. package/dist/MachiCalculator.d.ts.map +1 -0
  28. package/dist/MachiCalculator.js +25 -0
  29. package/dist/MachiCalculator.js.map +1 -0
  30. package/dist/MahjongConsts.d.ts +39 -0
  31. package/dist/MahjongConsts.d.ts.map +1 -0
  32. package/dist/MahjongConsts.js +54 -0
  33. package/dist/MahjongConsts.js.map +1 -0
  34. package/dist/Meld.d.ts +25 -0
  35. package/dist/Meld.d.ts.map +1 -0
  36. package/dist/Meld.js +72 -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 +18 -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 +23 -0
  45. package/dist/MentsuAnalyzer.js.map +1 -0
  46. package/dist/PlayerContext.d.ts +28 -0
  47. package/dist/PlayerContext.d.ts.map +1 -0
  48. package/dist/PlayerContext.js +28 -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 +28 -0
  53. package/dist/PlayerHand.js.map +1 -0
  54. package/dist/index.d.ts +12 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +26 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/tensuu/FuCalculator.d.ts +15 -0
  59. package/dist/tensuu/FuCalculator.d.ts.map +1 -0
  60. package/dist/tensuu/FuCalculator.js +104 -0
  61. package/dist/tensuu/FuCalculator.js.map +1 -0
  62. package/dist/tensuu/FuDetail.d.ts +8 -0
  63. package/dist/tensuu/FuDetail.d.ts.map +1 -0
  64. package/dist/tensuu/FuDetail.js +15 -0
  65. package/dist/tensuu/FuDetail.js.map +1 -0
  66. package/dist/tensuu/ScoreResolver.d.ts +12 -0
  67. package/dist/tensuu/ScoreResolver.d.ts.map +1 -0
  68. package/dist/tensuu/ScoreResolver.js +33 -0
  69. package/dist/tensuu/ScoreResolver.js.map +1 -0
  70. package/dist/tensuu/ScoreResult.d.ts +11 -0
  71. package/dist/tensuu/ScoreResult.d.ts.map +1 -0
  72. package/dist/tensuu/ScoreResult.js +19 -0
  73. package/dist/tensuu/ScoreResult.js.map +1 -0
  74. package/dist/tensuu/TensuuCalculator.d.ts +13 -0
  75. package/dist/tensuu/TensuuCalculator.d.ts.map +1 -0
  76. package/dist/tensuu/TensuuCalculator.js +39 -0
  77. package/dist/tensuu/TensuuCalculator.js.map +1 -0
  78. package/dist/tensuu/TensuuResult.d.ts +15 -0
  79. package/dist/tensuu/TensuuResult.d.ts.map +1 -0
  80. package/dist/tensuu/TensuuResult.js +19 -0
  81. package/dist/tensuu/TensuuResult.js.map +1 -0
  82. package/dist/tileDefs.d.ts +42 -0
  83. package/dist/tileDefs.d.ts.map +1 -0
  84. package/dist/tileDefs.js +23 -0
  85. package/dist/tileDefs.js.map +1 -0
  86. package/dist/yaku/NormalYakuChecker.d.ts +7 -0
  87. package/dist/yaku/NormalYakuChecker.d.ts.map +1 -0
  88. package/dist/yaku/NormalYakuChecker.js +37 -0
  89. package/dist/yaku/NormalYakuChecker.js.map +1 -0
  90. package/dist/yaku/YakuChecker.d.ts +7 -0
  91. package/dist/yaku/YakuChecker.d.ts.map +1 -0
  92. package/dist/yaku/YakuChecker.js +27 -0
  93. package/dist/yaku/YakuChecker.js.map +1 -0
  94. package/dist/yaku/YakuCheckerBase.d.ts +33 -0
  95. package/dist/yaku/YakuCheckerBase.d.ts.map +1 -0
  96. package/dist/yaku/YakuCheckerBase.js +154 -0
  97. package/dist/yaku/YakuCheckerBase.js.map +1 -0
  98. package/dist/yaku/YakuContext.d.ts +14 -0
  99. package/dist/yaku/YakuContext.d.ts.map +1 -0
  100. package/dist/yaku/YakuContext.js +21 -0
  101. package/dist/yaku/YakuContext.js.map +1 -0
  102. package/dist/yaku/YakumanChecker.d.ts +7 -0
  103. package/dist/yaku/YakumanChecker.d.ts.map +1 -0
  104. package/dist/yaku/YakumanChecker.js +36 -0
  105. package/dist/yaku/YakumanChecker.js.map +1 -0
  106. package/dist/yaku/index.d.ts +6 -0
  107. package/dist/yaku/index.d.ts.map +1 -0
  108. package/dist/yaku/index.js +79 -0
  109. package/dist/yaku/index.js.map +1 -0
  110. package/dist/yaku/normal/ChinitsuChecker.d.ts +9 -0
  111. package/dist/yaku/normal/ChinitsuChecker.d.ts.map +1 -0
  112. package/dist/yaku/normal/ChinitsuChecker.js +24 -0
  113. package/dist/yaku/normal/ChinitsuChecker.js.map +1 -0
  114. package/dist/yaku/normal/ChitoitsuChecker.d.ts +8 -0
  115. package/dist/yaku/normal/ChitoitsuChecker.d.ts.map +1 -0
  116. package/dist/yaku/normal/ChitoitsuChecker.js +20 -0
  117. package/dist/yaku/normal/ChitoitsuChecker.js.map +1 -0
  118. package/dist/yaku/normal/DoukouChecker.d.ts +8 -0
  119. package/dist/yaku/normal/DoukouChecker.d.ts.map +1 -0
  120. package/dist/yaku/normal/DoukouChecker.js +17 -0
  121. package/dist/yaku/normal/DoukouChecker.js.map +1 -0
  122. package/dist/yaku/normal/HonchanChecker.d.ts +8 -0
  123. package/dist/yaku/normal/HonchanChecker.d.ts.map +1 -0
  124. package/dist/yaku/normal/HonchanChecker.js +22 -0
  125. package/dist/yaku/normal/HonchanChecker.js.map +1 -0
  126. package/dist/yaku/normal/HonitsuChecker.d.ts +8 -0
  127. package/dist/yaku/normal/HonitsuChecker.d.ts.map +1 -0
  128. package/dist/yaku/normal/HonitsuChecker.js +20 -0
  129. package/dist/yaku/normal/HonitsuChecker.js.map +1 -0
  130. package/dist/yaku/normal/HonrotoChecker.d.ts +8 -0
  131. package/dist/yaku/normal/HonrotoChecker.d.ts.map +1 -0
  132. package/dist/yaku/normal/HonrotoChecker.js +21 -0
  133. package/dist/yaku/normal/HonrotoChecker.js.map +1 -0
  134. package/dist/yaku/normal/IipekoChecker.d.ts +8 -0
  135. package/dist/yaku/normal/IipekoChecker.d.ts.map +1 -0
  136. package/dist/yaku/normal/IipekoChecker.js +18 -0
  137. package/dist/yaku/normal/IipekoChecker.js.map +1 -0
  138. package/dist/yaku/normal/IttsuuChecker.d.ts +8 -0
  139. package/dist/yaku/normal/IttsuuChecker.d.ts.map +1 -0
  140. package/dist/yaku/normal/IttsuuChecker.js +25 -0
  141. package/dist/yaku/normal/IttsuuChecker.js.map +1 -0
  142. package/dist/yaku/normal/JunchanChecker.d.ts +8 -0
  143. package/dist/yaku/normal/JunchanChecker.d.ts.map +1 -0
  144. package/dist/yaku/normal/JunchanChecker.js +19 -0
  145. package/dist/yaku/normal/JunchanChecker.js.map +1 -0
  146. package/dist/yaku/normal/KazehaiChecker.d.ts +11 -0
  147. package/dist/yaku/normal/KazehaiChecker.d.ts.map +1 -0
  148. package/dist/yaku/normal/KazehaiChecker.js +24 -0
  149. package/dist/yaku/normal/KazehaiChecker.js.map +1 -0
  150. package/dist/yaku/normal/MenzenTsumoChecker.d.ts +8 -0
  151. package/dist/yaku/normal/MenzenTsumoChecker.d.ts.map +1 -0
  152. package/dist/yaku/normal/MenzenTsumoChecker.js +16 -0
  153. package/dist/yaku/normal/MenzenTsumoChecker.js.map +1 -0
  154. package/dist/yaku/normal/PinfuChecker.d.ts +8 -0
  155. package/dist/yaku/normal/PinfuChecker.d.ts.map +1 -0
  156. package/dist/yaku/normal/PinfuChecker.js +30 -0
  157. package/dist/yaku/normal/PinfuChecker.js.map +1 -0
  158. package/dist/yaku/normal/RenpuuhaiChecker.d.ts +8 -0
  159. package/dist/yaku/normal/RenpuuhaiChecker.d.ts.map +1 -0
  160. package/dist/yaku/normal/RenpuuhaiChecker.js +22 -0
  161. package/dist/yaku/normal/RenpuuhaiChecker.js.map +1 -0
  162. package/dist/yaku/normal/RyanpekoChecker.d.ts +8 -0
  163. package/dist/yaku/normal/RyanpekoChecker.d.ts.map +1 -0
  164. package/dist/yaku/normal/RyanpekoChecker.js +18 -0
  165. package/dist/yaku/normal/RyanpekoChecker.js.map +1 -0
  166. package/dist/yaku/normal/SanankoChecker.d.ts +8 -0
  167. package/dist/yaku/normal/SanankoChecker.d.ts.map +1 -0
  168. package/dist/yaku/normal/SanankoChecker.js +17 -0
  169. package/dist/yaku/normal/SanankoChecker.js.map +1 -0
  170. package/dist/yaku/normal/SankantsuChecker.d.ts +8 -0
  171. package/dist/yaku/normal/SankantsuChecker.d.ts.map +1 -0
  172. package/dist/yaku/normal/SankantsuChecker.js +17 -0
  173. package/dist/yaku/normal/SankantsuChecker.js.map +1 -0
  174. package/dist/yaku/normal/SanshokuChecker.d.ts +8 -0
  175. package/dist/yaku/normal/SanshokuChecker.d.ts.map +1 -0
  176. package/dist/yaku/normal/SanshokuChecker.js +17 -0
  177. package/dist/yaku/normal/SanshokuChecker.js.map +1 -0
  178. package/dist/yaku/normal/ShosangenChecker.d.ts +8 -0
  179. package/dist/yaku/normal/ShosangenChecker.d.ts.map +1 -0
  180. package/dist/yaku/normal/ShosangenChecker.js +20 -0
  181. package/dist/yaku/normal/ShosangenChecker.js.map +1 -0
  182. package/dist/yaku/normal/TanyaoChecker.d.ts +8 -0
  183. package/dist/yaku/normal/TanyaoChecker.d.ts.map +1 -0
  184. package/dist/yaku/normal/TanyaoChecker.js +18 -0
  185. package/dist/yaku/normal/TanyaoChecker.js.map +1 -0
  186. package/dist/yaku/normal/ToitoiChecker.d.ts +8 -0
  187. package/dist/yaku/normal/ToitoiChecker.d.ts.map +1 -0
  188. package/dist/yaku/normal/ToitoiChecker.js +17 -0
  189. package/dist/yaku/normal/ToitoiChecker.js.map +1 -0
  190. package/dist/yaku/normal/YakuhaiChecker.d.ts +9 -0
  191. package/dist/yaku/normal/YakuhaiChecker.d.ts.map +1 -0
  192. package/dist/yaku/normal/YakuhaiChecker.js +22 -0
  193. package/dist/yaku/normal/YakuhaiChecker.js.map +1 -0
  194. package/dist/yaku/yakuman/ChinrotoChecker.d.ts +6 -0
  195. package/dist/yaku/yakuman/ChinrotoChecker.d.ts.map +1 -0
  196. package/dist/yaku/yakuman/ChinrotoChecker.js +13 -0
  197. package/dist/yaku/yakuman/ChinrotoChecker.js.map +1 -0
  198. package/dist/yaku/yakuman/Churen9Checker.d.ts +10 -0
  199. package/dist/yaku/yakuman/Churen9Checker.d.ts.map +1 -0
  200. package/dist/yaku/yakuman/Churen9Checker.js +17 -0
  201. package/dist/yaku/yakuman/Churen9Checker.js.map +1 -0
  202. package/dist/yaku/yakuman/ChurenChecker.d.ts +7 -0
  203. package/dist/yaku/yakuman/ChurenChecker.d.ts.map +1 -0
  204. package/dist/yaku/yakuman/ChurenChecker.js +33 -0
  205. package/dist/yaku/yakuman/ChurenChecker.js.map +1 -0
  206. package/dist/yaku/yakuman/DaisangenChecker.d.ts +6 -0
  207. package/dist/yaku/yakuman/DaisangenChecker.d.ts.map +1 -0
  208. package/dist/yaku/yakuman/DaisangenChecker.js +15 -0
  209. package/dist/yaku/yakuman/DaisangenChecker.js.map +1 -0
  210. package/dist/yaku/yakuman/DaisushiChecker.d.ts +8 -0
  211. package/dist/yaku/yakuman/DaisushiChecker.d.ts.map +1 -0
  212. package/dist/yaku/yakuman/DaisushiChecker.js +20 -0
  213. package/dist/yaku/yakuman/DaisushiChecker.js.map +1 -0
  214. package/dist/yaku/yakuman/ExtendedYakumanChecker.d.ts +9 -0
  215. package/dist/yaku/yakuman/ExtendedYakumanChecker.d.ts.map +1 -0
  216. package/dist/yaku/yakuman/ExtendedYakumanChecker.js +18 -0
  217. package/dist/yaku/yakuman/ExtendedYakumanChecker.js.map +1 -0
  218. package/dist/yaku/yakuman/Kokushi13Checker.d.ts +10 -0
  219. package/dist/yaku/yakuman/Kokushi13Checker.d.ts.map +1 -0
  220. package/dist/yaku/yakuman/Kokushi13Checker.js +17 -0
  221. package/dist/yaku/yakuman/Kokushi13Checker.js.map +1 -0
  222. package/dist/yaku/yakuman/KokushiChecker.d.ts +7 -0
  223. package/dist/yaku/yakuman/KokushiChecker.d.ts.map +1 -0
  224. package/dist/yaku/yakuman/KokushiChecker.js +18 -0
  225. package/dist/yaku/yakuman/KokushiChecker.js.map +1 -0
  226. package/dist/yaku/yakuman/RyuisoChecker.d.ts +6 -0
  227. package/dist/yaku/yakuman/RyuisoChecker.d.ts.map +1 -0
  228. package/dist/yaku/yakuman/RyuisoChecker.js +17 -0
  229. package/dist/yaku/yakuman/RyuisoChecker.js.map +1 -0
  230. package/dist/yaku/yakuman/ShosushiChecker.d.ts +6 -0
  231. package/dist/yaku/yakuman/ShosushiChecker.d.ts.map +1 -0
  232. package/dist/yaku/yakuman/ShosushiChecker.js +15 -0
  233. package/dist/yaku/yakuman/ShosushiChecker.js.map +1 -0
  234. package/dist/yaku/yakuman/SuankoChecker.d.ts +7 -0
  235. package/dist/yaku/yakuman/SuankoChecker.d.ts.map +1 -0
  236. package/dist/yaku/yakuman/SuankoChecker.js +17 -0
  237. package/dist/yaku/yakuman/SuankoChecker.js.map +1 -0
  238. package/dist/yaku/yakuman/SuankoTankiChecker.d.ts +8 -0
  239. package/dist/yaku/yakuman/SuankoTankiChecker.d.ts.map +1 -0
  240. package/dist/yaku/yakuman/SuankoTankiChecker.js +28 -0
  241. package/dist/yaku/yakuman/SuankoTankiChecker.js.map +1 -0
  242. package/dist/yaku/yakuman/SukantsuChecker.d.ts +6 -0
  243. package/dist/yaku/yakuman/SukantsuChecker.d.ts.map +1 -0
  244. package/dist/yaku/yakuman/SukantsuChecker.js +12 -0
  245. package/dist/yaku/yakuman/SukantsuChecker.js.map +1 -0
  246. package/dist/yaku/yakuman/TsuisoChecker.d.ts +6 -0
  247. package/dist/yaku/yakuman/TsuisoChecker.d.ts.map +1 -0
  248. package/dist/yaku/yakuman/TsuisoChecker.js +13 -0
  249. package/dist/yaku/yakuman/TsuisoChecker.js.map +1 -0
  250. package/jest.config.js +8 -0
  251. package/modules/BlockDivider.ts +129 -0
  252. package/modules/BlockHais.ts +92 -0
  253. package/modules/BlockHaisList.ts +96 -0
  254. package/modules/Hai.ts +67 -0
  255. package/modules/Hais.ts +49 -0
  256. package/modules/IMentsu.ts +20 -0
  257. package/modules/MachiCalculator.ts +25 -0
  258. package/modules/MahjongConsts.ts +46 -0
  259. package/modules/Meld.ts +85 -0
  260. package/modules/Melds.ts +19 -0
  261. package/modules/MentsuAnalyzer.ts +37 -0
  262. package/modules/PlayerContext.ts +39 -0
  263. package/modules/PlayerHand.ts +32 -0
  264. package/modules/index.ts +11 -0
  265. package/modules/tensuu/FuCalculator.ts +118 -0
  266. package/modules/tensuu/FuDetail.ts +13 -0
  267. package/modules/tensuu/ScoreResolver.ts +35 -0
  268. package/modules/tensuu/ScoreResult.ts +24 -0
  269. package/modules/tensuu/TensuuCalculator.ts +40 -0
  270. package/modules/tensuu/TensuuResult.ts +21 -0
  271. package/modules/tileDefs.ts +24 -0
  272. package/modules/yaku/NormalYakuChecker.ts +31 -0
  273. package/modules/yaku/YakuChecker.ts +29 -0
  274. package/modules/yaku/YakuCheckerBase.ts +180 -0
  275. package/modules/yaku/YakuContext.ts +25 -0
  276. package/modules/yaku/YakumanChecker.ts +34 -0
  277. package/modules/yaku/index.ts +83 -0
  278. package/modules/yaku/normal/ChinitsuChecker.ts +25 -0
  279. package/modules/yaku/normal/ChitoitsuChecker.ts +20 -0
  280. package/modules/yaku/normal/DoukouChecker.ts +16 -0
  281. package/modules/yaku/normal/HonchanChecker.ts +24 -0
  282. package/modules/yaku/normal/HonitsuChecker.ts +20 -0
  283. package/modules/yaku/normal/HonrotoChecker.ts +23 -0
  284. package/modules/yaku/normal/IipekoChecker.ts +17 -0
  285. package/modules/yaku/normal/IttsuuChecker.ts +32 -0
  286. package/modules/yaku/normal/JunchanChecker.ts +20 -0
  287. package/modules/yaku/normal/KazehaiChecker.ts +25 -0
  288. package/modules/yaku/normal/MenzenTsumoChecker.ts +15 -0
  289. package/modules/yaku/normal/PinfuChecker.ts +26 -0
  290. package/modules/yaku/normal/RenpuuhaiChecker.ts +21 -0
  291. package/modules/yaku/normal/RyanpekoChecker.ts +17 -0
  292. package/modules/yaku/normal/SanankoChecker.ts +17 -0
  293. package/modules/yaku/normal/SankantsuChecker.ts +16 -0
  294. package/modules/yaku/normal/SanshokuChecker.ts +16 -0
  295. package/modules/yaku/normal/ShosangenChecker.ts +21 -0
  296. package/modules/yaku/normal/TanyaoChecker.ts +18 -0
  297. package/modules/yaku/normal/ToitoiChecker.ts +17 -0
  298. package/modules/yaku/normal/YakuhaiChecker.ts +22 -0
  299. package/modules/yaku/yakuman/ChinrotoChecker.ts +11 -0
  300. package/modules/yaku/yakuman/Churen9Checker.ts +16 -0
  301. package/modules/yaku/yakuman/ChurenChecker.ts +31 -0
  302. package/modules/yaku/yakuman/DaisangenChecker.ts +14 -0
  303. package/modules/yaku/yakuman/DaisushiChecker.ts +21 -0
  304. package/modules/yaku/yakuman/ExtendedYakumanChecker.ts +18 -0
  305. package/modules/yaku/yakuman/Kokushi13Checker.ts +16 -0
  306. package/modules/yaku/yakuman/KokushiChecker.ts +15 -0
  307. package/modules/yaku/yakuman/RyuisoChecker.ts +16 -0
  308. package/modules/yaku/yakuman/ShosushiChecker.ts +13 -0
  309. package/modules/yaku/yakuman/SuankoChecker.ts +14 -0
  310. package/modules/yaku/yakuman/SuankoTankiChecker.ts +28 -0
  311. package/modules/yaku/yakuman/SukantsuChecker.ts +9 -0
  312. package/modules/yaku/yakuman/TsuisoChecker.ts +10 -0
  313. package/package.json +28 -0
  314. package/tests/fu.test.ts +44 -0
  315. package/tests/machi/chinitsu.ts +137 -0
  316. package/tests/machi/chitoitsu.ts +12 -0
  317. package/tests/machi/kokushi.ts +22 -0
  318. package/tests/machi/maisuu.ts +77 -0
  319. package/tests/machi.test.ts +100 -0
  320. package/tests/machiType.test.ts +93 -0
  321. package/tests/score.test.ts +27 -0
  322. package/tests/tehaiCaseRunner.ts +57 -0
  323. package/tests/tensuu/fu.ts +272 -0
  324. package/tests/tensuu/score.ts +46 -0
  325. package/tests/tensuu/tensuuNum.ts +292 -0
  326. package/tests/tensuuFromNum.test.ts +15 -0
  327. package/tests/testConsts.ts +42 -0
  328. package/tests/toBlock.test.ts +155 -0
  329. package/tests/yaku/normal.ts +1046 -0
  330. package/tests/yaku/yakuman.ts +367 -0
  331. package/tests/yaku.test.ts +28 -0
  332. package/tsconfig.json +23 -0
@@ -0,0 +1,367 @@
1
+ import { MeldSpec, TehaiCase } from '../testConsts';
2
+ import { MeldType, WinEvent } from "../../modules/MahjongConsts";
3
+
4
+ export const casesYakuman: TehaiCase<Map<number, Map<string, number>>>[] = [
5
+ {
6
+ name: "tsuiso_1",
7
+ desc: "字一色",
8
+ agariHai: 29,
9
+ isTsumo: false,
10
+ melds: [] as MeldSpec[],
11
+ hais: [28,28,29,29,29,31,31,31,32,32,32,34,34,34],
12
+ expected: new Map([[0, new Map([["字一色", 13]])]])
13
+ },
14
+ {
15
+ name: "tsuiso_2",
16
+ desc: "字一色",
17
+ agariHai: 29,
18
+ isTsumo: true,
19
+ melds: [
20
+ {hai: 32, type: MeldType.PON},
21
+ {hai: 34, type: MeldType.PON},
22
+ ] as MeldSpec[],
23
+ hais: [28,28,29,29,29,31,31,31],
24
+ expected: new Map([[0, new Map([["字一色", 13]])]])
25
+ },
26
+ {
27
+ name: "tsuiso_3",
28
+ desc: "字一色",
29
+ agariHai: 29,
30
+ isTsumo: true,
31
+ melds: [] as MeldSpec[],
32
+ hais: [28,28,29,29,30,30,31,31,32,32,33,33,34,34],
33
+ expected: new Map([[0, new Map([["字一色", 13]])]])
34
+ },
35
+ {
36
+ name: "chinroto_1",
37
+ desc: "清老頭",
38
+ agariHai: 1,
39
+ isTsumo: false,
40
+ melds: [] as MeldSpec[],
41
+ hais: [1,1,1,9,9,9,10,10,18,18,18,27,27,27],
42
+ expected: new Map([[0, new Map([["清老頭", 13]])]])
43
+ },
44
+ {
45
+ name: "chinroto_2",
46
+ desc: "清老頭",
47
+ agariHai: 10,
48
+ isTsumo: true,
49
+ melds: [
50
+ {hai: 1, type: MeldType.PON},
51
+ {hai: 19, type: MeldType.PON},
52
+ ] as MeldSpec[],
53
+ hais: [9,9,9,10,10,18,18,18],
54
+ expected: new Map([[0, new Map([["清老頭", 13]])]])
55
+ },
56
+ {
57
+ name: "ryuiso_1",
58
+ desc: "緑一色",
59
+ agariHai: 21,
60
+ isTsumo: true,
61
+ melds: [] as MeldSpec[],
62
+ hais: [20,20,21,21,22,22,24,24,24,26,26,26,33,33],
63
+ expected: new Map([[0, new Map([["緑一色", 13]])]])
64
+ },
65
+ {
66
+ name: "ryuiso_2",
67
+ desc: "緑一色",
68
+ agariHai: 26,
69
+ isTsumo: true,
70
+ melds: [
71
+ {hai: 20, type: MeldType.CHI},
72
+ {hai: 33, type: MeldType.PON},
73
+ ] as MeldSpec[],
74
+ hais: [20,21,22,24,24,24,26,26],
75
+ expected: new Map([[0, new Map([["緑一色", 13]])]])
76
+ },
77
+ {
78
+ name: "daisushi_1",
79
+ desc: "大四喜",
80
+ agariHai: 30,
81
+ isTsumo: false,
82
+ melds: [] as MeldSpec[],
83
+ hais: [1,1,28,28,28,29,29,29,30,30,30,31,31,31],
84
+ expected: new Map([[0, new Map([["大四喜", 26]])]])
85
+ },
86
+ {
87
+ name: "daisushi_2",
88
+ desc: "大四喜",
89
+ agariHai: 30,
90
+ isTsumo: true,
91
+ melds: [] as MeldSpec[],
92
+ hais: [28,28,28,29,29,29,30,30,30,31,31,31,33,33],
93
+ expected: new Map([[0, new Map([["四暗刻", 13],["字一色", 13],["大四喜", 26]])]])
94
+ },
95
+ {
96
+ name: "daisushi_3",
97
+ desc: "大四喜",
98
+ agariHai: 30,
99
+ isTsumo: true,
100
+ melds: [
101
+ {hai: 29, type: MeldType.PON},
102
+ {hai: 31, type: MeldType.ANKAN},
103
+ ] as MeldSpec[],
104
+ hais: [26,26,28,28,28,30,30,30],
105
+ expected: new Map([[0, new Map([["大四喜", 26]])]])
106
+ },
107
+ {
108
+ name: "shosushi_1",
109
+ desc: "小四喜",
110
+ agariHai: 30,
111
+ isTsumo: false,
112
+ melds: [] as MeldSpec[],
113
+ hais: [1,1,1,28,28,28,29,29,30,30,30,31,31,31],
114
+ expected: new Map([[0, new Map([["小四喜", 13]])]])
115
+ },
116
+ {
117
+ name: "shosushi_2",
118
+ desc: "小四喜",
119
+ agariHai: 28,
120
+ isTsumo: true,
121
+ melds: [] as MeldSpec[],
122
+ hais: [28,28,28,29,29,29,30,30,31,31,31,33,33,33],
123
+ expected: new Map([[0, new Map([["字一色", 13],["小四喜", 13],["四暗刻", 13]])]])
124
+ },
125
+ {
126
+ name: "shosushi_3",
127
+ desc: "小四喜",
128
+ agariHai: 28,
129
+ isTsumo: true,
130
+ melds: [
131
+ {hai: 29, type: MeldType.PON},
132
+ {hai: 31, type: MeldType.PON},
133
+ ] as MeldSpec[],
134
+ hais: [25,26,27,28,28,30,30,30],
135
+ expected: new Map([[0, new Map([["小四喜", 13]])]])
136
+ },
137
+ {
138
+ name: "suanko_1",
139
+ desc: "四暗刻",
140
+ agariHai: 3,
141
+ isTsumo: true,
142
+ melds: [] as MeldSpec[],
143
+ hais: [3,3,3,7,7,7,12,12,12,24,24,24,31,31],
144
+ expected: new Map([[0, new Map([["四暗刻", 13]])]])
145
+ },
146
+ {
147
+ name: "suanko_2",
148
+ desc: "四暗刻",
149
+ agariHai: 3,
150
+ isTsumo: false,
151
+ melds: [] as MeldSpec[],
152
+ hais: [3,3,3,7,7,7,12,12,12,24,24,24,31,31],
153
+ expected: new Map([[0, new Map([["三暗刻", 2], ["対々和", 2]])]])
154
+ },
155
+ {
156
+ name: "suanko_3",
157
+ desc: "四暗刻",
158
+ agariHai: 31,
159
+ isTsumo: false,
160
+ melds: [] as MeldSpec[],
161
+ hais: [3,3,3,7,7,7,12,12,12,24,24,24,31,31],
162
+ expected: new Map([[0, new Map([["四暗刻単騎", 26]])]])
163
+ },
164
+ {
165
+ name: "suanko_4",
166
+ desc: "四暗刻",
167
+ agariHai: 31,
168
+ isTsumo: true,
169
+ melds: [] as MeldSpec[],
170
+ hais: [3,3,3,7,7,7,12,12,12,24,24,24,31,31],
171
+ expected: new Map([[0, new Map([["四暗刻単騎", 26]])]])
172
+ },
173
+ {
174
+ name: "suanko_5",
175
+ desc: "四暗刻",
176
+ agariHai: 7,
177
+ isTsumo: true,
178
+ melds: [
179
+ {hai: 12, type: MeldType.ANKAN},
180
+ {hai: 24, type: MeldType.ANKAN},
181
+ ] as MeldSpec[],
182
+ hais: [3,3,3,7,7,7,31,31],
183
+ expected: new Map([[0, new Map([["四暗刻", 13]])]])
184
+ },
185
+ {
186
+ name: "daisangen_1",
187
+ desc: "大三元",
188
+ agariHai: 33,
189
+ isTsumo: false,
190
+ melds: [] as MeldSpec[],
191
+ hais: [1,1,28,28,28,32,32,32,33,33,33,34,34,34],
192
+ expected: new Map([[0, new Map([["大三元", 13]])]])
193
+ },
194
+ {
195
+ name: "daisangen_2",
196
+ desc: "大三元",
197
+ agariHai: 33,
198
+ isTsumo: true,
199
+ melds: [] as MeldSpec[],
200
+ hais: [28,28,29,29,29,32,32,32,33,33,33,34,34,34],
201
+ expected: new Map([[0, new Map([["大三元", 13],["字一色", 13],["四暗刻", 13]])]])
202
+ },
203
+ {
204
+ name: "daisangen_3",
205
+ desc: "大三元",
206
+ agariHai: 34,
207
+ isTsumo: false,
208
+ melds: [
209
+ {hai: 32, type: MeldType.PON},
210
+ {hai: 33, type: MeldType.PON},
211
+ ] as MeldSpec[],
212
+ hais: [1,1,28,28,28,34,34,34],
213
+ expected: new Map([[0, new Map([["大三元", 13]])]])
214
+ },
215
+ {
216
+ name: "kokushi_1",
217
+ desc: "国士無双",
218
+ agariHai: 9,
219
+ isTsumo: true,
220
+ melds: [] as MeldSpec[],
221
+ hais: [1,1,9,10,18,19,27,28,29,30,31,32,33,34],
222
+ expected: new Map([[0, new Map([["国士無双", 13]])]])
223
+ },
224
+ {
225
+ name: "kokushi_2",
226
+ desc: "国士無双",
227
+ agariHai: 18,
228
+ isTsumo: true,
229
+ melds: [] as MeldSpec[],
230
+ hais: [1,9,10,18,19,27,28,29,30,31,32,33,34,34],
231
+ expected: new Map([[0, new Map([["国士無双", 13]])]])
232
+ },
233
+ {
234
+ name: "kokushi_3",
235
+ desc: "国士無双",
236
+ agariHai: 28,
237
+ isTsumo: true,
238
+ melds: [] as MeldSpec[],
239
+ hais: [1,9,10,18,19,27,28,28,29,30,31,32,33,34],
240
+ expected: new Map([[0, new Map([["国士無双13面待ち", 26]])]])
241
+ },
242
+ {
243
+ name: "churen_1",
244
+ desc: "九蓮宝燈",
245
+ agariHai: 9,
246
+ isTsumo: false,
247
+ melds: [] as MeldSpec[],
248
+ hais: [1,1,1,2,3,4,5,5,6,7,8,9,9,9],
249
+ expected: new Map([[0, new Map([["九蓮宝燈", 13]])]])
250
+ },
251
+ {
252
+ name: "churen_2",
253
+ desc: "九蓮宝燈",
254
+ agariHai: 18,
255
+ isTsumo: false,
256
+ melds: [] as MeldSpec[],
257
+ hais: [10,10,10,10,11,12,13,14,15,16,17,18,18,18],
258
+ expected: new Map([[0, new Map([["九蓮宝燈", 13]])]])
259
+ },
260
+ {
261
+ name: "churen_3",
262
+ desc: "九蓮宝燈",
263
+ agariHai: 22,
264
+ isTsumo: false,
265
+ melds: [] as MeldSpec[],
266
+ hais: [19,19,19,20,21,22,23,24,25,26,26,27,27,27],
267
+ expected: new Map([[0, new Map([["九蓮宝燈", 13]])]])
268
+ },
269
+ {
270
+ name: "churen_4",
271
+ desc: "九蓮宝燈",
272
+ agariHai: 9,
273
+ isTsumo: false,
274
+ melds: [] as MeldSpec[],
275
+ hais: [2,3,4,5,5],
276
+ expected: new Map()
277
+ },
278
+ {
279
+ name: "churen_5",
280
+ desc: "九蓮宝燈",
281
+ agariHai: 1,
282
+ isTsumo: false,
283
+ melds: [] as MeldSpec[],
284
+ hais: [1,1,1,1,2,3,4,5,6,7,8,9,9,9],
285
+ expected: new Map([[0, new Map([["純正九蓮宝燈", 26]])]])
286
+ },
287
+ {
288
+ name: "churen_6",
289
+ desc: "九蓮宝燈",
290
+ agariHai: 5,
291
+ isTsumo: false,
292
+ melds: [] as MeldSpec[],
293
+ hais: [1,1,1,2,3,4,5,5,6,7,8,9,9,9],
294
+ expected: new Map([[0, new Map([["純正九蓮宝燈", 26]])]])
295
+ },
296
+ {
297
+ name: "churen_7",
298
+ desc: "九蓮宝燈",
299
+ agariHai: 9,
300
+ isTsumo: false,
301
+ melds: [] as MeldSpec[],
302
+ hais: [1,1,1,2,3,4,5,6,7,8,9,9,9,9],
303
+ expected: new Map([[0, new Map([["純正九蓮宝燈", 26]])]])
304
+ },
305
+ {
306
+ name: "sukantsu_1",
307
+ desc: "四槓子",
308
+ agariHai: 1,
309
+ isTsumo: false,
310
+ melds: [
311
+ {hai: 2, type: MeldType.ANKAN},
312
+ {hai: 13, type: MeldType.ANKAN},
313
+ {hai: 16, type: MeldType.MINKAN},
314
+ {hai: 31, type: MeldType.MINKAN},
315
+ ] as MeldSpec[],
316
+ hais: [1,1],
317
+ expected: new Map([[0, new Map([["四槓子", 13]])]])
318
+ },
319
+ {
320
+ name: "sukantsu_2",
321
+ desc: "四槓子",
322
+ agariHai: 1,
323
+ isTsumo: false,
324
+ melds: [
325
+ {hai: 2, type: MeldType.ANKAN},
326
+ {hai: 13, type: MeldType.ANKAN},
327
+ {hai: 16, type: MeldType.ANKAN},
328
+ {hai: 31, type: MeldType.ANKAN},
329
+ ] as MeldSpec[],
330
+ hais: [1,1],
331
+ expected: new Map([[0, new Map([["四槓子", 13],["四暗刻単騎", 26]])]])
332
+ },
333
+ {
334
+ name: "sukantsu_3",
335
+ desc: "四槓子",
336
+ agariHai: 32,
337
+ isTsumo: false,
338
+ melds: [
339
+ {hai: 28, type: MeldType.ANKAN},
340
+ {hai: 29, type: MeldType.ANKAN},
341
+ {hai: 30, type: MeldType.ANKAN},
342
+ {hai: 31, type: MeldType.ANKAN},
343
+ ] as MeldSpec[],
344
+ hais: [32,32],
345
+ expected: new Map([[0, new Map([["大四喜", 26],["字一色", 13],["四槓子", 13],["四暗刻単騎", 26]])]])
346
+ },
347
+ {
348
+ name: "tenho_1",
349
+ desc: "天和",
350
+ agariHai: 1,
351
+ isTsumo: true,
352
+ event: WinEvent.TENHO,
353
+ melds: [] as MeldSpec[],
354
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,13,13],
355
+ expected: new Map([[0, new Map([["天和", 13]])]])
356
+ },
357
+ {
358
+ name: "chiho_1",
359
+ desc: "地和",
360
+ agariHai: 1,
361
+ isTsumo: true,
362
+ event: WinEvent.CHIHO,
363
+ melds: [] as MeldSpec[],
364
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,13,13],
365
+ expected: new Map([[0, new Map([["地和", 13]])]])
366
+ },
367
+ ];
@@ -0,0 +1,28 @@
1
+ import { YakuChecker } from "../modules/yaku/YakuChecker";
2
+ import { casesYakuman } from './yaku/yakuman';
3
+ import { casesNormal } from './yaku/normal';
4
+ import { TehaiCase } from './testConsts';
5
+ import { YakuContext } from '../modules/yaku/YakuContext';
6
+ import { TehaiCaseRunner } from './tehaiCaseRunner';
7
+
8
+ type yakuMaps = Map<number, Map<string, number>>;
9
+
10
+ const testcases: TehaiCase<yakuMaps>[] = [];
11
+ casesYakuman.forEach(caseyakuman => testcases.push(caseyakuman));
12
+ casesNormal.forEach(casenormal => testcases.push(casenormal));
13
+
14
+ testcases.forEach(testcase => {
15
+ describe(testcase.desc, () => {
16
+ test(testcase.name, () => {
17
+ const yakuMaps: yakuMaps = new Map<number, Map<string, number>>();
18
+ const runner: TehaiCaseRunner<yakuMaps> = new TehaiCaseRunner(testcase);
19
+ const blocks = runner.blocks;
20
+ blocks.forEach((block, index) => {
21
+ const context = new YakuContext(runner.hand, runner.ctx, block);
22
+ const yakuMap = new YakuChecker(context).check();
23
+ if(yakuMap.size > 0) yakuMaps.set(index, yakuMap);
24
+ });
25
+ expect(yakuMaps).toEqual(testcase.expected);
26
+ });
27
+ });
28
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "CommonJS",
4
+ "target": "ES2022",
5
+ "moduleResolution": "bundler",
6
+
7
+ "types": ["jest"],
8
+
9
+ "sourceMap": true,
10
+ "declaration": true,
11
+ "declarationMap": true,
12
+ "outDir": "dist",
13
+ "rootDir": "modules",
14
+ "strict": true,
15
+ "jsx": "react-jsx",
16
+ "isolatedModules": true,
17
+ "skipLibCheck": true,
18
+
19
+ "esModuleInterop": true
20
+ },
21
+
22
+ "include": ["modules/**/*"]
23
+ }