73 lines
2.1 KiB
Python
73 lines
2.1 KiB
Python
# 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()
|