You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.1 KiB
72 lines
2.1 KiB
# 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()
|
|
|