Bird
Raised Fist0
PyTesttesting~20 mins

Approximate comparisons (pytest.approx) - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Approximate Comparison Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of approximate float comparison with pytest.approx
What is the result of running this pytest assertion code snippet?
PyTest
import pytest

def test_approx():
    assert 0.1 + 0.2 == pytest.approx(0.3)
ATest passes (no assertion error)
BAssertionError: 0.1 + 0.2 is not approximately equal to 0.3
CSyntaxError due to incorrect pytest.approx usage
DTypeError because pytest.approx cannot compare floats
Attempts:
2 left
💡 Hint
Remember that floating point arithmetic can cause small precision errors, pytest.approx helps with that.
❓ assertion
intermediate
2:00remaining
Choosing the correct pytest.approx usage for relative tolerance
Which assertion correctly tests that variable x is approximately 10 with a relative tolerance of 1%?
Aassert x == pytest.approx(10, rel=1)
Bassert x == pytest.approx(10, rel=0.01)
Cassert x == pytest.approx(10, abs=0.01)
Dassert x == pytest.approx(10, tol=0.01)
Attempts:
2 left
💡 Hint
Check the parameter name for relative tolerance in pytest.approx.
🔧 Debug
advanced
2:00remaining
Identify the error in pytest.approx usage
What error will this test raise when run?
PyTest
import pytest

def test_value():
    assert 5 == pytest.approx(5, rel=-0.1)
ATest passes without error
BAssertionError because 5 is not approximately equal to 5 with negative tolerance
CTypeError due to invalid argument type
DValueError: relative tolerance must be non-negative
Attempts:
2 left
💡 Hint
Check the allowed range for relative tolerance values in pytest.approx.
🧠 Conceptual
advanced
2:00remaining
Understanding pytest.approx behavior with sequences
Given two lists a = [1.0, 2.0, 3.0] and b = [1.0, 2.01, 3.0], which pytest assertion will pass?
PyTest
import pytest
a = [1.0, 2.0, 3.0]
b = [1.0, 2.01, 3.0]
Aassert a == pytest.approx(b, rel=0.005)
Bassert a == pytest.approx(b, abs=0.005)
Cassert a == pytest.approx(b, abs=0.02)
Dassert a == pytest.approx(b, rel=0.01)
Attempts:
2 left
💡 Hint
Consider the difference between 2.0 and 2.01 and the tolerance values.
❓ framework
expert
3:00remaining
Configuring pytest to globally change default tolerance for approx
How can you globally set pytest.approx to use a relative tolerance of 0.001 for all tests without changing each assertion?
AOverride pytest.approx in conftest.py to wrap original approx with rel=0.001
BUse a pytest fixture that monkeypatches pytest.approx to set rel=0.001 by default
CSet an environment variable PYTEST_APPROX_REL=0.001 before running tests
DCreate a pytest.ini file with [pytest] and add approx-rel = 0.001
Attempts:
2 left
💡 Hint
Think about how to customize pytest behavior programmatically.

Practice

(1/5)
1. What is the main purpose of using pytest.approx in tests?
easy
A. To compare floating-point numbers allowing small differences
B. To check if two strings are exactly the same
C. To test if a function raises an exception
D. To verify if a list contains a specific element

Solution

  1. Step 1: Understand floating-point comparison issues

    Floating-point numbers can have tiny differences due to rounding, so exact equality often fails.
  2. Step 2: Role of pytest.approx

    pytest.approx allows tests to pass if numbers are close within a tolerance, avoiding false failures.
  3. Final Answer:

    To compare floating-point numbers allowing small differences -> Option A
  4. Quick Check:

    Approximate comparison = floating-point tolerance [OK]
Hint: Use approx for floats, not exact matches [OK]
Common Mistakes:
  • Using == for floats causing flaky tests
  • Confusing approx with exception testing
  • Using approx for string comparisons
