Skip to content

Commit

Permalink
Add working knownSize implementation to ChunkBuilder instances (Scala…
Browse files Browse the repository at this point in the history
… 2.13+) (#8892)

* Add knownSize to ChunkBuilder instances

* add test

* fix ChunkBuilder.Boolean

* add to Scala 2.12 impl

* Add version specific test for ChunkBuilder.knowSize

* cleanup
  • Loading branch information
seakayone committed May 24, 2024
1 parent b7d8f2b commit 98b791b
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import zio.ChunkBuilder
import zio.ZIOBaseSpec
import zio.test._

object ChunkBuilderVersionSpecific extends ZIOBaseSpec {

def spec = suite("ChunkBuilderVersionSpecific")(
suite("Boolean")(
test("knownSize")(
check(Gen.chunkOf(Gen.boolean)) { as =>
val builder = new ChunkBuilder.Boolean
as.foreach(builder += _)
assertTrue(builder.knownSize == as.size)
}
)
),
suite("Byte")(
test("knownSize")(
check(Gen.chunkOf(Gen.byte)) { as =>
val builder = new ChunkBuilder.Byte
as.foreach(builder += _)
assertTrue(builder.knownSize == as.size)
}
)
),
suite("Char")(
test("knownSize")(
check(Gen.chunkOf(Gen.char)) { as =>
val builder = new ChunkBuilder.Char
as.foreach(builder += _)
assertTrue(builder.knownSize == as.size)
}
)
),
suite("Double")(
test("knownSize")(
check(Gen.chunkOf(Gen.double)) { as =>
val builder = new ChunkBuilder.Double
as.foreach(builder += _)
assertTrue(builder.knownSize == as.size)
}
)
),
suite("Float")(
test("knownSize")(
check(Gen.chunkOf(Gen.float)) { as =>
val builder = new ChunkBuilder.Float
as.foreach(builder += _)
assertTrue(builder.knownSize == as.size)
}
)
),
suite("Int")(
test("knownSize")(
check(Gen.chunkOf(Gen.int)) { as =>
val builder = new ChunkBuilder.Int
as.foreach(builder += _)
assertTrue(builder.knownSize == as.size)
}
)
),
suite("Long")(
test("knownSize")(
check(Gen.chunkOf(Gen.long)) { as =>
val builder = new ChunkBuilder.Long
as.foreach(builder += _)
assertTrue(builder.knownSize == as.size)
}
)
),
suite("Short")(
test("knownSize")(
check(Gen.chunkOf(Gen.short)) { as =>
val builder = new ChunkBuilder.Short
as.foreach(builder += _)
assertTrue(builder.knownSize == as.size)
}
)
)
)
}
32 changes: 16 additions & 16 deletions core-tests/shared/src/test/scala/zio/ChunkBuilderSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ object ChunkBuilderSpec extends ZIOBaseSpec {
check(Gen.chunkOf(Gen.boolean)) { as =>
val builder = new ChunkBuilder.Boolean
as.foreach(builder += _)
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
),
test("addAll") {
check(Gen.chunkOf(Gen.boolean)) { as =>
val builder = new ChunkBuilder.Boolean
builder ++= as
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
},
test("toString") {
Expand All @@ -31,14 +31,14 @@ object ChunkBuilderSpec extends ZIOBaseSpec {
check(Gen.chunkOf(Gen.byte)) { as =>
val builder = new ChunkBuilder.Byte
as.foreach(builder += _)
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
),
test("addAll") {
check(Gen.chunkOf(Gen.byte)) { as =>
val builder = new ChunkBuilder.Byte
builder ++= as
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
},
test("toString") {
Expand All @@ -51,14 +51,14 @@ object ChunkBuilderSpec extends ZIOBaseSpec {
check(Gen.chunkOf(Gen.char)) { as =>
val builder = new ChunkBuilder.Char
as.foreach(builder += _)
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
),
test("addAll") {
check(Gen.chunkOf(Gen.char)) { as =>
val builder = new ChunkBuilder.Char
builder ++= as
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
},
test("toString") {
Expand All @@ -71,14 +71,14 @@ object ChunkBuilderSpec extends ZIOBaseSpec {
check(Gen.chunkOf(Gen.double)) { as =>
val builder = new ChunkBuilder.Double
as.foreach(builder += _)
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
),
test("addAll") {
check(Gen.chunkOf(Gen.double)) { as =>
val builder = new ChunkBuilder.Double
builder ++= as
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
},
test("toString") {
Expand All @@ -91,14 +91,14 @@ object ChunkBuilderSpec extends ZIOBaseSpec {
check(Gen.chunkOf(Gen.float)) { as =>
val builder = new ChunkBuilder.Float
as.foreach(builder += _)
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
),
test("addAll") {
check(Gen.chunkOf(Gen.float)) { as =>
val builder = new ChunkBuilder.Float
builder ++= as
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
},
test("toString") {
Expand All @@ -111,14 +111,14 @@ object ChunkBuilderSpec extends ZIOBaseSpec {
check(Gen.chunkOf(Gen.int)) { as =>
val builder = new ChunkBuilder.Int
as.foreach(builder += _)
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
),
test("addAll") {
check(Gen.chunkOf(Gen.int)) { as =>
val builder = new ChunkBuilder.Int
builder ++= as
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
},
test("toString") {
Expand All @@ -131,14 +131,14 @@ object ChunkBuilderSpec extends ZIOBaseSpec {
check(Gen.chunkOf(Gen.long)) { as =>
val builder = new ChunkBuilder.Long
as.foreach(builder += _)
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
),
test("addAll") {
check(Gen.chunkOf(Gen.long)) { as =>
val builder = new ChunkBuilder.Long
builder ++= as
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
},
test("toString") {
Expand All @@ -151,14 +151,14 @@ object ChunkBuilderSpec extends ZIOBaseSpec {
check(Gen.chunkOf(Gen.short)) { as =>
val builder = new ChunkBuilder.Short
as.foreach(builder += _)
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
),
test("addAll") {
check(Gen.chunkOf(Gen.short)) { as =>
val builder = new ChunkBuilder.Short
builder ++= as
assert(builder.result())(equalTo(as))
assertTrue(builder.result() == as)
}
},
test("toString") {
Expand Down
9 changes: 9 additions & 0 deletions core/shared/src/main/scala-2.13+/zio/ChunkBuilder.scala
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ object ChunkBuilder {
} else {
arrayBuilder.sizeHint(n)
}
override def knownSize: SInt = arrayBuilder.knownSize
}

/**
Expand Down Expand Up @@ -158,6 +159,7 @@ object ChunkBuilder {
}
override def toString: String =
"ChunkBuilder.Boolean"
override def knownSize: SInt = arrayBuilder.knownSize * 8 + maxBitIndex
}

/**
Expand Down Expand Up @@ -188,6 +190,7 @@ object ChunkBuilder {
arrayBuilder.sizeHint(n)
override def toString: String =
"ChunkBuilder.Byte"
override def knownSize: SInt = arrayBuilder.knownSize
}

/**
Expand Down Expand Up @@ -218,6 +221,7 @@ object ChunkBuilder {
arrayBuilder.sizeHint(n)
override def toString: String =
"ChunkBuilder.Char"
override def knownSize: SInt = arrayBuilder.knownSize
}

/**
Expand Down Expand Up @@ -249,6 +253,7 @@ object ChunkBuilder {
arrayBuilder.sizeHint(n)
override def toString: String =
"ChunkBuilder.Double"
override def knownSize: SInt = arrayBuilder.knownSize
}

/**
Expand Down Expand Up @@ -279,6 +284,7 @@ object ChunkBuilder {
arrayBuilder.sizeHint(n)
override def toString: String =
"ChunkBuilder.Float"
override def knownSize: SInt = arrayBuilder.knownSize
}

/**
Expand Down Expand Up @@ -309,6 +315,7 @@ object ChunkBuilder {
arrayBuilder.sizeHint(n)
override def toString: String =
"ChunkBuilder.Int"
override def knownSize: SInt = arrayBuilder.knownSize
}

/**
Expand Down Expand Up @@ -339,6 +346,7 @@ object ChunkBuilder {
arrayBuilder.sizeHint(n)
override def toString: String =
"ChunkBuilder.Long"
override def knownSize: SInt = arrayBuilder.knownSize
}

/**
Expand Down Expand Up @@ -369,5 +377,6 @@ object ChunkBuilder {
arrayBuilder.sizeHint(n)
override def toString: String =
"ChunkBuilder.Short"
override def knownSize: SInt = arrayBuilder.knownSize
}
}

0 comments on commit 98b791b

Please sign in to comment.