def determineGroup(benchmarkObj):
  """
    Returns 0 if benchmark expects all verification tasks to be correct.
    Returns 1 if benchmark expects at least one verification task to be incorrect.
    Returns 2 if benchmark expects a mixture of correct and unknown verification tasks.
    Return  3 if benchmarks expect all tasks to be unknown.
  """
  foundAllCorrect=True # Assume to be true until we discover to be false
  foundAllUnknown=True # Assume to be true until we discover to be false
  foundIncorrect=False # Assume to be false until we discover to be true
  foundMixedCorrectAndUnknown=True # Assume to be true until we discover to be false
  correctCount = 0
  for (taskName, properties) in benchmarkObj.verificationTasks.items():
    correct = properties['correct']
    if correct == False:
      foundIncorrect = True
      foundAllCorrect = False
      foundAllUnknown = False
      foundMixedCorrectAndUnknown = False
      break
    elif correct == None:
      foundAllCorrect = False
    elif correct == True:
      correctCount += 1
      foundAllUnknown = False

  if (correctCount == 0 and foundMixedCorrectAndUnknown) or foundAllUnknown:
    # We need to have seen at least one verification task expected to be
    # correct.
    foundMixedCorrectAndUnknown = False

  if foundAllCorrect:
    return 0

  if foundIncorrect:
    return 1

  if foundMixedCorrectAndUnknown:
    assert not foundAllUnknown
    return 2

  assert foundAllUnknown
  return 3