2. Which of the following is the correct syntax to assert that result is approximately equal to 3.14 using pytest.approx?
easy
A. assert result == pytest.approx[3.14]
B. assert result == approx(3.14)
C. assert result = pytest.approx(3.14)
D. assert result == pytest.approx(3.14)

Solution

  1. Step 1: Identify correct usage of pytest.approx

    The correct syntax uses the function call form: pytest.approx(value).
  2. Step 2: Check assertion syntax

    Assertions use '==' to compare, '=' is assignment and brackets [] are invalid here.
  3. Final Answer:

    assert result == pytest.approx(3.14) -> Option D
  4. Quick Check:

    Use '==' and parentheses with pytest.approx [OK]
Hint: Use '==' and parentheses with pytest.approx [OK]
Common Mistakes:
  • Using '=' instead of '==' in assert
  • Calling approx without pytest prefix if not imported
  • Using square brackets instead of parentheses
3. What will be the result of this test code?
def test_value():
    value = 0.1 + 0.2
    assert value == pytest.approx(0.3)
medium
A. Test passes because 0.1 + 0.2 is exactly 0.3
B. Test fails due to floating-point precision error
C. Test passes because pytest.approx allows small differences
D. SyntaxError because pytest.approx is used incorrectly

Solution

  1. Step 1: Understand floating-point addition

    0.1 + 0.2 is not exactly 0.3 due to floating-point precision limits.
  2. Step 2: Effect of pytest.approx in assertion

    pytest.approx allows a small tolerance, so the assertion passes despite tiny difference.
  3. Final Answer:

    Test passes because pytest.approx allows small differences -> Option C
  4. Quick Check:

    Floating-point sum ≈ 0.3 passes with approx [OK]
Hint: Use approx to handle float rounding errors [OK]
Common Mistakes:
  • Assuming 0.1 + 0.2 equals exactly 0.3
  • Expecting test to fail without approx
  • Thinking pytest.approx causes syntax errors
4. Identify the error in this test code snippet:
def test_approx():
    result = 1.0001
    assert result == pytest.approx(1.0, rel=0.00001)
medium
A. The relative tolerance is too small, causing test to fail
B. pytest.approx does not accept rel parameter
C. The assertion syntax is incorrect
D. The variable result should be an integer

Solution

  1. Step 1: Check relative tolerance meaning

    rel=0.00001 means allowed difference is 0.00001 * 1.0 = 0.00001.
  2. Step 2: Compare actual difference with tolerance

    Difference is 0.0001, which is greater than 0.00001, so assertion fails.
  3. Final Answer:

    The relative tolerance is too small, causing test to fail -> Option A
  4. Quick Check:

    Difference > rel tolerance causes failure [OK]
Hint: Check if difference fits within rel tolerance [OK]
Common Mistakes:
  • Assuming rel parameter is invalid
  • Ignoring difference size vs tolerance
  • Confusing syntax error with logic error
5. You want to test that a function returns a value close to 100, but it may vary by up to 0.5 units. Which is the best way to write this assertion using pytest.approx?
hard
A. assert result == pytest.approx(100, rel=0.5)
B. assert result == pytest.approx(100, abs=0.5)
C. assert result == pytest.approx(100, abs=0.05)
D. assert result == pytest.approx(100, rel=0.005)

Solution

  1. Step 1: Understand absolute vs relative tolerance

    Absolute tolerance (abs) allows fixed difference; relative (rel) allows percentage difference.
  2. Step 2: Match tolerance to requirement

    Variation up to 0.5 units means absolute tolerance of 0.5 is correct.
  3. Final Answer:

    assert result == pytest.approx(100, abs=0.5) -> Option B
  4. Quick Check:

    Use abs=0.5 for fixed unit tolerance [OK]
Hint: Use abs for fixed tolerance, rel for percentage [OK]
Common Mistakes:
  • Using rel when fixed tolerance needed
  • Setting abs too small to cover variation
  • Confusing abs and rel parameters
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard