From bab1f82d2fdfd672519940104a49778bf604485d Mon Sep 17 00:00:00 2001 From: Yaroslav Ovdiienko Date: Wed, 1 Jul 2026 22:43:14 +0200 Subject: [PATCH 1/9] build: use org.jetbrains.kotlin.multiplatform instead of org.jetbrains.kotlin.jvm --- build.gradle.kts | 2 +- datasize-core/build.gradle.kts | 46 +++++++++++++++++++--------------- gradle/libs.versions.toml | 1 + samples/build.gradle.kts | 12 +++++---- settings.gradle.kts | 5 ++-- 5 files changed, 38 insertions(+), 28 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1bf071f..81bade9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - alias(libs.plugins.kotlin.jvm) apply false + alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.shadow) apply false alias(libs.plugins.bcv) apply false alias(libs.plugins.dokka) apply false diff --git a/datasize-core/build.gradle.kts b/datasize-core/build.gradle.kts index 5a19579..7b94c25 100644 --- a/datasize-core/build.gradle.kts +++ b/datasize-core/build.gradle.kts @@ -4,7 +4,7 @@ import com.vanniktech.maven.publish.SourcesJar plugins { alias(libs.plugins.bcv) alias(libs.plugins.dokka) - alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.mcentral.publish) } @@ -23,29 +23,35 @@ kotlin { optIn.add("io.github.ardiien.datasize.ExperimentalDataSizeApi") } - sourceSets.all { - kotlin.srcDirs("$name/src") - resources.srcDirs("$name/resources") - } -} + jvm() -tasks.test { - useJUnitPlatform() -} + sourceSets { + //val commonMain by getting {} + } -dependencies { - implementation(libs.kotlinx.collections) - testImplementation(libs.kotlin.test) + //sourceSets.all { + //kotlin.srcDirs("$name/src") + //resources.srcDirs("$name/resources") + //} } -dokka { - dokkaSourceSets.main { - sourceLink { - localDirectory.set(file("src/main/kotlin")) - remoteUrl("https://github.com/ardiien/datasize") - } - } -} +//tasks.test { +// useJUnitPlatform() +//} + +//dependencies { +// implementation(libs.kotlinx.collections) +// testImplementation(libs.kotlin.test) +//} + +//dokka { +// dokkaSourceSets.main { +// sourceLink { +// localDirectory.set(file("src/main/kotlin")) +// remoteUrl("https://github.com/ardiien/datasize") +// } +// } +//} mavenPublishing { publishToMavenCentral() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8725390..612262d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,6 +12,7 @@ kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotl [plugins] kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } shadow = { id = "com.gradleup.shadow", version.ref = "shadow" } bcv = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "bcv" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } diff --git a/samples/build.gradle.kts b/samples/build.gradle.kts index 12ff4dc..3fd263a 100644 --- a/samples/build.gradle.kts +++ b/samples/build.gradle.kts @@ -1,16 +1,18 @@ plugins { - alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.kotlin.multiplatform) } kotlin { jvmToolchain(17) + jvm() + compilerOptions { optIn.add("io.github.ardiien.datasize.ExperimentalDataSizeApi") } } -dependencies { - implementation(projects.datasizeCore) - testImplementation(libs.kotlin.test) -} \ No newline at end of file +//dependencies { +// implementation(projects.datasizeCore) +// testImplementation(libs.kotlin.test) +//} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index dacc44a..8e5ff3c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,7 +1,8 @@ pluginManagement { repositories { - gradlePluginPortal() + google() mavenCentral() + gradlePluginPortal() } plugins { @@ -11,7 +12,7 @@ pluginManagement { dependencyResolutionManagement { repositories { - gradlePluginPortal() + google() mavenCentral() } } From d9adfc2c3f32f69e76a2a097d675b767fb5103b7 Mon Sep 17 00:00:00 2001 From: Yaroslav Ovdiienko Date: Thu, 2 Jul 2026 10:21:04 +0200 Subject: [PATCH 2/9] build: setup commonMain source set --- datasize-core/build.gradle.kts | 37 +++++++++++++--------------------- gradle/libs.versions.toml | 1 - samples/build.gradle.kts | 14 ++++++++----- 3 files changed, 23 insertions(+), 29 deletions(-) diff --git a/datasize-core/build.gradle.kts b/datasize-core/build.gradle.kts index 7b94c25..7653c76 100644 --- a/datasize-core/build.gradle.kts +++ b/datasize-core/build.gradle.kts @@ -26,32 +26,23 @@ kotlin { jvm() sourceSets { - //val commonMain by getting {} + commonMain.dependencies { + implementation(libs.kotlinx.collections) + } + commonTest.dependencies { + implementation(libs.kotlin.test) + } } - - //sourceSets.all { - //kotlin.srcDirs("$name/src") - //resources.srcDirs("$name/resources") - //} } -//tasks.test { -// useJUnitPlatform() -//} - -//dependencies { -// implementation(libs.kotlinx.collections) -// testImplementation(libs.kotlin.test) -//} - -//dokka { -// dokkaSourceSets.main { -// sourceLink { -// localDirectory.set(file("src/main/kotlin")) -// remoteUrl("https://github.com/ardiien/datasize") -// } -// } -//} +dokka { + dokkaSourceSets.configureEach { + sourceLink { + localDirectory.set(file("src/$name/kotlin")) + remoteUrl("https://github.com/ardiien/datasize/tree/main/datasize-core/src/$name/kotlin") + } + } +} mavenPublishing { publishToMavenCentral() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 612262d..51d2cb4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,6 @@ kotlinx-collections = { module = "org.jetbrains.kotlinx:kotlinx-collections-immu kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } [plugins] -kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } shadow = { id = "com.gradleup.shadow", version.ref = "shadow" } bcv = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "bcv" } diff --git a/samples/build.gradle.kts b/samples/build.gradle.kts index 3fd263a..9a84293 100644 --- a/samples/build.gradle.kts +++ b/samples/build.gradle.kts @@ -10,9 +10,13 @@ kotlin { compilerOptions { optIn.add("io.github.ardiien.datasize.ExperimentalDataSizeApi") } -} -//dependencies { -// implementation(projects.datasizeCore) -// testImplementation(libs.kotlin.test) -//} \ No newline at end of file + sourceSets { + commonMain.dependencies { + implementation(projects.datasizeCore) + } + commonTest.dependencies { + implementation(libs.kotlin.test) + } + } +} From d2ede3161e1f7a7c54c68dfb74a2293f118fdb8f Mon Sep 17 00:00:00 2001 From: Yaroslav Ovdiienko Date: Thu, 2 Jul 2026 10:38:05 +0200 Subject: [PATCH 3/9] build: adjust dokka and jvm sources --- datasize-core/build.gradle.kts | 25 +++++++++++++++++-------- samples/build.gradle.kts | 1 - 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/datasize-core/build.gradle.kts b/datasize-core/build.gradle.kts index 7653c76..d6b2b08 100644 --- a/datasize-core/build.gradle.kts +++ b/datasize-core/build.gradle.kts @@ -1,5 +1,6 @@ import com.vanniktech.maven.publish.JavadocJar import com.vanniktech.maven.publish.SourcesJar +import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.bcv) @@ -11,19 +12,25 @@ plugins { group = "io.github.ardiien.datasize" version = "2.1.0" -java { - withSourcesJar() -} - kotlin { - jvmToolchain(17) - explicitApi() compilerOptions { optIn.add("io.github.ardiien.datasize.ExperimentalDataSizeApi") } - jvm() + jvmToolchain(17) + jvm { + withSourcesJar() + compilerOptions { + jvmTarget.set(JvmTarget.JVM_1_8) + freeCompilerArgs.add("-Xjdk-release=8") + } + } + + sourceSets.all { + kotlin.setSrcDirs(listOf("$name/src")) + resources.setSrcDirs(listOf("$name/resources")) + } sourceSets { commonMain.dependencies { @@ -37,9 +44,11 @@ kotlin { dokka { dokkaSourceSets.configureEach { + skipDeprecated.set(true) + sourceLink { localDirectory.set(file("src/$name/kotlin")) - remoteUrl("https://github.com/ardiien/datasize/tree/main/datasize-core/src/$name/kotlin") + remoteUrl("https://github.com/ardiien/datasize/tree/main") } } } diff --git a/samples/build.gradle.kts b/samples/build.gradle.kts index 9a84293..8fa8b83 100644 --- a/samples/build.gradle.kts +++ b/samples/build.gradle.kts @@ -4,7 +4,6 @@ plugins { kotlin { jvmToolchain(17) - jvm() compilerOptions { From bb2849dbee7c638afc75b6d72e920ea9f7bcee80 Mon Sep 17 00:00:00 2001 From: Yaroslav Ovdiienko Date: Thu, 2 Jul 2026 14:24:51 +0200 Subject: [PATCH 4/9] build: remove unnecessary `setSrcDirs` setup --- datasize-core/build.gradle.kts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/datasize-core/build.gradle.kts b/datasize-core/build.gradle.kts index d6b2b08..7d0bd98 100644 --- a/datasize-core/build.gradle.kts +++ b/datasize-core/build.gradle.kts @@ -27,11 +27,6 @@ kotlin { } } - sourceSets.all { - kotlin.setSrcDirs(listOf("$name/src")) - resources.setSrcDirs(listOf("$name/resources")) - } - sourceSets { commonMain.dependencies { implementation(libs.kotlinx.collections) From 7befe23a5bf596ac769883c3d445f1c8513d0d2a Mon Sep 17 00:00:00 2001 From: Yaroslav Ovdiienko Date: Thu, 2 Jul 2026 14:25:28 +0200 Subject: [PATCH 5/9] build: setup 'samples' as JVM module --- build.gradle.kts | 1 + gradle/libs.versions.toml | 1 + samples/build.gradle.kts | 14 ++++---------- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 81bade9..0cb34ae 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,6 @@ plugins { alias(libs.plugins.kotlin.multiplatform) apply false + alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.shadow) apply false alias(libs.plugins.bcv) apply false alias(libs.plugins.dokka) apply false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 51d2cb4..612262d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,6 +11,7 @@ kotlinx-collections = { module = "org.jetbrains.kotlinx:kotlinx-collections-immu kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } [plugins] +kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } shadow = { id = "com.gradleup.shadow", version.ref = "shadow" } bcv = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "bcv" } diff --git a/samples/build.gradle.kts b/samples/build.gradle.kts index 8fa8b83..e610045 100644 --- a/samples/build.gradle.kts +++ b/samples/build.gradle.kts @@ -1,21 +1,15 @@ plugins { - alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.jvm) } kotlin { jvmToolchain(17) - jvm() compilerOptions { optIn.add("io.github.ardiien.datasize.ExperimentalDataSizeApi") } +} - sourceSets { - commonMain.dependencies { - implementation(projects.datasizeCore) - } - commonTest.dependencies { - implementation(libs.kotlin.test) - } - } +dependencies { + implementation(projects.datasizeCore) } From 900f4631c0dff2c68191511ae08fa27bb136f22f Mon Sep 17 00:00:00 2001 From: Yaroslav Ovdiienko Date: Thu, 2 Jul 2026 14:25:49 +0200 Subject: [PATCH 6/9] build: update Gradle wrapper to 9.6.1 --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7e0d347..5239e4b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ #Fri Jan 16 11:14:46 CET 2026 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-all.zip -distributionSha256Sum=708d2c6ecc97ca9a11838ef64a6c2301151b8dd10387e22dc1a12c30557cab5b +distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-all.zip +distributionSha256Sum=61ba77b3ff7167e60962763eb4bae79db7120c189b9544358d0ade3c1e712a83 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From e90a2b7c332656a3e00254917cbba4f69bfaa4c4 Mon Sep 17 00:00:00 2001 From: Yaroslav Ovdiienko Date: Thu, 2 Jul 2026 14:27:08 +0200 Subject: [PATCH 7/9] refactor: move sources to `commonMain` and extract `jvm`-first functions --- .../io/github/ardiien/datasize/DataSize.kt | 9 ++-- .../ardiien/datasize/DataSizeFormatter.kt | 0 .../io/github/ardiien/datasize/DataSizeTag.kt | 0 .../github/ardiien/datasize/DataSizeUnit.kt | 0 .../ardiien/datasize/DataSizeUnitLocalizer.kt | 0 .../datasize/ExperimentalDataSizeApi.kt | 0 .../formatter/SimpleDataSizeFormatter.kt | 0 .../localizer/SimpleDataSizeUnitLocalizer.kt | 0 .../io/github/ardiien/datasize/util/Math.kt | 44 +++++++++++++++++++ .../ardiien/datasize/util/TypeExtensions.kt | 0 .../github/ardiien/datasize/DataSizeTest.kt | 0 .../formatter}/SimpleDataSizeFormatterTest.kt | 0 .../SimpleDataSizeUnitLocalizerTest.kt | 0 .../github/ardiien/datasize/util/Math.jvm.kt | 16 +++++++ 14 files changed, 66 insertions(+), 3 deletions(-) rename datasize-core/src/{main => commonMain}/kotlin/io/github/ardiien/datasize/DataSize.kt (97%) rename datasize-core/src/{main => commonMain}/kotlin/io/github/ardiien/datasize/DataSizeFormatter.kt (100%) rename datasize-core/src/{main => commonMain}/kotlin/io/github/ardiien/datasize/DataSizeTag.kt (100%) rename datasize-core/src/{main => commonMain}/kotlin/io/github/ardiien/datasize/DataSizeUnit.kt (100%) rename datasize-core/src/{main => commonMain}/kotlin/io/github/ardiien/datasize/DataSizeUnitLocalizer.kt (100%) rename datasize-core/src/{main => commonMain}/kotlin/io/github/ardiien/datasize/ExperimentalDataSizeApi.kt (100%) rename datasize-core/src/{main => commonMain}/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatter.kt (100%) rename datasize-core/src/{main => commonMain}/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizer.kt (100%) create mode 100644 datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/util/Math.kt rename datasize-core/src/{main => commonMain}/kotlin/io/github/ardiien/datasize/util/TypeExtensions.kt (100%) rename datasize-core/src/{test => commonTest}/kotlin/io/github/ardiien/datasize/DataSizeTest.kt (100%) rename datasize-core/src/{test/kotlin/io/github/ardiien/datasize => commonTest/kotlin/io/github/ardiien/datasize/formatter}/SimpleDataSizeFormatterTest.kt (100%) rename datasize-core/src/{test/kotlin/io/github/ardiien/datasize => commonTest/kotlin/io/github/ardiien/datasize/localizer}/SimpleDataSizeUnitLocalizerTest.kt (100%) create mode 100644 datasize-core/src/jvmMain/kotlin/io/github/ardiien/datasize/util/Math.jvm.kt diff --git a/datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSize.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSize.kt similarity index 97% rename from datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSize.kt rename to datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSize.kt index 0f74134..4065064 100644 --- a/datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSize.kt +++ b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSize.kt @@ -9,6 +9,9 @@ import io.github.ardiien.datasize.DataSize.Companion.MaxValue import io.github.ardiien.datasize.DataSize.Companion.Zero import io.github.ardiien.datasize.formatter.SimpleDataSizeFormatter import io.github.ardiien.datasize.localizer.SimpleDataSizeUnitLocalizer +import io.github.ardiien.datasize.util.addExact +import io.github.ardiien.datasize.util.multiplyExact +import io.github.ardiien.datasize.util.subtractExact import kotlin.math.roundToLong @@ -139,7 +142,7 @@ public value class DataSize internal constructor(internal val rawValue: Long) : if (other == 0) return Zero val newValue = try { - Math.multiplyExact(rawValue, other) + multiplyExact(rawValue, other.toLong()) } catch (_: ArithmeticException) { return MaxValue } @@ -153,7 +156,7 @@ public value class DataSize internal constructor(internal val rawValue: Long) : */ public operator fun plus(other: DataSize): DataSize { val newValue = try { - Math.addExact(rawValue, other.rawValue) + addExact(rawValue, other.rawValue) } catch (_: ArithmeticException) { return MaxValue } @@ -166,7 +169,7 @@ public value class DataSize internal constructor(internal val rawValue: Long) : */ public operator fun minus(other: DataSize): DataSize { val newValue = try { - Math.subtractExact(rawValue, other.rawValue) + subtractExact(rawValue, other.rawValue) } catch (_: ArithmeticException) { return Zero } diff --git a/datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSizeFormatter.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSizeFormatter.kt similarity index 100% rename from datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSizeFormatter.kt rename to datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSizeFormatter.kt diff --git a/datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSizeTag.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSizeTag.kt similarity index 100% rename from datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSizeTag.kt rename to datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSizeTag.kt diff --git a/datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSizeUnit.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSizeUnit.kt similarity index 100% rename from datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSizeUnit.kt rename to datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSizeUnit.kt diff --git a/datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSizeUnitLocalizer.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSizeUnitLocalizer.kt similarity index 100% rename from datasize-core/src/main/kotlin/io/github/ardiien/datasize/DataSizeUnitLocalizer.kt rename to datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/DataSizeUnitLocalizer.kt diff --git a/datasize-core/src/main/kotlin/io/github/ardiien/datasize/ExperimentalDataSizeApi.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/ExperimentalDataSizeApi.kt similarity index 100% rename from datasize-core/src/main/kotlin/io/github/ardiien/datasize/ExperimentalDataSizeApi.kt rename to datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/ExperimentalDataSizeApi.kt diff --git a/datasize-core/src/main/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatter.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatter.kt similarity index 100% rename from datasize-core/src/main/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatter.kt rename to datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatter.kt diff --git a/datasize-core/src/main/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizer.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizer.kt similarity index 100% rename from datasize-core/src/main/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizer.kt rename to datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizer.kt diff --git a/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/util/Math.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/util/Math.kt new file mode 100644 index 0000000..63a4985 --- /dev/null +++ b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/util/Math.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2026 ardiien + * Licensed under the Apache License, Version 2.0. + * See http://www.apache.org/licenses/LICENSE-2.0 + */ + +package io.github.ardiien.datasize.util + + +/** + * Returns the product of the arguments, throwing an exception if the result + * overflows a [Long]. + * + * @param x the first value + * @param y the second value + * @return the result + * @throws ArithmeticException if the result overflows a long + */ +@Throws(ArithmeticException::class) +public expect fun multiplyExact(x: Long, y: Long): Long + +/** + * Returns the sum of its arguments, + * throwing an exception if the result overflows a [Long]. + * + * @param x the first value + * @param y the second value + * @return the result + * @throws ArithmeticException if the result overflows a long + */ +@Throws(ArithmeticException::class) +public expect fun addExact(x: Long, y: Long): Long + +/** + * Returns the difference of the arguments, + * throwing an exception if the result overflows a [Long]. + * + * @param x the first value + * @param y the second value to subtract from the first + * @return the result + * @throws ArithmeticException if the result overflows a long + */ +@Throws(ArithmeticException::class) +public expect fun subtractExact(x: Long, y: Long): Long diff --git a/datasize-core/src/main/kotlin/io/github/ardiien/datasize/util/TypeExtensions.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/util/TypeExtensions.kt similarity index 100% rename from datasize-core/src/main/kotlin/io/github/ardiien/datasize/util/TypeExtensions.kt rename to datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/util/TypeExtensions.kt diff --git a/datasize-core/src/test/kotlin/io/github/ardiien/datasize/DataSizeTest.kt b/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/DataSizeTest.kt similarity index 100% rename from datasize-core/src/test/kotlin/io/github/ardiien/datasize/DataSizeTest.kt rename to datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/DataSizeTest.kt diff --git a/datasize-core/src/test/kotlin/io/github/ardiien/datasize/SimpleDataSizeFormatterTest.kt b/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatterTest.kt similarity index 100% rename from datasize-core/src/test/kotlin/io/github/ardiien/datasize/SimpleDataSizeFormatterTest.kt rename to datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatterTest.kt diff --git a/datasize-core/src/test/kotlin/io/github/ardiien/datasize/SimpleDataSizeUnitLocalizerTest.kt b/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizerTest.kt similarity index 100% rename from datasize-core/src/test/kotlin/io/github/ardiien/datasize/SimpleDataSizeUnitLocalizerTest.kt rename to datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizerTest.kt diff --git a/datasize-core/src/jvmMain/kotlin/io/github/ardiien/datasize/util/Math.jvm.kt b/datasize-core/src/jvmMain/kotlin/io/github/ardiien/datasize/util/Math.jvm.kt new file mode 100644 index 0000000..4d4dd34 --- /dev/null +++ b/datasize-core/src/jvmMain/kotlin/io/github/ardiien/datasize/util/Math.jvm.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2026 ardiien + * Licensed under the Apache License, Version 2.0. + * See http://www.apache.org/licenses/LICENSE-2.0 + */ +package io.github.ardiien.datasize.util + + +@Throws(ArithmeticException::class) +public actual fun multiplyExact(x: Long, y: Long): Long = Math.multiplyExact(x, y) + +@Throws(ArithmeticException::class) +public actual fun addExact(x: Long, y: Long): Long = Math.addExact(x, y) + +@Throws(ArithmeticException::class) +public actual fun subtractExact(x: Long, y: Long): Long = Math.subtractExact(x, y) \ No newline at end of file From 0407ec580bed4f9609954af6cc3e4eeaceed066f Mon Sep 17 00:00:00 2001 From: Yaroslav Ovdiienko Date: Thu, 2 Jul 2026 14:30:08 +0200 Subject: [PATCH 8/9] test: adapt test to new setup --- .../kotlin/io/github/ardiien/datasize/DataSizeTest.kt | 4 ++-- .../datasize/formatter/SimpleDataSizeFormatterTest.kt | 9 +++++---- .../localizer/SimpleDataSizeUnitLocalizerTest.kt | 11 +++++++---- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/DataSizeTest.kt b/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/DataSizeTest.kt index c27d036..643ccec 100644 --- a/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/DataSizeTest.kt +++ b/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/DataSizeTest.kt @@ -14,10 +14,10 @@ import io.github.ardiien.datasize.DataSize.Companion.mebibytes import io.github.ardiien.datasize.DataSize.Companion.megabytes import io.github.ardiien.datasize.DataSize.Companion.tebibytes import io.github.ardiien.datasize.DataSize.Companion.toDataSize -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Assertions.assertThrows +import org.junit.Assert.assertThrows import kotlin.test.Ignore import kotlin.test.Test +import kotlin.test.assertEquals class DataSizeTest { diff --git a/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatterTest.kt b/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatterTest.kt index 60645fe..4b49f9a 100644 --- a/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatterTest.kt +++ b/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/formatter/SimpleDataSizeFormatterTest.kt @@ -3,13 +3,14 @@ * Licensed under the Apache License, Version 2.0. * See http://www.apache.org/licenses/LICENSE-2.0 */ -package io.github.ardiien.datasize +package io.github.ardiien.datasize.formatter import io.github.ardiien.datasize.DataSize.Companion.bytes import io.github.ardiien.datasize.DataSize.Companion.gibibytes -import io.github.ardiien.datasize.formatter.SimpleDataSizeFormatter -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Test +import io.github.ardiien.datasize.DefaultDataSizeUnitFormatter +import io.github.ardiien.datasize.IecUnit +import kotlin.test.Test +import kotlin.test.assertEquals class SimpleDataSizeFormatterTest { diff --git a/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizerTest.kt b/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizerTest.kt index a0e128f..5ad5464 100644 --- a/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizerTest.kt +++ b/datasize-core/src/commonTest/kotlin/io/github/ardiien/datasize/localizer/SimpleDataSizeUnitLocalizerTest.kt @@ -3,13 +3,16 @@ * Licensed under the Apache License, Version 2.0. * See http://www.apache.org/licenses/LICENSE-2.0 */ -package io.github.ardiien.datasize +package io.github.ardiien.datasize.localizer -import io.github.ardiien.datasize.localizer.SimpleDataSizeUnitLocalizer +import io.github.ardiien.datasize.DataSizeTag +import io.github.ardiien.datasize.DataSizeUnit +import io.github.ardiien.datasize.IecUnit +import io.github.ardiien.datasize.SiUnit import io.github.ardiien.datasize.util.castTo import kotlinx.collections.immutable.ImmutableList -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Test +import kotlin.test.Test +import kotlin.test.assertEquals class SimpleDataSizeUnitLocalizerTest { From 65b9d1999e85e978828f35414b16df82f8c4ac74 Mon Sep 17 00:00:00 2001 From: Yaroslav Ovdiienko Date: Thu, 2 Jul 2026 14:34:25 +0200 Subject: [PATCH 9/9] chore: change visibility of functions in Math to `internal` --- .../kotlin/io/github/ardiien/datasize/util/Math.kt | 6 +++--- .../kotlin/io/github/ardiien/datasize/util/Math.jvm.kt | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/util/Math.kt b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/util/Math.kt index 63a4985..a9269a2 100644 --- a/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/util/Math.kt +++ b/datasize-core/src/commonMain/kotlin/io/github/ardiien/datasize/util/Math.kt @@ -17,7 +17,7 @@ package io.github.ardiien.datasize.util * @throws ArithmeticException if the result overflows a long */ @Throws(ArithmeticException::class) -public expect fun multiplyExact(x: Long, y: Long): Long +internal expect fun multiplyExact(x: Long, y: Long): Long /** * Returns the sum of its arguments, @@ -29,7 +29,7 @@ public expect fun multiplyExact(x: Long, y: Long): Long * @throws ArithmeticException if the result overflows a long */ @Throws(ArithmeticException::class) -public expect fun addExact(x: Long, y: Long): Long +internal expect fun addExact(x: Long, y: Long): Long /** * Returns the difference of the arguments, @@ -41,4 +41,4 @@ public expect fun addExact(x: Long, y: Long): Long * @throws ArithmeticException if the result overflows a long */ @Throws(ArithmeticException::class) -public expect fun subtractExact(x: Long, y: Long): Long +internal expect fun subtractExact(x: Long, y: Long): Long diff --git a/datasize-core/src/jvmMain/kotlin/io/github/ardiien/datasize/util/Math.jvm.kt b/datasize-core/src/jvmMain/kotlin/io/github/ardiien/datasize/util/Math.jvm.kt index 4d4dd34..e7fe472 100644 --- a/datasize-core/src/jvmMain/kotlin/io/github/ardiien/datasize/util/Math.jvm.kt +++ b/datasize-core/src/jvmMain/kotlin/io/github/ardiien/datasize/util/Math.jvm.kt @@ -7,10 +7,10 @@ package io.github.ardiien.datasize.util @Throws(ArithmeticException::class) -public actual fun multiplyExact(x: Long, y: Long): Long = Math.multiplyExact(x, y) +internal actual fun multiplyExact(x: Long, y: Long): Long = Math.multiplyExact(x, y) @Throws(ArithmeticException::class) -public actual fun addExact(x: Long, y: Long): Long = Math.addExact(x, y) +internal actual fun addExact(x: Long, y: Long): Long = Math.addExact(x, y) @Throws(ArithmeticException::class) -public actual fun subtractExact(x: Long, y: Long): Long = Math.subtractExact(x, y) \ No newline at end of file +internal actual fun subtractExact(x: Long, y: Long): Long = Math.subtractExact(x, y) \ No newline at end of file