diff --git a/library/src/commonMain/kotlin/me/saket/bytesize/BinaryByteSize.kt b/library/src/commonMain/kotlin/me/saket/bytesize/BinaryByteSize.kt index 8517e45..2983c0f 100644 --- a/library/src/commonMain/kotlin/me/saket/bytesize/BinaryByteSize.kt +++ b/library/src/commonMain/kotlin/me/saket/bytesize/BinaryByteSize.kt @@ -6,6 +6,7 @@ import kotlin.jvm.JvmInline import kotlin.jvm.JvmName import kotlin.jvm.JvmSynthetic import kotlin.math.abs +import kotlin.math.absoluteValue import me.saket.bytesize.internal.commonCompareTo import me.saket.bytesize.internal.commonDiv import me.saket.bytesize.internal.commonMinus @@ -30,6 +31,10 @@ inline val Number.mebibytes: BinaryByteSize inline val Number.gibibytes: BinaryByteSize get() = BinaryByteSize(BytesPerGiB) * this +@get:JvmSynthetic +inline val BinaryByteSize.absoluteValue: BinaryByteSize + get() = BinaryByteSize(inWholeBytes.absoluteValue) + /** Represents power-of-two byte sizes. */ @JvmInline value class BinaryByteSize( diff --git a/library/src/commonMain/kotlin/me/saket/bytesize/DecimalBitSize.kt b/library/src/commonMain/kotlin/me/saket/bytesize/DecimalBitSize.kt index bf03907..58b9ee4 100644 --- a/library/src/commonMain/kotlin/me/saket/bytesize/DecimalBitSize.kt +++ b/library/src/commonMain/kotlin/me/saket/bytesize/DecimalBitSize.kt @@ -6,6 +6,7 @@ import kotlin.jvm.JvmInline import kotlin.jvm.JvmName import kotlin.jvm.JvmSynthetic import kotlin.math.abs +import kotlin.math.absoluteValue import me.saket.bytesize.internal.BitsPerByte import me.saket.bytesize.internal.commonCompareTo import me.saket.bytesize.internal.commonDiv @@ -31,6 +32,10 @@ inline val Number.megabits: DecimalBitSize inline val Number.gigabits: DecimalBitSize get() = DecimalBitSize(BitsPerGb) * this +@get:JvmSynthetic +inline val DecimalBitSize.absoluteValue: DecimalBitSize + get() = DecimalBitSize(inWholeBits.absoluteValue) + /** Represents power-of-ten bit sizes. */ @JvmInline value class DecimalBitSize( diff --git a/library/src/commonMain/kotlin/me/saket/bytesize/DecimalByteSize.kt b/library/src/commonMain/kotlin/me/saket/bytesize/DecimalByteSize.kt index d84b096..b14143c 100644 --- a/library/src/commonMain/kotlin/me/saket/bytesize/DecimalByteSize.kt +++ b/library/src/commonMain/kotlin/me/saket/bytesize/DecimalByteSize.kt @@ -6,6 +6,7 @@ import kotlin.jvm.JvmInline import kotlin.jvm.JvmName import kotlin.jvm.JvmSynthetic import kotlin.math.abs +import kotlin.math.absoluteValue import me.saket.bytesize.internal.commonCompareTo import me.saket.bytesize.internal.commonDiv import me.saket.bytesize.internal.commonMinus @@ -30,6 +31,10 @@ inline val Number.megabytes: DecimalByteSize inline val Number.gigabytes: DecimalByteSize get() = DecimalByteSize(BytesPerGB) * this +@get:JvmSynthetic +inline val DecimalByteSize.absoluteValue: DecimalByteSize + get() = DecimalByteSize(inWholeBytes.absoluteValue) + /** Represents power-of-ten byte sizes. */ @JvmInline value class DecimalByteSize( diff --git a/library/src/commonTest/kotlin/me/saket/bytesize/BinaryByteSizeTest.kt b/library/src/commonTest/kotlin/me/saket/bytesize/BinaryByteSizeTest.kt index 2828df6..4f68db7 100644 --- a/library/src/commonTest/kotlin/me/saket/bytesize/BinaryByteSizeTest.kt +++ b/library/src/commonTest/kotlin/me/saket/bytesize/BinaryByteSizeTest.kt @@ -47,6 +47,13 @@ class BinaryByteSizeTest { assertThat(1.mebibytes / 2.binaryBytes).isEqualTo(524_288.0) } + @Test fun absolute_value() { + assertThat(5.mebibytes.absoluteValue).isEqualTo(5.mebibytes) + assertThat((-5).mebibytes.absoluteValue).isEqualTo(5.mebibytes) + assertThat((-5).mebibytes.absoluteValue).isInstanceOf() + assertThat(0.binaryBytes.absoluteValue).isEqualTo(0.binaryBytes) + } + @Test fun format_to_string() { assertThat(200.binaryBytes).hasToString("200 B") assertThat(345.kibibytes).hasToString("345 KiB") diff --git a/library/src/commonTest/kotlin/me/saket/bytesize/DecimalBitSizeTest.kt b/library/src/commonTest/kotlin/me/saket/bytesize/DecimalBitSizeTest.kt index 42cf20a..0265bf2 100644 --- a/library/src/commonTest/kotlin/me/saket/bytesize/DecimalBitSizeTest.kt +++ b/library/src/commonTest/kotlin/me/saket/bytesize/DecimalBitSizeTest.kt @@ -50,6 +50,13 @@ class DecimalBitSizeTest { assertThat(1.megabits / 2.decimalBits).isEqualTo(500_000.0) } + @Test fun absolute_value() { + assertThat(5.megabits.absoluteValue).isEqualTo(5.megabits) + assertThat((-5).megabits.absoluteValue).isEqualTo(5.megabits) + assertThat((-5).megabits.absoluteValue).isInstanceOf() + assertThat(0.decimalBits.absoluteValue).isEqualTo(0.decimalBits) + } + @Test fun format_to_string() { assertThat(4.decimalBits).hasToString("4 b") assertThat(430.decimalBits).hasToString("430 b") diff --git a/library/src/commonTest/kotlin/me/saket/bytesize/DecimalByteSizeTest.kt b/library/src/commonTest/kotlin/me/saket/bytesize/DecimalByteSizeTest.kt index a86f3bb..b51f9b4 100644 --- a/library/src/commonTest/kotlin/me/saket/bytesize/DecimalByteSizeTest.kt +++ b/library/src/commonTest/kotlin/me/saket/bytesize/DecimalByteSizeTest.kt @@ -50,6 +50,13 @@ class DecimalByteSizeTest { assertThat(1.megabytes / 2.decimalBytes).isEqualTo(500_000.0) } + @Test fun absolute_value() { + assertThat(5.megabytes.absoluteValue).isEqualTo(5.megabytes) + assertThat((-5).megabytes.absoluteValue).isEqualTo(5.megabytes) + assertThat((-5).megabytes.absoluteValue).isInstanceOf() + assertThat(0.decimalBytes.absoluteValue).isEqualTo(0.decimalBytes) + } + @Test fun trim_empty_decimals_from_toString() { assertThat(200.decimalBytes).hasToString("200 B") assertThat(345.kilobytes).hasToString("345 KB")