1+ package com.baeldung.removeAmbiguityInKotlinFunctionByReference
2+
3+ import org.junit.jupiter.api.Assertions.assertEquals
4+ import org.junit.jupiter.api.Test
5+
6+
7+ typealias StringComputer = (String ) -> String
8+
9+ typealias IntComputer = (Int ) -> Int
10+
11+ class Calculator (val base : Int ) {
12+ fun compute (value : Int ): Int = base + value
13+ fun compute (value : String ): String = " $base$value "
14+ }
15+
16+ fun Calculator.computeInt (value : Int ): Int = compute(value)
17+
18+ fun Calculator.computeString (value : String ): String = compute(value)
19+
20+ class RemoveAmbiguityInKotlinFunctionByReferenceUnitTest {
21+
22+ private val calculator = Calculator (10 )
23+
24+ @Test
25+ fun `Should compute with int function` () {
26+ val computeInt: (Int ) -> Int = calculator::compute
27+ assertEquals(15 , computeInt(5 ))
28+ }
29+
30+ @Test
31+ fun `Should compute with string function` () {
32+ val computeString: (String ) -> String = calculator::compute
33+ assertEquals(" 105" , computeString(" 5" ))
34+ }
35+
36+ @Test
37+ fun `Should compute int with lambda` () {
38+ val computeInt = { value: Int -> calculator.compute(value) }
39+ assertEquals(15 , computeInt(5 ))
40+ }
41+
42+ @Test
43+ fun `Should compute string with lambda` () {
44+ val computeString = { value: String -> calculator.compute(value) }
45+ assertEquals(" 105" , computeString(" 5" ))
46+ }
47+
48+ @Test
49+ fun `should compute int with extension function` () {
50+ val computeIntFn = calculator::computeInt
51+ assertEquals(15 , computeIntFn(5 ))
52+ }
53+
54+ @Test
55+ fun `should compute string with extension function` () {
56+ val computeStringFn = calculator::computeString
57+ assertEquals(" 105" , computeStringFn(" 5" ))
58+ }
59+
60+
61+ @Test
62+ fun `Should compute int with type alias` () {
63+ val computeInt: IntComputer = calculator::compute
64+ assertEquals(15 , computeInt(5 ))
65+ }
66+
67+ @Test
68+ fun `Should compute string with type alias` () {
69+ val computeString: StringComputer = calculator::compute
70+ assertEquals(" 105" , computeString(" 5" ))
71+ }
72+ }
0 commit comments