Exemple #1
0
TEST(CompareTest, CompareIfDigitsAreEquals)
{
	BigInt left, right;
	left.size = 2;
	right.size = 2;

	int leftDigits[] = {123, 45};
	int rightDigits[] = {123, 45};
	SetDigits(&left, leftDigits);
	SetDigits(&right, rightDigits);
	ASSERT_EQ(true, AreEquals(&left, &right));
	ASSERT_EQ(false, IsGreater(&left, &right));
	ASSERT_EQ(false, IsLess(&left, &right));
}
void CTableLimits::AdjustForReasonableness()
{
	write_log(3, "CTableLimits::CheckForReasonableness()\n");
	// SB unknown?
	if (IsSmallerOrEqual(tablelimit_unreliable_input.sblind, 0))
	{
		SetSmallBlind(GuessSmallBlindFromBigBlind());
			write_log(3, "CTableLimits: adjusting SB\n");
	}
	// BB unknown?
	if (IsSmallerOrEqual(tablelimit_unreliable_input.bblind, 0))
	{
		SetBigBlind(GuessBigBlindFromSmallBlind());
			write_log(3, "CTableLimits: adjusting BB\n");
	}
	// BB out of range?
	if (IsGreater(tablelimit_unreliable_input.bblind, (tablelimit_unreliable_input.sblind*3)))
	{
		if (IsGreater(tablelimit_unreliable_input.sblind, 0))
		{
			SetBigBlind(GuessBigBlindFromSmallBlind());
		}
	}
	// SB out of range?
	if (IsGreaterOrEqual(tablelimit_unreliable_input.sblind, tablelimit_unreliable_input.bblind))
	{
		// Formerly this code was checking for SB > BB,
		// but up to now we never saw an online-game with identical blinds.
		// SB >= BB does usually mean, that SB did already act and complete.
		SetSmallBlind(GuessSmallBlindFromBigBlind());
		write_log(3, "CTableLimits: adjusting SB\n");
	}
	// Always force big-bet = 2 * big-blind
	SetBigBet(GuessBigBetFromBigBlind());
	write_log(3, "CTableLimits: adjusting big bet\n");
}
Exemple #3
0
void CTeam::SortPlayers(int nSortKey, int nDir)
{
	// Sanity checks...

	if (nSortKey == TM_KEY_SCORE) return;
	if (GetNumPlayers() <= 1) return;


	// Remove each player from our list, and insert it, sorted, into a temp list...

	CTeamPlayerList lsTemp;

	CTeamPlayer* pCurPlr = GetFirstPlayer();

	while (pCurPlr)
	{
		CTeamPlayer* pNextPlr = GetNextPlayer(pCurPlr);

		m_lsPlayers.Delete(pCurPlr);


		// Insert the player from our main list, sorted, into our temp list...

		CTeamPlayer* pTmpPlr = lsTemp.GetFirst();

		if (!pTmpPlr)
		{
			lsTemp.Insert(pCurPlr);
		}
		else
		{
			while (pTmpPlr)
			{
				if (nDir == TM_SORT_DESCENDING && IsGreater(pCurPlr, pTmpPlr, nSortKey))
				{
					lsTemp.InsertBefore(pTmpPlr, pCurPlr);
					pTmpPlr = NULL;
				}
				else if (nDir == TM_SORT_ASCENDING && IsLess(pCurPlr, pTmpPlr, nSortKey))
				{
					lsTemp.InsertBefore(pTmpPlr, pCurPlr);
					pTmpPlr = NULL;
				}
				else
				{
					pTmpPlr = pTmpPlr->GetNext();
					if (!pTmpPlr)
					{
						lsTemp.InsertLast(pCurPlr);
					}
				}
			}
		}

		pCurPlr = pNextPlr;
	}


	// Re-insert all items into our main list...

	CTeamPlayer* pPlr = lsTemp.GetFirst();

	while (pPlr)
	{
		CTeamPlayer* pNextPlr = pPlr->GetNext();
		m_lsPlayers.InsertLast(pPlr);
		pPlr = pNextPlr;
	}
}
Exemple #4
0
void CTeamMgr::SortTeams(int nSortKey, int nDir)
{
	// Sanity check...

	if (GetNumTeams() <= 1) return;


	// Remove each team from our list, and insert it, sorted, into a temp list...

	CTeamList lsTemp;

	CTeam* pCurTeam = GetFirstTeam();

	while (pCurTeam)
	{
		CTeam* pNextTeam = GetNextTeam(pCurTeam);

		m_lsTeams.Delete(pCurTeam);


		// Insert the team from our main list, sorted, into our temp list...

		CTeam* pTmpTeam = lsTemp.GetFirst();

		if (!pTmpTeam)
		{
			lsTemp.Insert(pCurTeam);
		}
		else
		{
			while (pTmpTeam)
			{
				if (nDir == TM_SORT_DESCENDING && IsGreater(pCurTeam, pTmpTeam, nSortKey))
				{
					lsTemp.InsertBefore(pTmpTeam, pCurTeam);
					pTmpTeam = NULL;
				}
				else if (nDir == TM_SORT_ASCENDING && IsLess(pCurTeam, pTmpTeam, nSortKey))
				{
					lsTemp.InsertBefore(pTmpTeam, pCurTeam);
					pTmpTeam = NULL;
				}
				else
				{
					pTmpTeam = pTmpTeam->GetNext();
					if (!pTmpTeam)
					{
						lsTemp.InsertLast(pCurTeam);
					}
				}
			}
		}

		pCurTeam = pNextTeam;
	}


	// Re-insert all items into our main list...

	CTeam* pTeam = lsTemp.GetFirst();

	while (pTeam)
	{
		CTeam* pNextTeam = pTeam->GetNext();
		m_lsTeams.InsertLast(pTeam);
		pTeam = pNextTeam;
	}
}
double CParseTreeNode::EvaluateBinaryExpression(bool log) {
  assert(_first_sibbling  != NULL);
  assert(_second_sibbling != NULL);
  assert(_third_sibbling  == NULL);
  assert(_terminal_name == "");
	double value_of_first_sibbling  = EvaluateSibbling(_first_sibbling, log);
	double value_of_second_sibbling = 0.0;
	// Short circuiting
	// Don't evaluate unnecessary parts of expressions
	if (_node_type == kTokenOperatorLogicalAnd)	{
		if (value_of_first_sibbling == false) {
			return false;
		}
		value_of_second_sibbling = EvaluateSibbling(_second_sibbling, log);
		return (value_of_second_sibbling ? true : false);
	}	else if (_node_type == kTokenOperatorLogicalOr)	{
    // Attention!
    // We can not look here for "value_of_first_sibbling == true"
    // because this way we would only accept true (==1)
    // but we want to accept any non-zero value.
    // http://www.maxinmontreal.com/forums/viewtopic.php?f=111&t=17899
		if (value_of_first_sibbling) {
			return true;
		}
		value_of_second_sibbling = EvaluateSibbling(_second_sibbling, log);
		return (value_of_second_sibbling ? true : false);
	}
	// Short circuiting done
	// Now normal evaluation of operators that need both operands
	value_of_second_sibbling = EvaluateSibbling(_second_sibbling, log);
	switch (_node_type) {
	  case kTokenOperatorPlus: 
		  return value_of_first_sibbling + value_of_second_sibbling;
	  case kTokenOperatorMinus: 
		  return value_of_first_sibbling - value_of_second_sibbling;
	  case kTokenOperatorMultiplication: 
		  return value_of_first_sibbling * value_of_second_sibbling;
	  case kTokenOperatorDivision: 
		  if (value_of_second_sibbling == 0) {
			  OH_MessageBox_Error_Warning("Division by zero.");
			  return kUndefined;
		  } else {
			  return value_of_first_sibbling / value_of_second_sibbling;
		  }
	  case kTokenOperatorModulo: 
      if (value_of_second_sibbling == 0) {
			  OH_MessageBox_Error_Warning("Division by zero.");
			  return kUndefined;
		  } else {
			  return (unsigned long)value_of_first_sibbling 
				  % (unsigned long)value_of_second_sibbling;
		  }
	  case kTokenOperatorExponentiation: 
		  return pow(value_of_first_sibbling, value_of_second_sibbling);
	  case kTokenOperatorEquality: 
		  return IsEqual(value_of_first_sibbling, value_of_second_sibbling);
	  case kTokenOperatorApproximatellyEqual: 
		  return IsApproximatellyEqual(value_of_first_sibbling, value_of_second_sibbling);
	  case kTokenOperatorSmaller: 
		  return IsSmaller(value_of_first_sibbling, value_of_second_sibbling);
	  case kTokenOperatorSmallerOrEqual: 
		  return IsSmallerOrEqual(value_of_first_sibbling, value_of_second_sibbling);
	  case kTokenOperatorGreater: 
		  return IsGreater(value_of_first_sibbling, value_of_second_sibbling);
	  case kTokenOperatorGreaterOrEqual: 
		  return IsGreaterOrEqual(value_of_first_sibbling, value_of_second_sibbling);
	  case kTokenOperatorNotEqual: 
	  case kTokenOperatorLogicalXOr: 
		  return value_of_first_sibbling != value_of_second_sibbling;
	  case kTokenOperatorBinaryAnd: 
		  return (unsigned long)value_of_first_sibbling 
			  & (unsigned long)value_of_second_sibbling;
	  case kTokenOperatorBinaryOr: 
		  return (unsigned long)value_of_first_sibbling 
			  | (unsigned long)value_of_second_sibbling;
	  case kTokenOperatorBinaryXOr: 
		  return (unsigned long)value_of_first_sibbling 
			  ^ (unsigned long)value_of_second_sibbling;
	  case kTokenOperatorBitShiftLeft: 
		  return (unsigned long)value_of_first_sibbling 
			  << (unsigned long)value_of_second_sibbling;
	  case kTokenOperatorBitShiftRight: 
		  return (unsigned long)value_of_first_sibbling 
			  >> (unsigned long)value_of_second_sibbling;
	  case kTokenOperatorPercentage: 
		  return value_of_first_sibbling * value_of_second_sibbling * 0.01;
	  default: assert(false);
	}
	return kUndefined;
}