blob: 8448aad5488990cbf54a4f2a434c0d719d28896b (
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
|
import scala.language.reflectiveCalls
object Test extends dotty.runtime.LegacyApp {
val str = "ABCDEFGHIJKLMABCDEFGHIJKLM"
val surrogateStr = "an old Turkic letter: \uD803\uDC22"
type SB = {
def indexOf(str: String): Int
def indexOf(str: String, fromIndex: Int): Int
def lastIndexOf(str: String): Int
def lastIndexOf(str: String, fromIndex: Int): Int
}
import scala.collection.mutable.{ StringBuilder => ScalaStringBuilder }
import java.lang.{ StringBuilder => JavaStringBuilder }
val sbScala = new ScalaStringBuilder() append str
val sbJava = new JavaStringBuilder() append str
val sbs: List[SB] = List[SB](sbScala, sbJava)
def sameAnswers(f: (SB) => Int) = assert(f(sbScala) == f(sbJava))
sameAnswers(_.indexOf(""))
sameAnswers(_.indexOf("G"))
sameAnswers(_.indexOf("ABC"))
sameAnswers(_.indexOf("KLM"))
sameAnswers(_.indexOf("QZV"))
sameAnswers(_.indexOf("LMABC"))
sameAnswers(_.lastIndexOf(""))
sameAnswers(_.lastIndexOf("M"))
sameAnswers(_.lastIndexOf("ABCDEFG"))
sameAnswers(_.lastIndexOf("KLM"))
sameAnswers(_.lastIndexOf("QZV"))
sameAnswers(_.lastIndexOf("GHI", 22))
sameAnswers(_.lastIndexOf("KLM", 22))
// testing that the "reverse" implementation avoids reversing surrogate pairs
val jsb = new JavaStringBuilder(surrogateStr).reverse
val ssb = new ScalaStringBuilder(surrogateStr).reverseContents
assert(jsb.toString == ssb.toString)
}
|