Skip to content

Commit 7572dbf

Browse files
committed
Unit test "convert to Boolean"
1 parent 3e2329e commit 7572dbf

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convert.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import org.jetbrains.kotlinx.dataframe.io.toDataFrame
3030
import java.math.BigDecimal
3131
import java.net.URL
3232
import java.time.LocalTime
33-
import java.util.*
33+
import java.util.Locale
3434
import kotlin.reflect.KProperty
3535
import kotlin.reflect.KType
3636
import kotlin.reflect.typeOf

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/convert.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import org.jetbrains.kotlinx.dataframe.type
3636
import java.math.BigDecimal
3737
import java.net.URL
3838
import java.time.LocalTime
39-
import java.util.*
39+
import java.util.Locale
4040
import kotlin.math.roundToInt
4141
import kotlin.math.roundToLong
4242
import kotlin.reflect.KType
@@ -206,7 +206,7 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
206206
Byte::class -> convert<Number> { it.toByte() }
207207
Short::class -> convert<Number> { it.toShort() }
208208
Long::class -> convert<Number> { it.toLong() }
209-
Boolean::class -> convert<Number> { it != 0 }
209+
Boolean::class -> convert<Number> { it.toDouble() != 0.0 }
210210
else -> null
211211
}
212212
Int::class -> when (toClass) {

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/ParserTests.kt

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@ import io.kotest.matchers.shouldBe
44
import kotlinx.datetime.LocalDateTime
55
import org.jetbrains.kotlinx.dataframe.DataColumn
66
import org.jetbrains.kotlinx.dataframe.DataFrame
7-
import org.jetbrains.kotlinx.dataframe.api.*
7+
import org.jetbrains.kotlinx.dataframe.api.cast
88
import org.jetbrains.kotlinx.dataframe.api.columnOf
9+
import org.jetbrains.kotlinx.dataframe.api.convertTo
10+
import org.jetbrains.kotlinx.dataframe.api.parse
11+
import org.jetbrains.kotlinx.dataframe.api.parser
12+
import org.jetbrains.kotlinx.dataframe.api.tryParse
913
import org.jetbrains.kotlinx.dataframe.exceptions.TypeConversionException
1014
import org.junit.Test
1115
import java.math.BigDecimal
12-
import java.util.*
16+
import java.util.Locale
1317
import kotlin.reflect.typeOf
1418

1519
class ParserTests {
@@ -62,17 +66,27 @@ class ParserTests {
6266
}
6367

6468
@Test
65-
fun `converting string to double in different locales`() {
69+
fun `convert to Boolean`() {
70+
val col by columnOf(BigDecimal(1.0), BigDecimal(0.0), 0, 1, 10L, 0.0, 0.1)
71+
col.convertTo<Boolean>().shouldBe(
72+
DataColumn.createValueColumn("col", listOf(true, false, false, true, true, false, true), typeOf<Boolean>())
73+
)
74+
}
75+
76+
@Test
77+
fun `converting String to Double in different locales`() {
6678
val currentLocale = Locale.getDefault()
6779
try {
6880
val stringValues = listOf("1", "2.3", "4,5")
6981
val stringColumn = DataColumn.createValueColumn("nums", stringValues, typeOf<String>())
7082
Locale.setDefault(Locale.forLanguageTag("ru-RU"))
71-
stringColumn.convertToDouble().shouldBe(
83+
// Use comma as local decimal separator and dot as fallback default (as it is used in POSIX/C.UTF-8)
84+
stringColumn.convertTo<Double>().shouldBe(
7285
DataColumn.createValueColumn("nums", listOf(1.0, 2.3, 4.5), typeOf<Double>())
7386
)
7487
Locale.setDefault(Locale.forLanguageTag("en-US"))
75-
stringColumn.convertToDouble().shouldBe(
88+
// Use dot as local decimal separator. Comma is ignored (as it is group separator in this locale).
89+
stringColumn.convertTo<Double>().shouldBe(
7690
DataColumn.createValueColumn("nums", listOf(1.0, 2.3, 45.0), typeOf<Double>())
7791
)
7892
} finally {

0 commit comments

Comments
 (0)