# Copyright 2018 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.

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from multithreaded_processor import MultithreadedProcessor
from six.moves import range


class EvenNumbersGenerator():
    """
    An example and a simple test for multithreaded_processor.py.

    These class is supposed to generate a table of even numbers using
    many threads.

    """
    def __init__(self):
        # creates a processor class with 13 threads
        self._processor = MultithreadedProcessor(13)

    def getEvenNumbers(self, count):
        """
        @param count: a count of even numbers to return

        @returns a list of first 'count' even numbers in ascending order

        """
        # prepares input data
        self._data = list(range(count))
        # runs the calculations and returns an output
        return self._processor.run(self._thread, count)

    def _thread(self, task_id):
        # calculates single even number
        return (self._data[task_id]*2)


def main():
    """
    Unit test for MultithreadedProcessor

    """
    # runs the test
    gen = EvenNumbersGenerator()
    evenNumbers = gen.getEvenNumbers(12345)
    # checks the output
    assert len(evenNumbers) == 12345
    for i, number in enumerate(evenNumbers):
        assert number == i*2


if __name__ == '__main__':
    main()
