Skip to content

fractions

Fraction() - Create rational numbers.

Fraction arithmetic operations.

Fraction comparison operations.

Fraction conversion methods.

Fraction properties and methods.

Mathematical operations and properties.

Edge cases and special scenarios.

Basic: Create from numerator and denominator.

def test_create_from_integers(self):
    """Basic: Create from numerator and denominator."""
    f = Fraction(3, 4)
    assert f.numerator == 3
    assert f.denominator == 4

Verification: ✅ Tested in CI

Basic: Create from single integer.

def test_create_from_integer(self):
    """Basic: Create from single integer."""
    f = Fraction(5)
    assert f.numerator == 5
    assert f.denominator == 1

Verification: ✅ Tested in CI

Basic: Create from string.

def test_create_from_string(self):
    """Basic: Create from string."""
    f = Fraction('3/4')
    assert f.numerator == 3
    assert f.denominator == 4

Verification: ✅ Tested in CI

Feature: Create from decimal string.

def test_create_from_decimal_string(self):
    """Feature: Create from decimal string."""
    f = Fraction('0.25')
    assert f.numerator == 1
    assert f.denominator == 4

Verification: ✅ Tested in CI

Feature: Create from float.

def test_create_from_float(self):
    """Feature: Create from float."""
    f = Fraction(0.5)
    assert f.numerator == 1
    assert f.denominator == 2

Verification: ✅ Tested in CI

Feature: Create from Decimal.

def test_create_from_decimal(self):
    """Feature: Create from Decimal."""
    d = Decimal('0.25')
    f = Fraction(d)
    assert f.numerator == 1
    assert f.denominator == 4

Verification: ✅ Tested in CI

Property: Automatically reduces to lowest terms.

def test_automatic_reduction(self):
    """Property: Automatically reduces to lowest terms."""
    f = Fraction(6, 8)
    assert f.numerator == 3
    assert f.denominator == 4

Verification: ✅ Tested in CI

Basic: Negative fractions.

def test_negative_fraction(self):
    """Basic: Negative fractions."""
    f = Fraction(-3, 4)
    assert f.numerator == -3
    assert f.denominator == 4

Verification: ✅ Tested in CI

Property: Negative in denominator moves to numerator.

def test_negative_denominator(self):
    """Property: Negative in denominator moves to numerator."""
    f = Fraction(3, -4)
    assert f.numerator == -3
    assert f.denominator == 4

Verification: ✅ Tested in CI

Error: Zero denominator raises ZeroDivisionError.

def test_error_zero_denominator(self):
    """Error: Zero denominator raises ZeroDivisionError."""
    with pytest.raises(ZeroDivisionError):
        Fraction(1, 0)

Verification: ✅ Tested in CI

Error: Invalid string raises ValueError.

def test_error_invalid_string(self):
    """Error: Invalid string raises ValueError."""
    with pytest.raises(ValueError):
        Fraction('invalid')

Verification: ✅ Tested in CI

Basic: Addition of fractions.

def test_addition(self):
    """Basic: Addition of fractions."""
    a = Fraction(1, 4)
    b = Fraction(1, 2)
    result = a + b
    assert result == Fraction(3, 4)

Verification: ✅ Tested in CI

Basic: Subtraction of fractions.

def test_subtraction(self):
    """Basic: Subtraction of fractions."""
    a = Fraction(3, 4)
    b = Fraction(1, 4)
    result = a - b
    assert result == Fraction(1, 2)

Verification: ✅ Tested in CI

Basic: Multiplication of fractions.

def test_multiplication(self):
    """Basic: Multiplication of fractions."""
    a = Fraction(2, 3)
    b = Fraction(3, 4)
    result = a * b
    assert result == Fraction(1, 2)

Verification: ✅ Tested in CI

Basic: Division of fractions.

def test_division(self):
    """Basic: Division of fractions."""
    a = Fraction(1, 2)
    b = Fraction(1, 4)
    result = a / b
    assert result == Fraction(2, 1)

Verification: ✅ Tested in CI

Feature: Floor division.

def test_floor_division(self):
    """Feature: Floor division."""
    a = Fraction(7, 4)
    b = Fraction(1, 2)
    result = a // b
    assert result == 3

