summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2015-06-17 15:22:05 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2015-06-17 15:22:05 -0700
commit824e0b47bda251e90af842482baf3cf2bdbb080c (patch)
treefb64028ca0c896de57c149a086aab23180da7e35 /test
parenta404c63d092e1c73fed41fc6ea87a254d5b4e993 (diff)
parent8e0bc0bffd31d994a6911116f170347004934c55 (diff)
downloadscala-824e0b47bda251e90af842482baf3cf2bdbb080c.tar.gz
scala-824e0b47bda251e90af842482baf3cf2bdbb080c.tar.bz2
scala-824e0b47bda251e90af842482baf3cf2bdbb080c.zip
Merge pull request #4541 from vuakko/SI-9348_2.11.x
SI-9348 Fix missing last element in exclusive floating point ranges
Diffstat (limited to 'test')
-rw-r--r--test/files/run/range.scala18
-rw-r--r--test/junit/scala/collection/immutable/RangeConsistencyTest.scala11
-rw-r--r--test/junit/scala/math/NumericTest.scala28
3 files changed, 49 insertions, 8 deletions
diff --git a/test/files/run/range.scala b/test/files/run/range.scala
index 4637ab874d..e50d0ac6a5 100644
--- a/test/files/run/range.scala
+++ b/test/files/run/range.scala
@@ -36,16 +36,19 @@ object Test {
def gr1 = NumericRange(x, x, x)
def gr2 = NumericRange.inclusive(x, x, x)
- def gr3 = NumericRange(x, x * fromInt(10), x)
- def gr4 = NumericRange.inclusive(x, x * fromInt(10), x)
- def gr5 = gr3.toList ::: negated.gr3.toList
+ def gr3 = NumericRange(x, x * fromInt(4), x * fromInt(2)) // SI-9348
+ def gr4 = NumericRange(x, x * fromInt(-2), x * fromInt(-2))
+ def gr5 = NumericRange(x, x * fromInt(10), x)
+ def gr6 = NumericRange.inclusive(x, x * fromInt(10), x)
+ def gr7 = gr3.toList ::: negated.gr3.toList
def check = {
assert(gr1.isEmpty && !gr2.isEmpty)
- assert(gr3.size == 9 && gr4.size == 10)
- assert(gr5.sum == num.zero, gr5.toString)
- assert(!(gr3 contains (x * fromInt(10))))
- assert((gr4 contains (x * fromInt(10))))
+ assert(gr3.size == 2 && gr4.size == 2)
+ assert(gr5.size == 9 && gr6.size == 10)
+ assert(gr7.sum == num.zero, gr7.toString)
+ assert(!(gr5 contains (x * fromInt(10))))
+ assert(gr6 contains (x * fromInt(10)))
}
}
@@ -55,6 +58,7 @@ object Test {
val _grs = List[GR[_]](
GR(BigDecimal(5.0)),
+ GR(BigDecimal(0.25)), // SI-9348
GR(BigInt(5)),
GR(5L),
GR(5.0d),
diff --git a/test/junit/scala/collection/immutable/RangeConsistencyTest.scala b/test/junit/scala/collection/immutable/RangeConsistencyTest.scala
index 3980c31577..135796979d 100644
--- a/test/junit/scala/collection/immutable/RangeConsistencyTest.scala
+++ b/test/junit/scala/collection/immutable/RangeConsistencyTest.scala
@@ -137,4 +137,15 @@ class RangeConsistencyTest {
assert( (-3 to Int.MaxValue).dropWhile(_ <= 0).length == Int.MaxValue )
assert( (-3 to Int.MaxValue).span(_ <= 0) match { case (a,b) => a.length == 4 && b.length == Int.MaxValue } )
}
+
+ @Test
+ def testSI9348() {
+ // Test exclusive range with (end-start) != 0 (mod step)
+ assert( (0.0f until 0.4f by 0.25f) sameElements List(0.0f, 0.25f) )
+ assert( (1.0 until 2.2 by 0.5) sameElements List(1.0, 1.5, 2.0) )
+
+ def bd(d: Double) = BigDecimal(d)
+ val bdRange = bd(-10.0) until bd(0.0) by bd(4.5)
+ assert( bdRange sameElements List(bd(-10.0), bd(-5.5), bd(-1.0)) )
+ }
}
diff --git a/test/junit/scala/math/NumericTest.scala b/test/junit/scala/math/NumericTest.scala
index 9bf7d4f1e4..682dcbfd75 100644
--- a/test/junit/scala/math/NumericTest.scala
+++ b/test/junit/scala/math/NumericTest.scala
@@ -5,6 +5,9 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import scala.math.Numeric.FloatAsIfIntegral
+
+
@RunWith(classOf[JUnit4])
class NumericTest {
@@ -14,5 +17,28 @@ class NumericTest {
assertTrue(-0.0.abs equals 0.0)
assertTrue(-0.0f.abs equals 0.0f)
}
-}
+
+ /* Test for SI-9348 */
+ @Test
+ def testFloatAsIfIntegral {
+ val num = scala.math.Numeric.FloatAsIfIntegral
+ assertTrue(num.quot(1.0f, 0.5f) equals 2.0f)
+ assertTrue(num.quot(1.0f, 0.3f) equals 3.0f)
+ }
+
+ /* Test for SI-9348 */
+ @Test
+ def testDoubleAsIfIntegral {
+ val num = scala.math.Numeric.DoubleAsIfIntegral
+ assertTrue(num.quot(1.0, 0.25) equals 4.0)
+ assertTrue(num.quot(0.5, 0.15) equals 3.0)
+ }
+
+ /* Test for SI-9348 */
+ @Test
+ def testBigDecimalAsIfIntegral {
+ val num = scala.math.Numeric.BigDecimalAsIfIntegral
+ assertTrue(num.quot(BigDecimal(2.5), BigDecimal(0.5)) equals BigDecimal(5.0))
+ assertTrue(num.quot(BigDecimal(5.0), BigDecimal(2.0)) equals BigDecimal(2.0))
+ }}