public boolean testWinProb(int changeCount) throws InterruptedException {
		if (Thread.interrupted())
			throw new InterruptedException();

		if (playerInfo.isTing() && changeCount > 0)
			return false; // XXX - 写死了听牌后不能换牌

		if (subChoices == null) {
			// 没有后续动作，收集结果为和牌的换牌，并计算和牌概率（将其发生概率相加）
			List<BarBotSimChanging> winChangings = Collections.synchronizedList(new ArrayList<>());
			// testTime("changings " + changeCount, () ->
			// changings(changeCount).count());
			double winProb = winChangings(changeCount).parallel()
					// 收集
					.peek(winChangings::add)
					// 统计番数期望值（和牌番数×发生概率）
					.mapToDouble(c -> c.getWinPoint() * c.getProb()).sum();
			if (winProb > 0) {
				winChangingByChangeCount.put(changeCount, winChangings);
				winProbByChangeCount.put(changeCount, winProb);
				return true;
			} else
				return false;
		} else {
			// 有后续动作，让后续动作都测试一遍
			boolean canWin = false;
			for (BarBotCpgdChoice subChoice : subChoices) {
				if (subChoice.testWinProb(changeCount))
					canWin = true;
			}
			return canWin;
		}
	}