Native: improve tests for __NSCFBoolean RTTI conversion

- ObjCExport tests for numbers RTTI conversions didn't really check
  RTTI, because of a compiler optimization. Fix this by converting to
  Any.
- Also add more tests that specifically check that bool `NSNumber` get
  dynamically converted to `kotlin.Boolean` box. Those tests can't be
  affected by possible future compiler optimizations.
This commit is contained in:
Svyatoslav Scherbina
2023-11-21 11:57:26 +01:00
committed by Space Team
parent 7bd4de65f8
commit 707a650de1
5 changed files with 15 additions and 3 deletions
@@ -3214,6 +3214,7 @@ __attribute__((swift_name("ValuesKt")))
+ (id<KtTransform>)createTransformDecimalStringToInt __attribute__((swift_name("createTransformDecimalStringToInt()")));
+ (void)emptyFun __attribute__((swift_name("emptyFun()")));
+ (void)ensureEqualBooleansActual:(KtBoolean * _Nullable)actual expected:(BOOL)expected __attribute__((swift_name("ensureEqualBooleans(actual:expected:)")));
+ (void)ensureEqualBooleansAsAnyActual:(id _Nullable)actual expected:(BOOL)expected __attribute__((swift_name("ensureEqualBooleansAsAny(actual:expected:)")));
+ (void)ensureEqualBytesActual:(KtByte * _Nullable)actual expected:(int8_t)expected __attribute__((swift_name("ensureEqualBytes(actual:expected:)")));
+ (void)ensureEqualDoublesActual:(KtDouble * _Nullable)actual expected:(double)expected __attribute__((swift_name("ensureEqualDoubles(actual:expected:)")));
+ (void)ensureEqualFloatsActual:(KtFloat * _Nullable)actual expected:(float)expected __attribute__((swift_name("ensureEqualFloats(actual:expected:)")));
@@ -3214,6 +3214,7 @@ __attribute__((swift_name("ValuesKt")))
+ (id<KtTransform>)createTransformDecimalStringToInt __attribute__((swift_name("createTransformDecimalStringToInt()")));
+ (void)emptyFun __attribute__((swift_name("emptyFun()")));
+ (void)ensureEqualBooleansActual:(KtBoolean * _Nullable)actual expected:(BOOL)expected __attribute__((swift_name("ensureEqualBooleans(actual:expected:)")));
+ (void)ensureEqualBooleansAsAnyActual:(id _Nullable)actual expected:(BOOL)expected __attribute__((swift_name("ensureEqualBooleansAsAny(actual:expected:)")));
+ (void)ensureEqualBytesActual:(KtByte * _Nullable)actual expected:(int8_t)expected __attribute__((swift_name("ensureEqualBytes(actual:expected:)")));
+ (void)ensureEqualDoublesActual:(KtDouble * _Nullable)actual expected:(double)expected __attribute__((swift_name("ensureEqualDoubles(actual:expected:)")));
+ (void)ensureEqualFloatsActual:(KtFloat * _Nullable)actual expected:(float)expected __attribute__((swift_name("ensureEqualFloats(actual:expected:)")));
@@ -3214,6 +3214,7 @@ __attribute__((swift_name("ValuesKt")))
+ (id<KtTransform>)createTransformDecimalStringToInt __attribute__((swift_name("createTransformDecimalStringToInt()")));
+ (void)emptyFun __attribute__((swift_name("emptyFun()")));
+ (void)ensureEqualBooleansActual:(KtBoolean * _Nullable)actual expected:(BOOL)expected __attribute__((swift_name("ensureEqualBooleans(actual:expected:)")));
+ (void)ensureEqualBooleansAsAnyActual:(id _Nullable)actual expected:(BOOL)expected __attribute__((swift_name("ensureEqualBooleansAsAny(actual:expected:)")));
+ (void)ensureEqualBytesActual:(KtByte * _Nullable)actual expected:(int8_t)expected __attribute__((swift_name("ensureEqualBytes(actual:expected:)")));
+ (void)ensureEqualDoublesActual:(KtDouble * _Nullable)actual expected:(double)expected __attribute__((swift_name("ensureEqualDoubles(actual:expected:)")));
+ (void)ensureEqualFloatsActual:(KtFloat * _Nullable)actual expected:(float)expected __attribute__((swift_name("ensureEqualFloats(actual:expected:)")));
@@ -58,12 +58,18 @@ fun box(uLongValue: ULong) = uLongValue.toNullable()
fun box(floatValue: Float) = floatValue.toNullable()
fun box(doubleValue: Double) = doubleValue.toNullable()
private inline fun <reified T> ensureEquals(actual: T?, expected: T) {
if (actual !is T) error(T::class)
if (actual != expected) error(T::class)
private fun ensureEquals(actual: Any?, expected: Any, expectedClass: KClass<*>) {
check(actual != null)
if (actual::class != expectedClass) error("expected ::class $expectedClass, got ${actual::class}")
if (actual != expected) error("for $expectedClass expected $expected, got $actual")
}
private inline fun <reified T : Any> ensureEquals(actual: T?, expected: T) {
ensureEquals(actual, expected, T::class)
}
fun ensureEqualBooleans(actual: Boolean?, expected: Boolean) = ensureEquals(actual, expected)
fun ensureEqualBooleansAsAny(actual: Any?, expected: Boolean) = ensureEquals(actual as Boolean?, expected)
fun ensureEqualBytes(actual: Byte?, expected: Byte) = ensureEquals(actual, expected)
fun ensureEqualShorts(actual: Short?, expected: Short) = ensureEquals(actual, expected)
fun ensureEqualInts(actual: Int?, expected: Int) = ensureEquals(actual, expected)
@@ -137,6 +137,9 @@ func testNumbers() throws {
ValuesKt.ensureEqualBooleans(actual: KotlinBoolean(value: true), expected: true)
ValuesKt.ensureEqualBooleans(actual: false, expected: false)
ValuesKt.ensureEqualBooleansAsAny(actual: true, expected: true)
ValuesKt.ensureEqualBooleansAsAny(actual: false, expected: false)
ValuesKt.ensureEqualBytes(actual: KotlinByte(value: 42), expected: 42)
ValuesKt.ensureEqualBytes(actual: -11, expected: -11)