8000 Merge pull request #4521 from jgoday/concurrent_atomic_longadder · renowncoder/scala-js@5df7d64 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5df7d64

Browse files
authored
Merge pull request scala-js#4521 from jgoday/concurrent_atomic_longadder
Fix scala-js#4515: Implement java.util.concurrent.atomic.LongAdder
2 parents 08de1e3 + 6a23632 commit 5df7d64

File tree

2 files changed

+158
-0
lines changed

2 files changed

+158
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Scala.js (https://www.scala-js.org/)
3+
*
4+
* Copyright EPFL.
5+
*
6+
* Licensed under Apache License 2.0
7+
* (https://www.apache.org/licenses/LICENSE-2.0).
8+
*
9+
* See the NOTICE file distributed with this work for
10+
* additional information regarding copyright ownership.
11+
*/
12+
13+
package java.util.concurrent.atomic
14+
15+
import java.io.Serializable
16+
17+
class LongAdder extends Number with Serializable {
18+
private[this] var value: Long = 0L
19+
20+
final def add(x: Long): Unit =
21+
value = value + x
22+
23+
final def increment(): Unit =
24+
value = value + 1
25+
26+
final def decrement(): Unit =
27+
value = value - 1
28+
29+
final def sum(): Long =
30+
value
31+
32+
final def reset(): Unit =
33+
value = 0
34+
35+
final def sumThenReset(): Long = {
36+
val result = value
37+
reset()
38+
result
39+
}
40+
41+
override def toString(): String =
42+
String.valueOf(value)
43+
44+
final def longValue(): Long =
45+
value
46+
47+
final def intValue(): Int =
48+
value.toInt
49+
50+
final def floatValue(): Float =
51+
value.toFloat
52+
53+
final def doubleValue(): Double =
54+
value.toDouble
55+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/*
2+
* Scala.js (https://www.scala-js.org/)
3+
*
4+
* Copyright EPFL.
5+
*
6+
* Licensed under Apache License 2.0
7+
* (https://www.apache.org/licenses/LICENSE-2.0).
8+
*
9+
* See the NOTICE file distributed with this work for
10+
* additional information regarding copyright ownership.
11+
*/
12+
13+
package org.scalajs.testsuite.javalib.util.concurrent.atomic
14+
15+
import org.junit.Test
16+
import org.junit.Assert._
17+
18+
class LongAdderTest {
19+
20+
@Test def longAdderIncrementTest(): Unit = {
21+
val value = new java.util.concurrent.atomic.LongAdder
22+
assertEquals(0L, value.sum())
23+
value.increment()
24+
assertEquals(1L, value.sum())
25+
value.increment()
26+
assertEquals(2L, value.sum())
27+
}
28+
29+
@Test def longAdderDecrementTest(): Unit = {
30+
val value = new java.util.concurrent.atomic.LongAdder
31+
assertEquals(0L, value.sum())
32+
value.increment()
33+
value.increment()
34+
value.increment()
35+
assertEquals(3L, value.sum())
36+
value.decrement()
37+
assertEquals(2L, value.sum())
38+
value.decrement()
39+
assertEquals(1L, value.sum())
40+
}
41+
42+
@Test def longAdderLongValue(): Unit = {
43+
val value = new java.util.concurrent.atomic.LongAdder
44+
value.add(100L)
45+
assertEquals(100L, value.longValue())
46+
value.add(100L)
47+
assertEquals(200L, value.longValue())
48+
}
49+
50+
@Test def longAdderIntValue(): Unit = {
51+
val value = new java.util.concurrent.atomic.LongAdder
52+
value.add(10)
53+
assertEquals(10, value.intValue())
54+
value.add(10)
55+
assertEquals(20, value.intValue())
56+
}
57+
58+
@Test def longAdderFloatValue(): Unit = {
59+
val value = new java.util.concurrent.atomic.LongAdder
60+
value.add(10)
61+
assertEquals(10f, value.floatValue(), 0)
62+
value.add(10)
63+
assertEquals(20f, value.floatValue(), 0)
64+
}
65+
66+
@Test def longAdderDoubleValue(): Unit = {
67+
val value = new java.util.concurrent.atomic.LongAdder
68+
value.add(10)
69+
assertEquals(10d, value.doubleValue(), 0)
70+
value.add(10)
71+
assertEquals(20d, value.doubleValue(), 0)
72+
}
73+
74+
@Test def longAdderReset(): Unit = {
75+
val value = new java.util.concurrent.atomic.LongAdder
76+
value.add(10)
77+
assertEquals(10, value.sum())
78+
value.reset()
79+
assertEquals(0, value.sum())
80+
}
81+
82+
@Test def longAdderAdd(): Unit = {
83+
val value = new java.util.concurrent.atomic.LongAdder
84+
value.add(10)
85+
assertEquals(10, value.sum())
86+
value.add(0)
87+
assertEquals(10, value.sum())
88+
}
89+
90+
@Test def longAdderSumThenReset(): Unit = {
91+
val value = new java.util.concurrent.atomic.LongAdder
92+
value.add(10)
93+
val res = value.sumThenReset()
94+
assertEquals(0, value.sum())
95+
assertEquals(10, res)
96+
}
97+
98+
@Test def longAdderToString(): Unit = {
99+
val value = new java.util.concurrent.atomic.LongAdder
100+
value.add(10)
101+
assertEquals("10", value.toString())
102+
}
103+
}

0 commit comments

Comments
 (0)
0