Verification: ✅ Tested in CI

Feature: Modulo operation.

def test_modulo(self):
    """Feature: Modulo operation."""
    a = Fraction(7, 4)
    b = Fraction(1, 2)
    result = a % b
    assert result == Fraction(1, 4)

Verification: ✅ Tested in CI

Feature: Exponentiation.

def test_power(self):
    """Feature: Exponentiation."""
    f = Fraction(2, 3)
    result = f ** 2
    assert result == Fraction(4, 9)

Verification: ✅ Tested in CI

Feature: Negative exponent.

def test_negative_power(self):
    """Feature: Negative exponent."""
    f = Fraction(2, 3)
    result = f ** (-1)
    assert result == Fraction(3, 2)

Verification: ✅ Tested in CI

Basic: Unary negation.

def test_negation(self):
    """Basic: Unary negation."""
    f = Fraction(3, 4)
    result = -f
    assert result == Fraction(-3, 4)

Verification: ✅ Tested in CI

Basic: Absolute value.

def test_absolute(self):
    """Basic: Absolute value."""
    f = Fraction(-3, 4)
    result = abs(f)
    assert result == Fraction(3, 4)

Verification: ✅ Tested in CI

Feature: Add fraction and integer.

def test_add_with_integer(self):
    """Feature: Add fraction and integer."""
    f = Fraction(1, 4)
    result = f + 1
    assert result == Fraction(5, 4)

Verification: ✅ Tested in CI

Feature: Multiply fraction by integer.

def test_multiply_by_integer(self):
    """Feature: Multiply fraction by integer."""
    f = Fraction(2, 3)
    result = f * 3
    assert result == Fraction(2, 1)

Verification: ✅ Tested in CI

Error: Division by zero.

def test_error_division_by_zero(self):
    """Error: Division by zero."""
    f = Fraction(1, 2)
    with pytest.raises(ZeroDivisionError):
        _ = f / 0

Verification: ✅ Tested in CI

Basic: Equality comparison.

def test_equality(self):
    """Basic: Equality comparison."""
    a = Fraction(1, 2)
    b = Fraction(2, 4)
    assert a == b

Verification: ✅ Tested in CI

Basic: Inequality comparison.

def test_inequality(self):
    """Basic: Inequality comparison."""
    a = Fraction(1, 2)
    b = Fraction(1, 3)
    assert a != b

Verification: ✅ Tested in CI

Basic: Less than comparison.

def test_less_than(self):
    """Basic: Less than comparison."""
    a = Fraction(1, 3)
    b = Fraction(1, 2)
    assert a < b

Verification: ✅ Tested in CI

Basic: Greater than comparison.

def test_greater_than(self):
    """Basic: Greater than comparison."""
    a = Fraction(1, 2)
    b = Fraction(1, 3)
    assert a > b

Verification: ✅ Tested in CI

Feature: Compare with integer.

def test_compare_with_integer(self):
    """Feature: Compare with integer."""
    f = Fraction(4, 2)
    assert f == 2

Verification: ✅ Tested in CI

Feature: Compare with float.

def test_compare_with_float(self):
    """Feature: Compare with float."""
    f = Fraction(1, 2)
    assert f == 0.5

Verification: ✅ Tested in CI

Property: Compares correctly with different denominators.

def test_compare_different_denominators(self):
    """Property: Compares correctly with different denominators."""
    a = Fraction(1, 2)
    b = Fraction(2, 3)
    assert a < b

Verification: ✅ Tested in CI

Basic: Convert to float.

def test_to_float(self):
    """Basic: Convert to float."""
    f = Fraction(1, 2)
    result = float(f)
    assert result == 0.5

Verification: ✅ Tested in CI

Basic: Convert to int (truncates).

def test_to_int(self):
    """Basic: Convert to int (truncates)."""
    f = Fraction(7, 4)
    result = int(f)
    assert result == 1

Verification: ✅ Tested in CI

Basic: String representation.

def test_to_string(self):
    """Basic: String representation."""
    f = Fraction(3, 4)
    assert str(f) == '3/4'

Verification: ✅ Tested in CI

Feature: Repr representation.

def test_repr(self):
    """Feature: Repr representation."""
    f = Fraction(3, 4)
    assert repr(f) == 'Fraction(3, 4)'

