Bird
Raised Fist0
Kotlinprogramming~20 mins

Property-based testing concept in Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Property Testing Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this property-based test snippet?
Consider this Kotlin code using the property-based testing library Kotest. What will be printed when the test runs?
Kotlin
import io.kotest.property.checkAll
import io.kotest.property.arbitrary.int

fun main() {
    checkAll<Int> { a ->
        println(a * 2 >= a)
    }
}
APrints 'true' for all generated integers
BCompilation error due to missing import
CPrints 'false' for some integers
DRuntime exception due to overflow
Attempts:
2 left
💡 Hint
Consider negative integers: for a = -1, is -2 >= -1?
🧠 Conceptual
intermediate
1:30remaining
What is the main advantage of property-based testing?
Choose the best description of the main advantage of property-based testing compared to example-based testing.
AIt tests many random inputs automatically to find edge cases
BIt replaces the need for unit tests entirely
CIt only tests the user interface of applications
DIt requires writing fewer tests because it uses examples
Attempts:
2 left
💡 Hint
Think about how property-based testing generates inputs.
🔧 Debug
advanced
2:30remaining
Why does this property-based test fail with a false negative?
This Kotlin property-based test is supposed to check if reversing a list twice returns the original list. Why might it fail unexpectedly?
Kotlin
import io.kotest.property.checkAll

fun main() {
    checkAll<List<Int>> { list ->
        assert(list.reversed().reversed() == list)
    }
}
AThe test fails because reversed() changes the original list in place
BThe test fails because reversed() does not return a new list
CThe test fails because assert throws an exception instead of reporting failure
DThe test fails because List<Int> is not a valid generator type without specifying an arbitrary
Attempts:
2 left
💡 Hint
Consider how property-based testing generates inputs for generic types.
📝 Syntax
advanced
2:00remaining
Which option correctly defines a property test for reversing a string twice?
Select the Kotlin code snippet that correctly tests if reversing a string twice returns the original string using Kotest property testing.
AcheckAll<String> { s -> assertEquals(s, s.reversed().reversed()) }
BcheckAll<String> { s -> assert(s.reversed().reversed() == s) }
CcheckAll<String> { s -> assert(s == s.reversed().reversed()) }
DcheckAll<String> { s -> assert(s.reversed() == s) }
Attempts:
2 left
💡 Hint
Consider the best assertion function to use in Kotlin tests.
🚀 Application
expert
1:30remaining
How many test cases will be generated by this property test?
Given this Kotlin property-based test code, how many test cases will Kotest generate by default?
Kotlin
import io.kotest.property.checkAll

fun main() {
    checkAll<Int> { a ->
        println(a)
    }
}
A50 test cases
B100 test cases
C10 test cases
DUnlimited test cases until failure
Attempts:
2 left
💡 Hint
Check Kotest default number of generated cases for checkAll.

Practice

(1/5)
1.

What is the main idea behind property-based testing in Kotlin?

easy
A. Writing tests only for fixed input values
B. Manually verifying outputs for each test case
C. Checking if the code compiles without errors
D. Testing that a property or rule holds true for many random inputs

Solution

  1. Step 1: Understand property-based testing concept

    Property-based testing means checking if a rule or property is true for many inputs, not just a few fixed ones.
  2. Step 2: Compare options with concept

    Only Testing that a property or rule holds true for many random inputs describes testing many random inputs against a property, which matches the concept.
  3. Final Answer:

    Testing that a property or rule holds true for many random inputs -> Option D
  4. Quick Check:

    Property-based testing = many inputs tested [OK]
Hint: Look for 'many inputs' and 'rules' in the answer [OK]
Common Mistakes:
  • Confusing property-based testing with example-based testing
  • Thinking it only tests fixed inputs
  • Assuming it checks compilation only
2.

Which Kotlin library is commonly used for property-based testing?

easy
A. JUnit
B. Mockito
C. Kotest
D. Retrofit

