示例#1
0
文件: calendar.c 项目: coyizumi/cs111
void test_SplitYearDays1() {
    int32 eyd;
    for (eyd = -1; eyd <= 365; eyd++) {
        ntpcal_split split = ntpcal_split_yeardays(eyd, 0);
        if (split.lo >= 0 && split.hi >= 0) {
            TEST_ASSERT_TRUE(isGT(12,split.hi));//EXPECT_GT(12, split.hi);
            TEST_ASSERT_TRUE(isGT(real_month_days[0][split.hi+1], split.lo));//EXPECT_GT(real_month_days[0][split.hi+1], split.lo);
            int32 tyd = real_month_table[0][split.hi] + split.lo;
            TEST_ASSERT_EQUAL(eyd, tyd);
        } else
            TEST_ASSERT_TRUE(eyd < 0 || eyd > 364);
    }
}
示例#2
0
文件: calendar.c 项目: coyizumi/cs111
void test_SplitYearDays2() {
    int32 eyd;
    for (eyd = -1; eyd <= 366; eyd++) {
        ntpcal_split split = ntpcal_split_yeardays(eyd, 1);
        if (split.lo >= 0 && split.hi >= 0) {
            //TEST_ASSERT_TRUE(12 > split.hi); //simpler version, works for basic types, doesn't work for complex structs
            TEST_ASSERT_TRUE(isGT(12,split.hi));//EXPECT_GT(12, split.hi);
            TEST_ASSERT_TRUE(isGT(real_month_days[1][split.hi+1], split.lo));//EXPECT_GT(real_month_days[1][split.hi+1], split.lo);
            int32 tyd = real_month_table[1][split.hi] + split.lo;
            TEST_ASSERT_EQUAL(eyd, tyd);
        } else
            TEST_ASSERT_TRUE(eyd < 0 || eyd > 365);
    }
}
示例#3
0
void
test_SplitYearDays2(void)
{
	int32 eyd;

	for (eyd = -1; eyd <= 366; eyd++) {
		ntpcal_split split = ntpcal_split_yeardays(eyd, 1);
		if (split.lo >= 0 && split.hi >= 0) {
			/* basic checks do not work on compunds :( */
			/* would like: TEST_ASSERT_TRUE(12 > split.hi); */
			TEST_ASSERT_TRUE(isGT(12,split.hi));
			TEST_ASSERT_TRUE(isGT(real_month_days[1][split.hi+1], split.lo));
			int32 tyd = real_month_table[1][split.hi] + split.lo;
			TEST_ASSERT_EQUAL(eyd, tyd);
		} else
			TEST_ASSERT_TRUE(eyd < 0 || eyd > 365);
		}

	return;
}
示例#4
0
/**
* 比较我的牌和上家的牌的大小,决定是否可以出牌
* @param myCards 我想出的牌
* @param myCardType 我的牌的类型
* @param prevCards 上家的牌
* @param prevCardType 上家的牌型
* @return 可以出牌,返回true;否则,返回false。
*/
bool CardUtil::isOvercomePrev(QList<CardItem *> myCards, CardType myCardType, QList<CardItem *> prevCards, CardType prevCardType) {
	if(myCardType == UNKNOW){
		return false;
	}
	// 上一首牌的个数
    int prevSize = prevCards.size();
    int mySize = myCards.size();

    // 我先出牌,上家没有牌
    if (prevSize == 0 && mySize != 0) {
        return true;
    }

    // 集中判断是否王炸,免得多次判断王炸
    if (prevCardType == WANG_ZHA) {
        qDebug("上家王炸,肯定不能出。");
        return false;
    } else if (myCardType == WANG_ZHA) {
        qDebug("我王炸,肯定能出。");
        return true;
    }

    // 集中判断对方不是炸弹,我出炸弹的情况
    if (prevCardType != ZHA_DAN && myCardType == ZHA_DAN) {
        return true;
    }

    // 默认情况:上家和自己想出的牌都符合规则
    qSort(prevCards.begin(),prevCards.end(),lessThan);
    qSort(myCards.begin(),myCards.end(),lessThan);

    int myGrade = myCards.at(0)->CardNum;
    int prevGrade = prevCards.at(0)->CardNum;

    // 比较2家的牌,主要有2种情况,1.我出和上家一种类型的牌,即对子管对子;
    // 2.我出炸弹,此时,和上家的牌的类型可能不同
    // 王炸的情况已经排除

    // 单
    if (prevCardType == DAN && myCardType == DAN) {
        // 一张牌可以大过上家的牌
		return isGT(myGrade,prevGrade);
    }
    // 对子
    else if (prevCardType == DUI_ZI
             && myCardType == DUI_ZI) {
        // 2张牌可以大过上家的牌
        return isGT(myGrade,prevGrade);
    }
    // 3不带
    else if (prevCardType == SAN_BU_DAI
             && myCardType == SAN_BU_DAI) {
        // 3张牌可以大过上家的牌
       return isGT(myGrade,prevGrade);
    }
    // 炸弹
    else if (prevCardType == ZHA_DAN
             && myCardType == ZHA_DAN) {
        // 4张牌可以大过上家的牌
        return isGT(myGrade,prevGrade);
    }
    // 3带1
    else if (prevCardType == SAN_DAI_YI
             && myCardType == SAN_DAI_YI) {
        // 3带1只需比较第2张牌的大小
        myGrade = myCards.at(1)->CardNum;
        prevGrade = prevCards.at(1)->CardNum;
        return isGT(myGrade,prevGrade);
    }
    // 4带2
    else if (prevCardType == SI_DAI_ER
             && myCardType == SI_DAI_ER) {
        // 4带2只需比较第3张牌的大小
        myGrade = myCards.at(2)->CardNum;
        prevGrade = prevCards.at(2)->CardNum;
    }
    // 顺子
    else if (prevCardType == SHUN_ZI
             && myCardType == SHUN_ZI) {
        if (mySize != prevSize) {
            return false;
        } else {
            // 顺子只需比较最大的1张牌的大小
            myGrade = myCards.at(mySize - 1)->CardNum;
            prevGrade = prevCards.at(prevSize - 1)->CardNum;
            return isGT(myGrade,prevGrade);
        }
    }
    // 连对
    else if (prevCardType == LIAN_DUI
             && myCardType == LIAN_DUI) {
        if (mySize != prevSize) {
            return false;
        } else {
            // 顺子只需比较最大的1张牌的大小
            myGrade = myCards.at(mySize - 1)->CardNum;
            prevGrade = prevCards.at(prevSize - 1)->CardNum;
            return isGT(myGrade,prevGrade);
        }
    }
    // 飞机
    else if (prevCardType == FEI_JI
             && myCardType == FEI_JI) {
        if (mySize != prevSize) {
            return false;
        } else {
            // 顺子只需比较第5张牌的大小(特殊情况333444555666没有考虑,即12张的飞机,可以有2种出法)
            myGrade = myCards.at(4)->CardNum;
            prevGrade = prevCards.at(4)->CardNum;
            return isGT(myGrade,prevGrade);
        }
    }
    // 默认不能出牌
    return false;
}