Esempio n. 1
0
    def equal_or_lesser_assignable(self):
        r'''Gets assignable duration equal or just less than this duration.

        ..  container:: example

            **Example.** Gets equal-or-lesser assignable duration:

            ::

                >>> for numerator in range(1, 16 + 1):
                ...     duration = Duration(numerator, 16)
                ...     result = duration.equal_or_lesser_assignable
                ...     sixteenths = duration.with_denominator(16)
                ...     print('{!s}\t{!s}'.format(sixteenths, result))
                ...
                1/16    1/16
                2/16    1/8
                3/16    3/16
                4/16    1/4
                5/16    1/4
                6/16    3/8
                7/16    7/16
                8/16    1/2
                9/16    1/2
                10/16   1/2
                11/16   1/2
                12/16   3/4
                13/16   3/4
                14/16   7/8
                15/16   15/16
                16/16   1

        Returns new duration.
        '''
        good_denominator = mathtools.least_power_of_two_greater_equal(
            self.denominator)
        current_numerator = self.numerator
        candidate = type(self)(current_numerator, good_denominator)
        while not candidate.is_assignable:
            current_numerator -= 1
            candidate = type(self)(current_numerator, good_denominator)
        return candidate
Esempio n. 2
0
    def equal_or_lesser_assignable(self):
        r'''Gets assignable duration equal or just less than this duration.

        ..  container:: example

            **Example.** Gets equal-or-lesser assignable duration:

            ::

                >>> for numerator in range(1, 16 + 1):
                ...     duration = Duration(numerator, 16)
                ...     result = duration.equal_or_lesser_assignable
                ...     sixteenths = duration.with_denominator(16)
                ...     print('{!s}\t{!s}'.format(sixteenths, result))
                ...
                1/16    1/16
                2/16    1/8
                3/16    3/16
                4/16    1/4
                5/16    1/4
                6/16    3/8
                7/16    7/16
                8/16    1/2
                9/16    1/2
                10/16   1/2
                11/16   1/2
                12/16   3/4
                13/16   3/4
                14/16   7/8
                15/16   15/16
                16/16   1

        Returns new duration.
        '''
        good_denominator = mathtools.least_power_of_two_greater_equal(
            self.denominator)
        current_numerator = self.numerator
        candidate = type(self)(current_numerator, good_denominator)
        while not candidate.is_assignable:
            current_numerator -= 1
            candidate = type(self)(current_numerator, good_denominator)
        return candidate
Esempio n. 3
0
    def equal_or_lesser_assignable(self):
        r'''Equal or lesser assignable:

        ::

            >>> for numerator in range(1, 16 + 1):
            ...     duration = Duration(numerator, 16)
            ...     result = duration.equal_or_lesser_assignable
            ...     print '{}\t{}'.format(
            ...         duration.with_denominator(16), result)
            ...
            1/16    1/16
            2/16    1/8
            3/16    3/16
            4/16    1/4
            5/16    1/4
            6/16    3/8
            7/16    7/16
            8/16    1/2
            9/16    1/2
            10/16   1/2
            11/16   1/2
            12/16   3/4
            13/16   3/4
            14/16   7/8
            15/16   15/16
            16/16   1

        Returns new duration.
        '''
        good_denominator = mathtools.least_power_of_two_greater_equal(
            self.denominator)
        current_numerator = self.numerator
        candidate = type(self)(current_numerator, good_denominator)
        while not candidate.is_assignable:
            current_numerator -= 1
            candidate = type(self)(current_numerator, good_denominator)
        return candidate
def test_mathtools_least_power_of_two_greater_equal_01():
    r'''Returns least integer power of two
        greater than or equal to n.'''

    assert mathtools.least_power_of_two_greater_equal(1) == 1
    assert mathtools.least_power_of_two_greater_equal(2) == 2
    assert mathtools.least_power_of_two_greater_equal(3) == 4
    assert mathtools.least_power_of_two_greater_equal(4) == 4
    assert mathtools.least_power_of_two_greater_equal(5) == 8
    assert mathtools.least_power_of_two_greater_equal(6) == 8
    assert mathtools.least_power_of_two_greater_equal(7) == 8
    assert mathtools.least_power_of_two_greater_equal(8) == 8
    assert mathtools.least_power_of_two_greater_equal(9) == 16
    assert mathtools.least_power_of_two_greater_equal(10) == 16
    assert mathtools.least_power_of_two_greater_equal(11) == 16
    assert mathtools.least_power_of_two_greater_equal(12) == 16
def test_mathtools_least_power_of_two_greater_equal_03():
    r'''Optional offset keyword allows for the next to greatest
        integer power of two, etc.'''

    assert mathtools.least_power_of_two_greater_equal(1, 1) == 2
    assert mathtools.least_power_of_two_greater_equal(2, 1) == 4
    assert mathtools.least_power_of_two_greater_equal(3, 1) == 8
    assert mathtools.least_power_of_two_greater_equal(4, 1) == 8
    assert mathtools.least_power_of_two_greater_equal(5, 1) == 16
    assert mathtools.least_power_of_two_greater_equal(6, 1) == 16
    assert mathtools.least_power_of_two_greater_equal(7, 1) == 16
    assert mathtools.least_power_of_two_greater_equal(8, 1) == 16
    assert mathtools.least_power_of_two_greater_equal(9, 1) == 32
    assert mathtools.least_power_of_two_greater_equal(10, 1) == 32
    assert mathtools.least_power_of_two_greater_equal(11, 1) == 32
    assert mathtools.least_power_of_two_greater_equal(12, 1) == 32