Support java.time arbitraries on Scala.js & Native - #830
Conversation
|
When time support was added in #734, it was known that Scala.js could be supported. The issue was deferred was all. |
|
Absolutely! Well if you are open to it now it would be really helpful :) |
|
I think the CI flaked :( |
|
Yeah, it does that on occasion. Re-starting... |
|
I think it happened again 😅 |
|
Sadly, I have to close this :( @mpilquist pointed out to me that adding a dependency to scala-java-time here creates a circular dependency between it and scalacheck. The right thing to do is to provide these arbitraries in scala-java-time itself. |
|
Revisiting this, I realized that actually we don't need scala-java-time here. So there is no circular dependency! |
| private final lazy val minJavaDuration: Duration = | ||
| Duration.ofSeconds(Long.MinValue) | ||
|
|
||
| private final lazy val maxJavaDuration: Duration = | ||
| Duration.ofSeconds(Long.MaxValue, 999999999L) | ||
|
|
||
| implicit final lazy val arbJavaDuration: Arbitrary[Duration] = | ||
| implicit final lazy val arbJavaDuration: Arbitrary[Duration] = { | ||
| val minJavaDuration = Duration.ofSeconds(Long.MinValue) | ||
| val maxJavaDuration = Duration.ofSeconds(Long.MaxValue, 999999999L) | ||
| Arbitrary(Gen.choose(minJavaDuration, maxJavaDuration)) | ||
| } |
There was a problem hiding this comment.
The Scala.js linker/optimizer was unable to elide the Duration reference for some reason. This fixed it.
What changed? I don't follow Scala.js developments closely. |
|
Hmm, nothing changed? Just my own understanding. In my initial attempt I was adding an unneeded dependency. |
|
Ok, I was wondering if scala-java-time or similar was recently merged with Scala.js internals. If so, was curious if it required a minimum version of Scala.js for these time bindings. |
|
So FTR my confusion was about compile time vs linking/runtime. Since we are not testing these arbitraries, we don't need |
|
Ok, thanks for the clarification. |
|
Do you know if Scala native is similarly able to support Java time API in this way? Should we do that here, as well, while we're at it? |
|
Yes, I think so. My understanding has been that SJS and native have a similar model wrt compile vs link/run-time. Let me do that here, actually it should simplify this PR! In any case, it seems the |
|
Great, thanks for looking into it. |
java.time arbitraries on Scala.jsjava.time arbitraries on Scala.js & Native
|
Cool, that seems to have worked :) good idea! |
|
@rossabaker while you're here this one is good for http4s 😉 |
rossabaker
left a comment
There was a problem hiding this comment.
I barely understand scala.JS and native not at all, but it's well argued and got a green CI run.
We can also use these instances on Scala.js via scala-java-time. This would be helpful for http4s/http4s#4938.
I was surprised that most of the tests for this project (not just specific to
java.time) are only run on the JVM, is there a particular reason for this? It would be great to run more of these on more platforms.Thanks!