# Copyright (c) 2013 The ChromiumOS 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()