Verification: ✅ Tested in CI

Edge: Whole number as string.

def test_whole_number_string(self):
    """Edge: Whole number as string."""
    f = Fraction(4, 2)
    assert str(f) == '2'

Verification: ✅ Tested in CI

Basic: Numerator property.

def test_numerator_property(self):
    """Basic: Numerator property."""
    f = Fraction(3, 4)
    assert f.numerator == 3

Verification: ✅ Tested in CI

Basic: Denominator property.

def test_denominator_property(self):
    """Basic: Denominator property."""
    f = Fraction(3, 4)
    assert f.denominator == 4

Verification: ✅ Tested in CI

Feature: Approximate with limited denominator.

def test_limit_denominator(self):
    """Feature: Approximate with limited denominator."""
    f = Fraction(3.141592653589793)
    approx = f.limit_denominator(100)
    assert approx.denominator <= 100

Verification: ✅ Tested in CI

Property: Exact if within limit.

def test_limit_denominator_exact(self):
    """Property: Exact if within limit."""
    f = Fraction(22, 7)
    approx = f.limit_denominator(100)
    assert approx == f

Verification: ✅ Tested in CI

Feature: Explicit from_float constructor.

def test_from_float_method(self):
    """Feature: Explicit from_float constructor."""
    f = Fraction.from_float(0.25)
    assert f == Fraction(1, 4)

Verification: ✅ Tested in CI

Feature: Explicit from_decimal constructor.

def test_from_decimal_method(self):
    """Feature: Explicit from_decimal constructor."""
    d = Decimal('0.25')
    f = Fraction.from_decimal(d)
    assert f == Fraction(1, 4)

Verification: ✅ Tested in CI

Feature: Get numerator and denominator tuple.

def test_as_integer_ratio(self):
    """Feature: Get numerator and denominator tuple."""
    f = Fraction(3, 4)
    num, den = f.as_integer_ratio()
    assert num == 3
    assert den == 4

Verification: ✅ Tested in CI

Feature: Reciprocal via division.

def test_reciprocal(self):
    """Feature: Reciprocal via division."""
    f = Fraction(3, 4)
    reciprocal = 1 / f
    assert reciprocal == Fraction(4, 3)

Verification: ✅ Tested in CI

Property: Mixed operations maintain exactness.

def test_mixed_operations(self):
    """Property: Mixed operations maintain exactness."""
    a = Fraction(1, 3)
    b = Fraction(1, 6)
    result = (a + b) * 2
    assert result == Fraction(1, 1)

Verification: ✅ Tested in CI

Property: Repeated operations exact.

def test_repeated_division(self):
    """Property: Repeated operations exact."""
    f = Fraction(1, 1)
    for _ in range(10):
        f = f / 2
    assert f == Fraction(1, 1024)

Verification: ✅ Tested in CI

Edge: Zero as fraction.

def test_zero_fraction(self):
    """Edge: Zero as fraction."""
    f = Fraction(0, 1)
    assert f.numerator == 0
    assert f.denominator == 1

Verification: ✅ Tested in CI

Edge: One represented exactly.

def test_one_as_fraction(self):
    """Edge: One represented exactly."""
    f = Fraction(1, 1)
    assert f == 1

Verification: ✅ Tested in CI

Performance: Large numbers.

def test_large_numerator_denominator(self):
    """Performance: Large numbers."""
    f = Fraction(123456789, 987654321)
    assert f.numerator == 13717421
    assert f.denominator == 109739369

Verification: ✅ Tested in CI

Property: Solves float precision problems.

def test_float_precision_issue(self):
    """Property: Solves float precision problems."""
    a = Fraction('0.1')
    b = Fraction('0.2')
    result = a + b
    assert result == Fraction('0.3')

Verification: ✅ Tested in CI

Property: Always in lowest terms.

def test_reduce_common_factor(self):
    """Property: Always in lowest terms."""
    f = Fraction(100, 200)
    assert f.numerator == 1
    assert f.denominator == 2

Verification: ✅ Tested in CI

Edge: Negative numerator and denominator.

def test_negative_both(self):
    """Edge: Negative numerator and denominator."""
    f = Fraction(-3, -4)
    assert f.numerator == 3
    assert f.denominator == 4

