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,272 @@
1
+ import { FuSpec, MeldSpec, TehaiCase } from '../testConsts';
2
+ import { BlockType, MeldType, WinEvent } from "../../modules/MahjongConsts";
3
+ import { TILE } from "../../modules/tileDefs"
4
+ import { Meld } from '../../modules/Meld';
5
+ import { BlockHais } from '../../modules/BlockHais';
6
+
7
+ export const caseFu: TehaiCase<FuSpec[][]>[] = [
8
+ {
9
+ name: "pinfu_tumo",
10
+ desc: "平和",
11
+ agariHai: 1,
12
+ isTsumo: true,
13
+ melds: [] as MeldSpec[],
14
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,13,13],
15
+ expected: [
16
+ [{name: "平和ツモ", fu: 20}]
17
+ ] as FuSpec[][]
18
+ },
19
+ {
20
+ name: "pinfu_ron",
21
+ desc: "平和",
22
+ agariHai: 1,
23
+ isTsumo: false,
24
+ melds: [] as MeldSpec[],
25
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,13,13],
26
+ expected: [
27
+ [{name: "符底", fu: 20},{name: "面前ロン", fu: 10},]
28
+ ] as FuSpec[][]
29
+ },
30
+ {
31
+ name: "chitoi",
32
+ desc: "七対子",
33
+ agariHai: 1,
34
+ isTsumo: true,
35
+ melds: [] as MeldSpec[],
36
+ hais: [1,1,3,3,9,9,13,13,16,16,22,22,31,31],
37
+ expected: [
38
+ [{name: "七対子", fu: 25}]
39
+ ] as FuSpec[][]
40
+ },
41
+ {
42
+ name: "machi_tanki",
43
+ desc: "待ちの形",
44
+ agariHai: 13,
45
+ isTsumo: true,
46
+ melds: [] as MeldSpec[],
47
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,13,13],
48
+ expected: [
49
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2}, {name: "単騎待ち", fu: 2}]
50
+ ] as FuSpec[][]
51
+ },
52
+ {
53
+ name: "machi_penchan",
54
+ desc: "待ちの形",
55
+ agariHai: 3,
56
+ isTsumo: true,
57
+ melds: [] as MeldSpec[],
58
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,13,13],
59
+ expected: [
60
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2}, {name: "辺張待ち", fu: 2}]
61
+ ] as FuSpec[][]
62
+ },
63
+ {
64
+ name: "machi_kanchan",
65
+ desc: "待ちの形",
66
+ agariHai: 2,
67
+ isTsumo: true,
68
+ melds: [] as MeldSpec[],
69
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,13,13],
70
+ expected: [
71
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2}, {name: "嵌張待ち", fu: 2}]
72
+ ] as FuSpec[][]
73
+ },
74
+ {
75
+ name: "machi_shanpon",
76
+ desc: "待ちの形",
77
+ agariHai: 10,
78
+ isTsumo: true,
79
+ melds: [] as MeldSpec[],
80
+ hais: [1,2,3,4,5,6,7,8,9,10,10,10,13,13],
81
+ expected: [
82
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
83
+ {name: "么九牌暗刻", fu: 8, mentsu: BlockHais.from(10, BlockType.KOTSU)}]
84
+ ] as FuSpec[][]
85
+ },
86
+ {
87
+ name: "yakuhai_haku",
88
+ desc: "役牌雀頭",
89
+ agariHai: 1,
90
+ isTsumo: true,
91
+ melds: [] as MeldSpec[],
92
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,32,32],
93
+ expected: [
94
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
95
+ {name: "役牌雀頭", fu: 2, mentsu: BlockHais.from(32, BlockType.JANTO)}]
96
+ ] as FuSpec[][]
97
+ },
98
+ {
99
+ name: "yakuhai_hatsu",
100
+ desc: "役牌雀頭",
101
+ agariHai: 1,
102
+ isTsumo: true,
103
+ melds: [] as MeldSpec[],
104
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,33,33],
105
+ expected: [
106
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
107
+ {name: "役牌雀頭", fu: 2, mentsu: BlockHais.from(33, BlockType.JANTO)}]
108
+ ] as FuSpec[][]
109
+ },
110
+ {
111
+ name: "yakuhai_chun",
112
+ desc: "役牌雀頭",
113
+ agariHai: 1,
114
+ isTsumo: true,
115
+ melds: [] as MeldSpec[],
116
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,34,34],
117
+ expected: [
118
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
119
+ {name: "役牌雀頭", fu: 2, mentsu: BlockHais.from(34, BlockType.JANTO)}]
120
+ ] as FuSpec[][]
121
+ },
122
+ {
123
+ name: "yakuhai_jifuu",
124
+ desc: "役牌雀頭",
125
+ agariHai: 1,
126
+ isTsumo: true,
127
+ melds: [] as MeldSpec[],
128
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,28,28],
129
+ playerWind: TILE.WIND.EAST,
130
+ roundWind: TILE.WIND.SOUTH,
131
+ expected: [
132
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
133
+ {name: "役牌雀頭", fu: 2, mentsu: BlockHais.from(28, BlockType.JANTO)}]
134
+ ] as FuSpec[][]
135
+ },
136
+ {
137
+ name: "yakuhai_bafuu",
138
+ desc: "役牌雀頭",
139
+ agariHai: 1,
140
+ isTsumo: true,
141
+ melds: [] as MeldSpec[],
142
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,29,29],
143
+ playerWind: TILE.WIND.EAST,
144
+ roundWind: TILE.WIND.SOUTH,
145
+ expected: [
146
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
147
+ {name: "役牌雀頭", fu: 2, mentsu: BlockHais.from(29, BlockType.JANTO)}]
148
+ ] as FuSpec[][]
149
+ },
150
+ {
151
+ name: "yakuhai_renpuu",
152
+ desc: "役牌雀頭",
153
+ agariHai: 1,
154
+ isTsumo: true,
155
+ melds: [] as MeldSpec[],
156
+ hais: [1,2,3,4,5,6,7,8,9,10,11,12,28,28],
157
+ playerWind: TILE.WIND.EAST,
158
+ roundWind: TILE.WIND.EAST,
159
+ expected: [
160
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
161
+ {name: "役牌雀頭", fu: 2, mentsu: BlockHais.from(28, BlockType.JANTO)}]
162
+ ] as FuSpec[][]
163
+ },
164
+ {
165
+ name: "mentsu_chuchan_minko",
166
+ desc: "面子",
167
+ agariHai: 3,
168
+ isTsumo: true,
169
+ melds: [
170
+ {hai: 2, type: MeldType.PON},
171
+ ] as MeldSpec[],
172
+ hais: [3,4,5,6,6,7,7,8,8,10,10],
173
+ expected: [
174
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
175
+ {name: "中張牌明刻", fu: 2, mentsu: Meld.from(2, MeldType.PON)}]
176
+ ] as FuSpec[][]
177
+ },
178
+ {
179
+ name: "mentsu_yaochu_minko",
180
+ desc: "面子",
181
+ agariHai: 3,
182
+ isTsumo: true,
183
+ melds: [
184
+ {hai: 1, type: MeldType.PON},
185
+ ] as MeldSpec[],
186
+ hais: [3,4,5,6,6,7,7,8,8,10,10],
187
+ expected: [
188
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
189
+ {name: "么九牌明刻", fu: 4, mentsu: Meld.from(1, MeldType.PON)}]
190
+ ] as FuSpec[][]
191
+ },
192
+ {
193
+ name: "mentsu_chuchan_anko",
194
+ desc: "面子",
195
+ agariHai: 2,
196
+ isTsumo: true,
197
+ melds: [] as MeldSpec[],
198
+ hais: [2,2,2,3,4,5,6,6,7,7,8,8,10,10],
199
+ expected: [
200
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
201
+ {name: "中張牌暗刻", fu: 4, mentsu: BlockHais.from(2, BlockType.KOTSU)}]
202
+ ] as FuSpec[][]
203
+ },
204
+ {
205
+ name: "mentsu_yaochu_anko",
206
+ desc: "面子",
207
+ agariHai: 1,
208
+ isTsumo: true,
209
+ melds: [] as MeldSpec[],
210
+ hais: [1,1,1,3,4,5,6,6,7,7,8,8,10,10],
211
+ expected: [
212
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
213
+ {name: "么九牌暗刻", fu: 8, mentsu: BlockHais.from(1, BlockType.KOTSU)}]
214
+ ] as FuSpec[][]
215
+ },
216
+ {
217
+ name: "mentsu_chuchan_minkan",
218
+ desc: "面子",
219
+ agariHai: 3,
220
+ isTsumo: true,
221
+ melds: [
222
+ {hai: 2, type: MeldType.MINKAN},
223
+ ] as MeldSpec[],
224
+ hais: [3,4,5,6,6,7,7,8,8,10,10],
225
+ expected: [
226
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
227
+ {name: "中張牌明槓", fu: 8, mentsu: Meld.from(2, MeldType.MINKAN)}]
228
+ ] as FuSpec[][]
229
+ },
230
+ {
231
+ name: "mentsu_yaochu_minkan",
232
+ desc: "面子",
233
+ agariHai: 3,
234
+ isTsumo: true,
235
+ melds: [
236
+ {hai: 1, type: MeldType.MINKAN},
237
+ ] as MeldSpec[],
238
+ hais: [3,4,5,6,6,7,7,8,8,10,10],
239
+ expected: [
240
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
241
+ {name: "么九牌明槓", fu: 16, mentsu: Meld.from(1, MeldType.MINKAN)}]
242
+ ] as FuSpec[][]
243
+ },
244
+ {
245
+ name: "mentsu_chuchan_ankan",
246
+ desc: "面子",
247
+ agariHai: 3,
248
+ isTsumo: true,
249
+ melds: [
250
+ {hai: 2, type: MeldType.ANKAN},
251
+ ] as MeldSpec[],
252
+ hais: [3,4,5,6,6,7,7,8,8,10,10],
253
+ expected: [
254
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
255
+ {name: "中張牌暗槓", fu: 16, mentsu: Meld.from(2, MeldType.ANKAN)}]
256
+ ] as FuSpec[][]
257
+ },
258
+ {
259
+ name: "mentsu_yaochu_ankan",
260
+ desc: "面子",
261
+ agariHai: 3,
262
+ isTsumo: true,
263
+ melds: [
264
+ {hai: 1, type: MeldType.ANKAN},
265
+ ] as MeldSpec[],
266
+ hais: [3,4,5,6,6,7,7,8,8,10,10],
267
+ expected: [
268
+ [{name: "符底", fu: 20}, {name: "ツモ", fu: 2},
269
+ {name: "么九牌暗槓", fu: 32, mentsu: Meld.from(1, MeldType.ANKAN)}]
270
+ ] as FuSpec[][]
271
+ },
272
+ ];
@@ -0,0 +1,46 @@
1
+ import { Score, MeldSpec, TehaiCase } from '../testConsts';
2
+ import { MeldType, WinEvent } from "../../modules/MahjongConsts";
3
+
4
+ export const casesScore: TehaiCase<Score[]>[] = [
5
+ {
6
+ name: "pinfu_1",
7
+ desc: "平和",
8
+ agariHai: 1,
9
+ isTsumo: true,
10
+ melds: [] as MeldSpec[],
11
+ hais: [1,2,3,3,4,5,7,8,9,10,11,12,13,13],
12
+ expected: [
13
+ {han: 2, fuBasic: 20, fuCeiled: 20}
14
+ ]
15
+ },
16
+ {
17
+ name: "toitoi_1",
18
+ desc: "対々和",
19
+ agariHai: 15,
20
+ isTsumo: true,
21
+ melds: [
22
+ {hai: 3, type: MeldType.PON},
23
+ {hai: 9, type: MeldType.PON},
24
+ {hai: 30, type: MeldType.PON},
25
+ ] as MeldSpec[],
26
+ hais: [15,15,15,16,16],
27
+ expected: [
28
+ {han: 2, fuBasic: 36, fuCeiled: 40}
29
+ ]
30
+ },
31
+ {
32
+ name: "sankantsu_1",
33
+ desc: "三槓子",
34
+ agariHai: 14,
35
+ isTsumo: false,
36
+ melds: [
37
+ {hai: 1, type: MeldType.ANKAN},
38
+ {hai: 8, type: MeldType.ANKAN},
39
+ {hai: 29, type: MeldType.MINKAN},
40
+ ] as MeldSpec[],
41
+ hais: [14,15,16,18,18],
42
+ expected: [
43
+ {han: 2, fuBasic: 84, fuCeiled: 90}
44
+ ]
45
+ },
46
+ ];
@@ -0,0 +1,292 @@
1
+ import { TensuuResult } from "../../modules/tensuu/TensuuResult";
2
+ import { TensuuNumCase } from "../testConsts";
3
+
4
+ export const caseNum: TensuuNumCase[] = [
5
+ {
6
+ name: "hon1_fu30",
7
+ desc: "1翻",
8
+ honsuu: 1,
9
+ fusuu: 30,
10
+ expected: new TensuuResult(240, 1500, 1000, 500, {oya:500, ko:300})
11
+ },
12
+ {
13
+ name: "hon1_fu40",
14
+ desc: "1翻",
15
+ honsuu: 1,
16
+ fusuu: 40,
17
+ expected: new TensuuResult(320, 2000, 1300, 700, {oya:700, ko:400})
18
+ },
19
+ {
20
+ name: "hon1_fu50",
21
+ desc: "1翻",
22
+ honsuu: 1,
23
+ fusuu: 50,
24
+ expected: new TensuuResult(400, 2400, 1600, 800, {oya:800, ko:400})
25
+ },
26
+ {
27
+ name: "hon1_fu60",
28
+ desc: "1翻",
29
+ honsuu: 1,
30
+ fusuu: 60,
31
+ expected: new TensuuResult(480, 2900, 2000, 1000, {oya:1000, ko:500})
32
+ },
33
+ {
34
+ name: "hon1_fu70",
35
+ desc: "1翻",
36
+ honsuu: 1,
37
+ fusuu: 70,
38
+ expected: new TensuuResult(560, 3400, 2300, 1200, {oya:1200, ko:600})
39
+ },
40
+ {
41
+ name: "hon1_fu80",
42
+ desc: "1翻",
43
+ honsuu: 1,
44
+ fusuu: 80,
45
+ expected: new TensuuResult(640, 3900, 2600, 1300, {oya:1300, ko:700})
46
+ },
47
+ {
48
+ name: "hon1_fu90",
49
+ desc: "1翻",
50
+ honsuu: 1,
51
+ fusuu: 90,
52
+ expected: new TensuuResult(720, 4400, 2900, 1500, {oya:1500, ko:800})
53
+ },
54
+ {
55
+ name: "hon1_fu100",
56
+ desc: "1翻",
57
+ honsuu: 1,
58
+ fusuu: 100,
59
+ expected: new TensuuResult(800, 4800, 3200, 1600, {oya:1600, ko:800})
60
+ },
61
+ {
62
+ name: "hon1_fu110",
63
+ desc: "1翻",
64
+ honsuu: 1,
65
+ fusuu: 110,
66
+ expected: new TensuuResult(880, 5300, 3600, 1800, {oya:1800, ko:900})
67
+ },
68
+ {
69
+ name: "hon2_fu20",
70
+ desc: "2翻",
71
+ honsuu: 2,
72
+ fusuu: 20,
73
+ expected: new TensuuResult(320, 2000, 1300, 700, {oya:700, ko:400})
74
+ },
75
+ {
76
+ name: "hon2_fu25",
77
+ desc: "2翻",
78
+ honsuu: 2,
79
+ fusuu: 25,
80
+ expected: new TensuuResult(400, 2400, 1600, 800, {oya:800, ko:400})
81
+ },
82
+ {
83
+ name: "hon2_fu30",
84
+ desc: "2翻",
85
+ honsuu: 2,
86
+ fusuu: 30,
87
+ expected: new TensuuResult(480, 2900, 2000, 1000, {oya:1000, ko:500})
88
+ },
89
+ {
90
+ name: "hon2_fu40",
91
+ desc: "2翻",
92
+ honsuu: 2,
93
+ fusuu: 40,
94
+ expected: new TensuuResult(640, 3900, 2600, 1300, {oya:1300, ko:700})
95
+ },
96
+ {
97
+ name: "hon2_fu50",
98
+ desc: "2翻",
99
+ honsuu: 2,
100
+ fusuu: 50,
101
+ expected: new TensuuResult(800, 4800, 3200, 1600, {oya:1600, ko:800})
102
+ },
103
+ {
104
+ name: "hon2_fu60",
105
+ desc: "2翻",
106
+ honsuu: 2,
107
+ fusuu: 60,
108
+ expected: new TensuuResult(960, 5800, 3900, 2000, {oya:2000, ko:1000})
109
+ },
110
+ {
111
+ name: "hon2_fu70",
112
+ desc: "2翻",
113
+ honsuu: 2,
114
+ fusuu: 70,
115
+ expected: new TensuuResult(1120, 6800, 4500, 2300, {oya:2300, ko:1200})
116
+ },
117
+ {
118
+ name: "hon2_fu80",
119
+ desc: "2翻",
120
+ honsuu: 2,
121
+ fusuu: 80,
122
+ expected: new TensuuResult(1280, 7700, 5200, 2600, {oya:2600, ko:1300})
123
+ },
124
+ {
125
+ name: "hon2_fu90",
126
+ desc: "2翻",
127
+ honsuu: 2,
128
+ fusuu: 90,
129
+ expected: new TensuuResult(1440, 8700, 5800, 2900, {oya:2900, ko:1500})
130
+ },
131
+ {
132
+ name: "hon2_fu100",
133
+ desc: "2翻",
134
+ honsuu: 2,
135
+ fusuu: 100,
136
+ expected: new TensuuResult(1600, 9600, 6400, 3200, {oya:3200, ko:1600})
137
+ },
138
+ {
139
+ name: "hon2_fu110",
140
+ desc: "2翻",
141
+ honsuu: 2,
142
+ fusuu: 110,
143
+ expected: new TensuuResult(1760, 10600, 7100, 3600, {oya:3600, ko:1800})
144
+ },
145
+ {
146
+ name: "hon3_fu20",
147
+ desc: "3翻",
148
+ honsuu: 3,
149
+ fusuu: 20,
150
+ expected: new TensuuResult(640, 3900, 2600, 1300, {oya:1300, ko:700})
151
+ },
152
+ {
153
+ name: "hon3_fu25",
154
+ desc: "3翻",
155
+ honsuu: 3,
156
+ fusuu: 25,
157
+ expected: new TensuuResult(800, 4800, 3200, 1600, {oya:1600, ko:800})
158
+ },
159
+ {
160
+ name: "hon3_fu30",
161
+ desc: "3翻",
162
+ honsuu: 3,
163
+ fusuu: 30,
164
+ expected: new TensuuResult(960, 5800, 3900, 2000, {oya:2000, ko:1000})
165
+ },
166
+ {
167
+ name: "hon3_fu40",
168
+ desc: "3翻",
169
+ honsuu: 3,
170
+ fusuu: 40,
171
+ expected: new TensuuResult(1280, 7700, 5200, 2600, {oya:2600, ko:1300})
172
+ },
173
+ {
174
+ name: "hon3_fu50",
175
+ desc: "3翻",
176
+ honsuu: 3,
177
+ fusuu: 50,
178
+ expected: new TensuuResult(1600, 9600, 6400, 3200, {oya:3200, ko:1600})
179
+ },
180
+ {
181
+ name: "hon3_fu60",
182
+ desc: "3翻",
183
+ honsuu: 3,
184
+ fusuu: 60,
185
+ expected: new TensuuResult(1920, 11600, 7700, 3900, {oya:3900, ko:2000})
186
+ },
187
+ {
188
+ name: "hon3_fu70",
189
+ desc: "3翻",
190
+ honsuu: 3,
191
+ fusuu: 70,
192
+ expected: new TensuuResult(2000, 12000, 8000, 4000, {oya:4000, ko:2000})
193
+ },
194
+ {
195
+ name: "hon4_fu20",
196
+ desc: "4翻",
197
+ honsuu: 4,
198
+ fusuu: 20,
199
+ expected: new TensuuResult(1280, 7700, 5200, 2600, {oya:2600, ko:1300})
200
+ },
201
+ {
202
+ name: "hon4_fu25",
203
+ desc: "4翻",
204
+ honsuu: 4,
205
+ fusuu: 25,
206
+ expected: new TensuuResult(1600, 9600, 6400, 3200, {oya:3200, ko:1600})
207
+ },
208
+ {
209
+ name: "hon4_fu30",
210
+ desc: "4翻",
211
+ honsuu: 4,
212
+ fusuu: 30,
213
+ expected: new TensuuResult(1920, 11600, 7700, 3900, {oya:3900, ko:2000})
214
+ },
215
+ {
216
+ name: "hon4_fu40",
217
+ desc: "4翻",
218
+ honsuu: 4,
219
+ fusuu: 40,
220
+ expected: new TensuuResult(2000, 12000, 8000, 4000, {oya:4000, ko:2000})
221
+ },
222
+ {
223
+ name: "hon5",
224
+ desc: "5翻",
225
+ honsuu: 5,
226
+ fusuu: 20,
227
+ expected: new TensuuResult(2000, 12000, 8000, 4000, {oya:4000, ko:2000})
228
+ },
229
+ {
230
+ name: "hon6",
231
+ desc: "6翻",
232
+ honsuu: 6,
233
+ fusuu: 20,
234
+ expected: new TensuuResult(3000, 18000, 12000, 6000, {oya:6000, ko:3000})
235
+ },
236
+ {
237
+ name: "hon7",
238
+ desc: "7翻",
239
+ honsuu: 7,
240
+ fusuu: 20,
241
+ expected: new TensuuResult(3000, 18000, 12000, 6000, {oya:6000, ko:3000})
242
+ },
243
+ {
244
+ name: "hon8",
245
+ desc: "8翻",
246
+ honsuu: 8,
247
+ fusuu: 20,
248
+ expected: new TensuuResult(4000, 24000, 16000, 8000, {oya:8000, ko:4000})
249
+ },
250
+ {
251
+ name: "hon9",
252
+ desc: "9翻",
253
+ honsuu: 9,
254
+ fusuu: 20,
255
+ expected: new TensuuResult(4000, 24000, 16000, 8000, {oya:8000, ko:4000})
256
+ },
257
+ {
258
+ name: "hon10",
259
+ desc: "10翻",
260
+ honsuu: 10,
261
+ fusuu: 20,
262
+ expected: new TensuuResult(4000, 24000, 16000, 8000, {oya:8000, ko:4000})
263
+ },
264
+ {
265
+ name: "hon11",
266
+ desc: "11翻",
267
+ honsuu: 11,
268
+ fusuu: 20,
269
+ expected: new TensuuResult(6000, 36000, 24000, 12000, {oya:12000, ko:6000})
270
+ },
271
+ {
272
+ name: "hon12",
273
+ desc: "12翻",
274
+ honsuu: 12,
275
+ fusuu: 20,
276
+ expected: new TensuuResult(6000, 36000, 24000, 12000, {oya:12000, ko:6000})
277
+ },
278
+ {
279
+ name: "hon13",
280
+ desc: "13翻",
281
+ honsuu: 13,
282
+ fusuu: 20,
283
+ expected: new TensuuResult(8000, 48000, 32000, 16000, {oya:16000, ko:8000})
284
+ },
285
+ {
286
+ name: "hon26",
287
+ desc: "26翻",
288
+ honsuu: 26,
289
+ fusuu: 20,
290
+ expected: new TensuuResult(16000, 96000, 64000, 32000, {oya:32000, ko:16000})
291
+ },
292
+ ];
@@ -0,0 +1,15 @@
1
+ import { TensuuNumCase } from './testConsts';
2
+ import { TensuuCalculator } from "../modules/tensuu/TensuuCalculator";
3
+ import { caseNum } from './tensuu/tensuuNum';
4
+
5
+ const testcases: TensuuNumCase[] = [];
6
+ caseNum.forEach(casenum => testcases.push(casenum));
7
+
8
+ testcases.forEach(testcase => {
9
+ describe(testcase.desc, () => {
10
+ test(testcase.name, () => {
11
+ const expected = TensuuCalculator.calcTensuu(testcase.honsuu, testcase.fusuu);
12
+ expect(testcase.expected).toEqual(expected);
13
+ });
14
+ });
15
+ });
@@ -0,0 +1,42 @@
1
+ import { IMentsu } from "../modules/IMentsu";
2
+ import { MeldType, WinEvent } from "../modules/MahjongConsts";
3
+ import { TensuuResult } from "../modules/tensuu/TensuuResult";
4
+ import { Wind } from "../modules/tileDefs";
5
+
6
+ export type FuSpec = {
7
+ readonly name: string;
8
+ readonly fu: number;
9
+ readonly mentsu?: IMentsu;
10
+ }
11
+
12
+ export type MeldSpec = {
13
+ hai: number,
14
+ type: MeldType;
15
+ };
16
+
17
+ export type TehaiCase<TExpected> = {
18
+ name: string,
19
+ desc: string,
20
+ agariHai: number,
21
+ isTsumo: boolean,
22
+ melds: MeldSpec[],
23
+ hais: number[],
24
+ event?: WinEvent,
25
+ playerWind?: Wind,
26
+ roundWind?: Wind,
27
+ riichi?: boolean,
28
+ daburii?: boolean,
29
+ ippatsu?: boolean,
30
+ kuitan?: boolean,
31
+ expected: TExpected
32
+ }
33
+
34
+ export type TensuuNumCase = {
35
+ name: string,
36
+ desc: string,
37
+ honsuu: number,
38
+ fusuu: number
39
+ expected: TensuuResult;
40
+ }
41
+
42
+ export type Score = {han: number, fuBasic: number, fuCeiled: number};