summaryrefslogtreecommitdiff
path: root/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/javalib/AtomicTest.scala
blob: c4f065a34f6e19bbb4ea41e152ead7258f12c1f3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*                     __                                               *\
**     ________ ___   / /  ___      __ ____  Scala.js Test Suite        **
**    / __/ __// _ | / /  / _ | __ / // __/  (c) 2013, LAMP/EPFL        **
**  __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \    http://scala-js.org/       **
** /____/\___/_/ |_/____/_/ | |__/ /____/                               **
**                          |/____/                                     **
\*                                                                      */
package scala.scalajs.testsuite.javalib

import scala.language.implicitConversions

import scala.scalajs.js

import org.scalajs.jasminetest.JasmineTest

object AtomicTest extends JasmineTest {

  describe("java.util.concurrent.AtomicLong") {

    it("Should have all the normal operations") {
      val atomic = new java.util.concurrent.atomic.AtomicLong(10)
      expect(atomic.get()).toEqual(10)
      atomic.set(20)
      expect(atomic.get()).toEqual(20)
      expect(atomic.getAndIncrement()).toEqual(20)
      expect(atomic.get()).toEqual(21)
      expect(atomic.getAndDecrement()).toEqual(21)
      expect(atomic.get()).toEqual(20)
      expect(atomic.getAndSet(0)).toEqual(20)
      expect(atomic.get()).toEqual(0)
      expect(atomic.incrementAndGet()).toEqual(1)
      expect(atomic.get()).toEqual(1)
      expect(atomic.decrementAndGet()).toEqual(0)
      expect(atomic.get()).toEqual(0)
      expect(atomic.addAndGet(10)).toEqual(10)
      expect(atomic.get()).toEqual(10)
      expect(atomic.intValue).toEqual(10)
      expect(atomic.longValue).toEqual(10L)
      expect(atomic.floatValue).toEqual(10.0f)
      expect(atomic.doubleValue).toEqual(10)
      expect(atomic.compareAndSet(1, 20)).toEqual(false)
      expect(atomic.get()).toEqual(10)
      expect(atomic.compareAndSet(10, 20)).toEqual(true)
      expect(atomic.get()).toEqual(20)
    }
  }
  describe("java.util.concurrent.AtomicInteger") {
    it("Should have all the normal operations") {
      val atomic = new java.util.concurrent.atomic.AtomicInteger(10)
      expect(atomic.get()).toEqual(10)
      atomic.set(20)
      expect(atomic.get()).toEqual(20)
      expect(atomic.getAndIncrement()).toEqual(20)
      expect(atomic.get()).toEqual(21)
      expect(atomic.getAndDecrement()).toEqual(21)
      expect(atomic.get()).toEqual(20)
      expect(atomic.getAndSet(0)).toEqual(20)
      expect(atomic.get()).toEqual(0)
      expect(atomic.incrementAndGet()).toEqual(1)
      expect(atomic.get()).toEqual(1)
      expect(atomic.decrementAndGet()).toEqual(0)
      expect(atomic.get()).toEqual(0)
      expect(atomic.addAndGet(10)).toEqual(10)
      expect(atomic.get()).toEqual(10)
      expect(atomic.intValue).toEqual(10)
      expect(atomic.longValue).toEqual(10L)
      expect(atomic.floatValue).toEqual(10.0f)
      expect(atomic.doubleValue).toEqual(10)
      expect(atomic.compareAndSet(1, 20)).toEqual(false)
      expect(atomic.get()).toEqual(10)
      expect(atomic.compareAndSet(10, 20)).toEqual(true)
      expect(atomic.get()).toEqual(20)
    }
  }
  describe("java.util.concurrent.AtomicBoolean") {
    it("Should have all the normal operations") {
      val atomic = new java.util.concurrent.atomic.AtomicBoolean(true)
      expect(atomic.get()).toEqual(true)
      atomic.set(false)
      expect(atomic.get()).toEqual(false)
      expect(atomic.compareAndSet(true, true)).toEqual(false)
      expect(atomic.get()).toEqual(false)
      expect(atomic.compareAndSet(false, true)).toEqual(true)
      expect(atomic.get()).toEqual(true)
      expect(atomic.getAndSet(false)).toEqual(true)
      expect(atomic.get()).toEqual(false)
    }
  }
  describe("java.util.concurrent.AtomicReference") {
    it("Should have all the normal operations") {
      val thing1 = Foo(5)
      val thing1bis = Foo(5) // equals(), but not the same reference
      val thing2 = Foo(10)

      implicit def foo2js(foo: Foo): js.Any = foo.asInstanceOf[js.Any]

      // sanity
      expect(thing1 == thing1bis).toBeTruthy
      expect(thing1 == thing2).toBeFalsy
      expect(thing1).toBe(thing1)
      expect(thing1).not.toBe(thing1bis)

      // actual test
      val atomic = new java.util.concurrent.atomic.AtomicReference(thing1)
      expect(atomic.get()).toBe(thing1)
      atomic.set(thing2)
      expect(atomic.get()).toBe(thing2)
      expect(atomic.compareAndSet(thing1, thing1)).toEqual(false)
      expect(atomic.get()).toBe(thing2)
      expect(atomic.compareAndSet(thing2, thing1)).toEqual(true)
      expect(atomic.get()).toBe(thing1)
      expect(atomic.compareAndSet(thing1bis, thing2)).toEqual(false)
      expect(atomic.getAndSet(thing2)).toBe(thing1)
      expect(atomic.get()).toBe(thing2)
    }
  }

  case class Foo(i: Int)
}