# 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.
TEST_STAGE = -125

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

# The stride of permutation used to shuffle the input list of tasks. Should be
# relatively prime with NUM_TASKS.
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(NUM_TASKS)

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

    gen = Generation(set(tasks), None)

    # Permute the list.
    permutation = [(t * STRIDE) % NUM_TASKS for t in range(NUM_TASKS)]
    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(TEST_STAGE, 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()
