# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Generation unittest.

Part of the Chrome build flags optimization.
"""

__author__ = 'yuhenglong@google.com (Yuheng Long)'

import random
import unittest

from generation import Generation
from mock_task import IdentifierMockTask


# Pick an integer at random.
TESTSTAGE = -125

# The number of tasks to be put in a generation to be tested.
NUMTASKS = 20

# The stride of permutation used to shuffle the input list of tasks. Should be
# relatively prime with NUMTASKS.
STRIDE = 7


class GenerationTest(unittest.TestCase):
  """This class test the Generation class.

  Given a set of tasks in the generation, if there is any task that is pending,
  then the Done method will return false, and true otherwise.
  """

  def testDone(self):
    """"Test the Done method.

    Produce a generation with a set of tasks. Set the cost of the task one by
    one and verify that the Done method returns false before setting the cost
    for all the tasks. After the costs of all the tasks are set, the Done method
    should return true.
    """

    random.seed(0)

    testing_tasks = range(NUMTASKS)

    # The tasks for the generation to be tested.
    generation_tasks = [IdentifierMockTask(TESTSTAGE, t) for t in testing_tasks]

    gen = Generation(set(generation_tasks), None)

    # Permute the list.
    permutation = [(t * STRIDE) % NUMTASKS for t in range(NUMTASKS)]
    permuted_tasks = [testing_tasks[index] for index in permutation]

    # The Done method of the Generation should return false before all the tasks
    # in the permuted list are set.
    for testing_task in permuted_tasks:
      assert not gen.Done()

      # Mark a task as done by calling the UpdateTask method of the generation.
      # Send the generation the task as well as its results.
      gen.UpdateTask(IdentifierMockTask(TESTSTAGE, testing_task))

    # The Done method should return true after all the tasks in the permuted
    # list is set.
    assert gen.Done()

if __name__ == '__main__':
  unittest.main()
