Skip to content

Commit 436ce74

Browse files
author
artem.kupchinskiy
committed
[SCALA-26] review refactoring
1 parent 3436115 commit 436ce74

File tree

5 files changed

+74
-78
lines changed

5 files changed

+74
-78
lines changed

core-scala/src/main/scala/com/baeldung/scala/equality/package.scala

Lines changed: 0 additions & 22 deletions
This file was deleted.

core-scala/src/test/scala/com/baeldung/scala/equality/EqualityTest.scala

Lines changed: 0 additions & 55 deletions
This file was deleted.

scala-core/src/main/java/com/baedung/scala/forcomprehension/ForComprehension.java renamed to scala-core/src/main/java/com/baeldung/scala/equality/forcomprehension/ForComprehension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.baedung.scala.forcomprehension;
1+
package com.baeldung.scala.equality.forcomprehension;
22

33
import java.util.Arrays;
44
import java.util.List;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.baeldung.scala
2+
3+
package object equality {
4+
class PersonSimpleClass(val name: String, val age: Int)
5+
6+
class PersonClassWithOverrides(val name: String, val age: Int) {
7+
override def equals(other: Any): Boolean = other match {
8+
case person: PersonClassWithOverrides =>
9+
this.name == person.name && this.age == person.age
10+
case _ => false
11+
}
12+
13+
override def hashCode(): Int = if (name eq null) age else name.hashCode + 31 * age
14+
}
15+
16+
case class PersonCaseClass(name: String, age: Int)
17+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.baeldung.scala.equality
2+
3+
import org.scalatest.FlatSpec
4+
5+
class EqualityTest extends FlatSpec {
6+
"Equality operator for AnyVal" should "work as in Java" in {
7+
val intAnyVal = 4
8+
assert(intAnyVal == 2 * 2)
9+
}
10+
11+
"Equality operator for referential types" should "work like null-safe equals()" in {
12+
val firstString = new String("AnyRef")
13+
val secondString = new String("AnyRef")
14+
val thirdString = null
15+
val fourthString = null
16+
assert(firstString == secondString)
17+
// Unlike in java, the following lines of code do not cause NullPointerExceptions
18+
assert(thirdString != secondString)
19+
assert(fourthString == thirdString)
20+
}
21+
22+
"Equals()" should "work as in Java" in {
23+
val firstString = new String("AnyRef")
24+
val secondString = new String("AnyRef")
25+
assert(firstString.equals(secondString))
26+
}
27+
28+
"Eq and ne" should "check referential equality" in {
29+
val firstString = new String("AnyRef")
30+
val secondString = new String("AnyRef")
31+
val thirdString = secondString
32+
assert(firstString ne secondString)
33+
assert(thirdString eq secondString)
34+
// Both operators are null-safe
35+
assert(null eq null)
36+
assert(null ne firstString)
37+
}
38+
39+
"Equality operator" should "not work out of the box for PersonSimpleClass" in {
40+
val firstSimpleClassInstance = new PersonSimpleClass("Donald", 66)
41+
val secondSimpleClassInstance = new PersonSimpleClass("Donald", 66)
42+
assert(firstSimpleClassInstance != secondSimpleClassInstance)
43+
}
44+
45+
"Equality operator" should "work for PersonClassWithOverrides" in {
46+
val firstClassWithOverridesInstance = new PersonClassWithOverrides("Donald", 66)
47+
val secondClassWithOverridesInstance = new PersonClassWithOverrides("Donald", 66)
48+
assert(firstClassWithOverridesInstance == secondClassWithOverridesInstance)
49+
}
50+
51+
"Equality operator" should "work for PersonCaseClass" in {
52+
val firstCaseClassInstance = PersonCaseClass("Donald", 66)
53+
val secondCaseClassInstance = PersonCaseClass("Donald", 66)
54+
assert(firstCaseClassInstance == secondCaseClassInstance)
55+
}
56+
}

0 commit comments

Comments
 (0)