1
This commit is contained in:
@@ -1,31 +1,36 @@
|
||||
import pytest
|
||||
from src.engine.calculate_fan import calculate_fan, is_seven_pairs, is_cleared, is_big_pairs
|
||||
|
||||
from src.engine.hand import Hand
|
||||
from src.engine.mahjong_tile import MahjongTile
|
||||
|
||||
# 测试用例
|
||||
|
||||
def test_basic_win():
|
||||
"""
|
||||
测试平胡(基本胡)计分
|
||||
"""
|
||||
hand = [0] * 108
|
||||
# 模拟平胡手牌: 四组顺子 + 一对将
|
||||
hand[0] = 2 # 将: 两张1条
|
||||
hand[3] = 1 # 2条
|
||||
hand[4] = 1 # 3条
|
||||
hand[5] = 1 # 4条
|
||||
hand[10] = 1 # 5条
|
||||
hand[11] = 1 # 6条
|
||||
hand[12] = 1 # 7条
|
||||
hand[20] = 1 # 8条
|
||||
hand[21] = 1 # 9条
|
||||
hand[22] = 1 # 1筒
|
||||
hand[30] = 1 # 2筒
|
||||
hand[31] = 1 # 3筒
|
||||
hand = Hand()
|
||||
# 模拟平胡手牌:四组顺子 + 一对将
|
||||
hand.add_tile(MahjongTile("筒", 1))
|
||||
hand.add_tile(MahjongTile("筒", 1)) # 将
|
||||
hand.add_tile(MahjongTile("筒", 2))
|
||||
hand.add_tile(MahjongTile("筒", 3)) # 顺子
|
||||
hand.add_tile(MahjongTile("筒", 4))
|
||||
hand.add_tile(MahjongTile("筒", 5))
|
||||
hand.add_tile(MahjongTile("筒", 6)) # 顺子
|
||||
hand.add_tile(MahjongTile("筒", 7))
|
||||
hand.add_tile(MahjongTile("筒", 7))
|
||||
hand.add_tile(MahjongTile("筒", 8))
|
||||
hand.add_tile(MahjongTile("筒", 9)) # 顺子
|
||||
hand.add_tile(MahjongTile("万", 1))
|
||||
hand.add_tile(MahjongTile("万", 2))
|
||||
hand.add_tile(MahjongTile("万", 3)) # 顺子
|
||||
|
||||
melds = []
|
||||
conditions = {}
|
||||
|
||||
fan = calculate_fan(hand, melds, is_self_draw=False, is_cleared=False, conditions=conditions)
|
||||
fan = calculate_fan(hand.tiles, melds, is_self_draw=False, is_cleared=False, conditions=conditions)
|
||||
assert fan == 1, f"Expected 1 fan, got {fan}"
|
||||
|
||||
|
||||
|
||||
79
tests/test_fan_type.py
Normal file
79
tests/test_fan_type.py
Normal file
@@ -0,0 +1,79 @@
|
||||
from src.engine.hand import Hand
|
||||
from src.engine.mahjong_tile import MahjongTile
|
||||
from src.engine.fan_type import is_basic_win,is_cleared
|
||||
from src.engine.meld import Meld
|
||||
|
||||
def test_is_basic_win():
|
||||
"""
|
||||
测试平胡(基本胡)的逻辑。
|
||||
"""
|
||||
hand = Hand()
|
||||
# 添加牌到手牌中
|
||||
hand.add_tile(MahjongTile("筒", 5))
|
||||
hand.add_tile(MahjongTile("筒", 5))
|
||||
hand.add_tile(MahjongTile("筒", 1))
|
||||
hand.add_tile(MahjongTile("筒", 2))
|
||||
hand.add_tile(MahjongTile("筒", 3))
|
||||
hand.add_tile(MahjongTile("筒", 4))
|
||||
hand.add_tile(MahjongTile("筒", 5))
|
||||
hand.add_tile(MahjongTile("筒", 6))
|
||||
hand.add_tile(MahjongTile("筒", 7))
|
||||
hand.add_tile(MahjongTile("筒", 8))
|
||||
hand.add_tile(MahjongTile("筒", 9))
|
||||
hand.add_tile(MahjongTile("万", 3))
|
||||
hand.add_tile(MahjongTile("万", 4))
|
||||
hand.add_tile(MahjongTile("万", 5))
|
||||
|
||||
# 打印当前手牌
|
||||
print(f"测试手牌: {hand}")
|
||||
|
||||
# 调用平胡逻辑函数
|
||||
result = is_basic_win(hand)
|
||||
|
||||
# 使用断言验证
|
||||
assert result, "测试失败:此手牌应该符合平胡(基本胡)规则"
|
||||
print("测试通过:平胡(基本胡)逻辑正确")
|
||||
|
||||
def test_is_cleared_basic():
|
||||
"""测试素清(不带杠的清一色)"""
|
||||
hand = Hand()
|
||||
# 添加手牌
|
||||
hand.add_tile(MahjongTile("筒", 1))
|
||||
hand.add_tile(MahjongTile("筒", 2))
|
||||
hand.add_tile(MahjongTile("筒", 3))
|
||||
hand.add_tile(MahjongTile("筒", 4))
|
||||
hand.add_tile(MahjongTile("筒", 5))
|
||||
hand.add_tile(MahjongTile("筒", 6))
|
||||
hand.add_tile(MahjongTile("筒", 7))
|
||||
hand.add_tile(MahjongTile("筒", 8))
|
||||
hand.add_tile(MahjongTile("筒", 9))
|
||||
hand.add_tile(MahjongTile("筒", 4))
|
||||
hand.add_tile(MahjongTile("筒", 5))
|
||||
hand.add_tile(MahjongTile("筒", 6))
|
||||
hand.add_tile(MahjongTile("筒", 9))
|
||||
hand.add_tile(MahjongTile("筒", 9))
|
||||
|
||||
melds = [] # 无杠
|
||||
assert is_cleared(hand, melds) == 2, "测试失败:素清应为 2 番"
|
||||
print("测试通过:素清")
|
||||
|
||||
def test_is_cleared_with_one_gang():
|
||||
"""测试极品(带 1 杠的清一色)"""
|
||||
hand = Hand()
|
||||
# 添加手牌
|
||||
hand.add_tile(MahjongTile("筒", 1))
|
||||
hand.add_tile(MahjongTile("筒", 2))
|
||||
hand.add_tile(MahjongTile("筒", 3))
|
||||
hand.add_tile(MahjongTile("筒", 4))
|
||||
hand.add_tile(MahjongTile("筒", 5))
|
||||
hand.add_tile(MahjongTile("筒", 6))
|
||||
hand.add_tile(MahjongTile("筒", 4))
|
||||
hand.add_tile(MahjongTile("筒", 5))
|
||||
hand.add_tile(MahjongTile("筒", 6))
|
||||
hand.add_tile(MahjongTile("筒", 9))
|
||||
hand.add_tile(MahjongTile("筒", 9))
|
||||
|
||||
melds = [Meld(MahjongTile("筒", 7), "杠")] # 带 1 杠
|
||||
assert is_cleared(hand, melds) == 3, "测试失败:极品应为 3 番"
|
||||
print("测试通过:极品")
|
||||
|
||||
Reference in New Issue
Block a user