Verification: ✅ Tested in CI

Error: Mixed number string not supported.

def test_mixed_number_string(self):
    """Error: Mixed number string not supported."""
    with pytest.raises(ValueError):
        Fraction('1 1/2')

Verification: ✅ Tested in CI

Feature: Bool conversion.

def test_bool_conversion(self):
    """Feature: Bool conversion."""
    zero = Fraction(0, 1)
    nonzero = Fraction(1, 2)
    assert not zero
    assert nonzero

Verification: ✅ Tested in CI

Property: Equal fractions have same hash.

def test_hash_consistency(self):
    """Property: Equal fractions have same hash."""
    a = Fraction(1, 2)
    b = Fraction(2, 4)
    assert hash(a) == hash(b)

Verification: ✅ Tested in CI

Property: Fraction(n, 1) hashes like int(n).

def test_hash_with_integer(self):
    """Property: Fraction(n, 1) hashes like int(n)."""
    f = Fraction(5, 1)
    assert hash(f) == hash(5)

Verification: ✅ Tested in CI

Property: Uses GCD for reduction.

def test_gcd_in_reduction(self):
    """Property: Uses GCD for reduction."""
    f = Fraction(12, 18)
    assert f.numerator == 2
    assert f.denominator == 3

Verification: ✅ Tested in CI

Edge: Compare with zero.

def test_compare_with_zero(self):
    """Edge: Compare with zero."""
    positive = Fraction(1, 2)
    negative = Fraction(-1, 2)
    zero = Fraction(0, 1)
    assert positive > zero
    assert negative < zero
    assert zero == 0

Verification: ✅ Tested in CI

Edge: Float with repeating decimal.

def test_from_float_repeating_decimal(self):
    """Edge: Float with repeating decimal."""
    f = Fraction(1.0 / 3.0)
    approx = f.limit_denominator(10)
    assert approx == Fraction(1, 3)

Verification: ✅ Tested in CI

Feature: String with whitespace.

def test_string_with_whitespace(self):
    """Feature: String with whitespace."""
    f = Fraction('  3/4  ')
    assert f == Fraction(3, 4)

Verification: ✅ Tested in CI

Feature: String with negative sign.

def test_string_negative(self):
    """Feature: String with negative sign."""
    f = Fraction('-3/4')
    assert f.numerator == -3
    assert f.denominator == 4

Verification: ✅ Tested in CI

Edge: Any fraction to power 0 is 1.

def test_power_zero(self):
    """Edge: Any fraction to power 0 is 1."""
    f = Fraction(3, 4)
    result = f ** 0
    assert result == 1

Verification: ✅ Tested in CI

Edge: Any fraction to power 1 is itself.

def test_power_one(self):
    """Edge: Any fraction to power 1 is itself."""
    f = Fraction(3, 4)
    result = f ** 1
    assert result == f

Verification: ✅ Tested in CI

Edge: Zero to positive power is zero.

def test_zero_power_positive(self):
    """Edge: Zero to positive power is zero."""
    f = Fraction(0, 1)
    result = f ** 5
    assert result == 0

Verification: ✅ Tested in CI

Edge: Zero to power zero is 1 (by convention).

def test_error_zero_power_zero(self):
    """Edge: Zero to power zero is 1 (by convention)."""
    f = Fraction(0, 1)
    result = f ** 0
    assert result == 1

Verification: ✅ Tested in CI

Feature: Create from another Fraction.

def test_from_another_fraction(self):
    """Feature: Create from another Fraction."""
    original = Fraction(3, 4)
    copy = Fraction(original)
    assert copy == original

Verification: ✅ Tested in CI

Property: Exact conversion for terminating decimals.

def test_exact_decimal_conversion(self):
    """Property: Exact conversion for terminating decimals."""
    f = Fraction('0.125')
    assert f == Fraction(1, 8)

Verification: ✅ Tested in CI

Property: Sign preserved during simplification.

def test_simplification_maintains_sign(self):
    """Property: Sign preserved during simplification."""
    f = Fraction(-6, 8)
    assert f.numerator == -3
    assert f.denominator == 4

Verification: ✅ Tested in CI