Solution

  1. Step 1: Identify Kotlin testing libraries

    JUnit is for unit testing, Mockito for mocking, Retrofit for networking, Kotest supports property-based testing.
  2. Step 2: Match library to property-based testing

    Kotest provides generators and property testing features, making it the correct choice.
  3. Final Answer:

    Kotest -> Option C
  4. Quick Check:

    Kotest = property-based testing library [OK]
Hint: Remember Kotest for property-based tests in Kotlin [OK]
Common Mistakes:
  • Confusing JUnit with property-based testing support
  • Choosing Mockito which is for mocking
  • Selecting Retrofit which is unrelated
3.

Consider this Kotlin property-based test snippet using Kotest:

import io.kotest.property.checkAll

fun isSorted(list: List<Int>): Boolean = list.zipWithNext().all { it.first <= it.second }

checkAll { list ->
    assert(isSorted(list.sorted()))
}

What will this test do?

medium
A. Check that the list contains only positive numbers
B. Check that sorting any list results in a sorted list
C. Check that the list is empty
D. Check that any list is already sorted

Solution

  1. Step 1: Understand the test code

    The test generates many random lists of integers. For each list, it sorts the list and checks if the sorted list is sorted using isSorted.
  2. Step 2: Interpret the assertion

    The assertion verifies that sorting produces a sorted list, which is a property that should always hold.
  3. Final Answer:

    Check that sorting any list results in a sorted list -> Option B
  4. Quick Check:

    Sorting list => sorted list [OK]
Hint: Look for sorting and isSorted check in the code [OK]
Common Mistakes:
  • Thinking it checks if original list is sorted
  • Assuming it checks list emptiness
  • Confusing list contents with positivity
4.

What is wrong with this Kotlin property-based test using Kotest?

checkAll<Int> { n ->
    assert(n > 0)
}

Choose the best explanation.

medium
A. It will fail because it tests all Ints, including zero and negatives
B. It will pass because all Ints are positive
C. It has a syntax error in the lambda
D. It only tests positive numbers, so it's correct

Solution

  1. Step 1: Analyze the test input range

    The test uses checkAll<Int> which generates all Int values, including negatives and zero.
  2. Step 2: Understand the assertion

    The assertion assert(n > 0) expects all numbers to be positive, which is false for many generated values.
  3. Final Answer:

    It will fail because it tests all Ints, including zero and negatives -> Option A
  4. Quick Check:

    All Ints include negatives, so assert fails [OK]
Hint: Remember Int includes negatives and zero [OK]
Common Mistakes:
  • Assuming all Ints are positive
  • Thinking lambda syntax is wrong
  • Believing test only runs on positive numbers
5.

You want to test a function reverseTwice(list: List<Int>): List<Int> that reverses a list twice. Which property-based test best checks that reverseTwice returns the original list?

fun reverseTwice(list: List<Int>): List<Int> = list.reversed().reversed()
hard
A. checkAll { list -> assert(reverseTwice(list) == list) }
B. checkAll { list -> assert(reverseTwice(list) == list.reversed()) }
C. checkAll { list -> assert(reverseTwice(list).isEmpty()) }
D. checkAll { list -> assert(reverseTwice(list).size == 0) }

Solution

  1. Step 1: Understand the function behavior

    Reversing a list twice should return the original list unchanged.
  2. Step 2: Match the property test to the behavior

    checkAll { list -> assert(reverseTwice(list) == list) } asserts that reverseTwice(list) equals the original list, which correctly tests the property.
  3. Final Answer:

    checkAll<List<Int>> { list -> assert(reverseTwice(list) == list) } -> Option A
  4. Quick Check:

    Reverse twice = original list [OK]
Hint: Check if test compares to original list [OK]
Common Mistakes:
  • Comparing to reversed list instead of original
  • Checking if result is empty incorrectly
  • Testing size equals zero wrongly
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