summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRocky Madden <git@rockymadden.com>2013-03-02 17:06:56 -0700
committerRocky Madden <git@rockymadden.com>2013-03-02 17:06:56 -0700
commit1baf09a2de5cb31fa2846f4d4ab7be4c488fa3f9 (patch)
tree1d04c9fc3d2b212b60fb3ce684001105cb674456
parent2c2d4df0c8ee806dbab2a8c7c84755a1ed529e08 (diff)
downloadstringmetric-1baf09a2de5cb31fa2846f4d4ab7be4c488fa3f9.tar.gz
stringmetric-1baf09a2de5cb31fa2846f4d4ab7be4c488fa3f9.tar.bz2
stringmetric-1baf09a2de5cb31fa2846f4d4ab7be4c488fa3f9.zip
Reduce boxing/unboxing and need remove need for implicits.
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/Alphabet.scala72
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala7
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala3
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala7
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala3
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala7
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala3
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala3
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala3
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala3
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala3
-rwxr-xr-xcore/source/test/scala/com/rockymadden/stringmetric/phonetic/AlphabetSpec.scala86
12 files changed, 115 insertions, 85 deletions
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/Alphabet.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/Alphabet.scala
index 0d6726a..ca934d8 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/Alphabet.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/Alphabet.scala
@@ -1,36 +1,60 @@
package com.rockymadden.stringmetric.phonetic
+import scala.collection.immutable.Set
import scala.language.implicitConversions
-private[phonetic] final class Alphabet private(private[this] val self: Array[Char]) {
- def is(set: Set[Char]): Boolean = self.length > 0 && self.takeWhile(set.contains(_)).length == self.length
+sealed abstract class Alphabet {
+ val Chars: Set[Char]
- def startsWith(set: Set[Char]): Boolean = self.length > 0 && set.contains(self.head)
-}
-
-private[phonetic] object Alphabet {
- final val LowercaseConsonant = Set('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x' ,'z')
- final val UppercaseConsonant = Set('B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X' ,'Z')
- final val Consonant = LowercaseConsonant ++ UppercaseConsonant
- final val LowercaseVowel = Set('a', 'e', 'i', 'o', 'u')
- final val UppercaseVowel = Set('A', 'E', 'I', 'O', 'U')
- final val Vowel = LowercaseVowel ++ UppercaseVowel
- final val LowercaseY = Set('y')
- final val UppercaseY = Set('Y')
- final val Y = LowercaseY ++ UppercaseY
- final val LowercaseAlpha = LowercaseConsonant ++ LowercaseVowel ++ LowercaseY
- final val UppercaseAlpha = UppercaseConsonant ++ UppercaseVowel ++ UppercaseY
- final val Alpha = LowercaseAlpha ++ UppercaseAlpha
+ def isSuperset(char: Char): Boolean = Chars.contains(char)
- implicit def CharToAlphabet(char: Char): Alphabet = apply(char)
+ def isSuperset(charArray: Array[Char]): Boolean =
+ charArray.length > 0 && charArray.takeWhile(Chars.contains(_)).length == charArray.length
- implicit def CharArrayToAlphabet(charArray: Array[Char]): Alphabet = apply(charArray)
+ def isSuperset(string: String): Boolean = isSuperset(string.toCharArray)
- implicit def CharToAlphabet(string: String): Alphabet = apply(string)
+ def startsWith(char: Char): Boolean = Chars.contains(char)
- def apply(char: Char): Alphabet = new Alphabet(Array(char))
+ def startsWith(charArray: Array[Char]): Boolean = charArray.length > 0 && Chars.contains(charArray.head)
- def apply(charArray: Array[Char]): Alphabet = new Alphabet(charArray)
+ def startsWith(string: String): Boolean = startsWith(string.toCharArray)
+}
- def apply(string: String): Alphabet = new Alphabet(string.toCharArray)
+case object LowercaseConsonant extends Alphabet {
+ override final val Chars =
+ Set('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x' ,'z')
+}
+case object UppercaseConsonant extends Alphabet {
+ override final val Chars =
+ Set('B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X' ,'Z')
+}
+case object Consonant extends Alphabet {
+ override final val Chars = LowercaseConsonant.Chars ++ UppercaseConsonant.Chars
+}
+case object LowercaseVowel extends Alphabet {
+ override final val Chars = Set('a', 'e', 'i', 'o', 'u')
+}
+case object UppercaseVowel extends Alphabet {
+ override final val Chars = Set('A', 'E', 'I', 'O', 'U')
+}
+case object Vowel extends Alphabet {
+ override final val Chars = LowercaseVowel.Chars ++ UppercaseVowel.Chars
+}
+case object LowercaseY extends Alphabet {
+ override final val Chars = Set('y')
+}
+case object UppercaseY extends Alphabet {
+ override final val Chars = Set('Y')
+}
+case object Y extends Alphabet {
+ override final val Chars = LowercaseY.Chars ++ UppercaseY.Chars
+}
+case object LowercaseAlpha extends Alphabet {
+ override final val Chars = LowercaseConsonant.Chars ++ LowercaseVowel.Chars ++ LowercaseY.Chars
+}
+case object UppercaseAlpha extends Alphabet {
+ override final val Chars = UppercaseConsonant.Chars ++ UppercaseVowel.Chars ++ UppercaseY.Chars
+}
+case object Alpha extends Alphabet {
+ override final val Chars = LowercaseAlpha.Chars ++ UppercaseAlpha.Chars
}
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala
index 573d90b..cb1bb45 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala
@@ -1,7 +1,6 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.StringAlgorithm
-import com.rockymadden.stringmetric.phonetic.Alphabet._
import scala.annotation.{ switch, tailrec }
/** An implementation of the Metaphone algorithm. */
@@ -9,7 +8,7 @@ class MetaphoneAlgorithm extends StringAlgorithm[String] {
final override def compute(charArray: Array[Char]): Option[Array[Char]] = {
val fca = filter(charArray)
- if (fca.length == 0 || !(fca.head is Alpha)) None
+ if (fca.length == 0 || !(Alpha isSuperset fca.head)) None
else {
val th = deduplicate(transcodeHead(fca.map(_.toLower)))
val t = transcode(Array.empty[Char], th.head, th.tail, Array.empty[Char])
@@ -64,7 +63,7 @@ class MetaphoneAlgorithm extends StringAlgorithm[String] {
else if (r.length >= 1 && (r.head == 'i' || r.head == 'e' || r.head == 'y')) shift(2, o :+ 'j')
else shift(1, o :+ 'k')
case 'h' =>
- if ((l.length >= 1 && (l.last is LowercaseVowel) && (r.length == 0 || !(r.head is LowercaseVowel)))
+ if ((l.length >= 1 && (LowercaseVowel isSuperset l.last) && (r.length == 0 || !(LowercaseVowel isSuperset r.head)))
|| (l.length >= 2 && l.last == 'h'
&& (l(l.length - 2) == 'c' || l(l.length - 2) == 's' || l(l.length - 2) == 'p'
|| l(l.length - 2) == 't' || l(l.length - 2) == 'g'))) shift(1, o)
@@ -82,7 +81,7 @@ class MetaphoneAlgorithm extends StringAlgorithm[String] {
else if (r.length >= 2 && r.head == 'c' && r(1) == 'h') shift(1, o)
else shift(1, o :+ 't')
case 'v' => shift(1, o :+ 'f')
- case 'w' | 'y' => if (r.length == 0 || !(r.head is LowercaseVowel)) shift(1, o) else shift(1, o :+ c)
+ case 'w' | 'y' => if (r.length == 0 || !(LowercaseVowel isSuperset r.head)) shift(1, o) else shift(1, o :+ c)
case 'x' => shift(1, (o :+ 'k') :+ 's')
case 'z' => shift(1, o :+ 's')
case _ => shift(1, o)
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala
index 6a9becf..5c76262 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala
@@ -1,7 +1,6 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.StringMetric
-import com.rockymadden.stringmetric.phonetic.Alphabet._
/** A implementation of the Metaphone metric. */
class MetaphoneMetric extends StringMetric[Boolean] {
@@ -9,7 +8,7 @@ class MetaphoneMetric extends StringMetric[Boolean] {
val fca1 = filter(charArray1)
lazy val fca2 = filter(charArray2)
- if (fca1.length == 0 || !(fca1.head is Alpha) || fca2.length == 0 || !(fca2.head is Alpha)) None
+ if (fca1.length == 0 || !(Alpha isSuperset fca1.head) || fca2.length == 0 || !(Alpha isSuperset fca2.head)) None
else {
val metaphoneAlgorithm = MetaphoneAlgorithm()
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala
index b218a9c..a83b563 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala
@@ -1,7 +1,6 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.StringAlgorithm
-import com.rockymadden.stringmetric.phonetic.Alphabet._
import scala.annotation.{ switch, tailrec }
/** An implementation of the NYSIIS algorithm. */
@@ -9,7 +8,7 @@ class NysiisAlgorithm extends StringAlgorithm[String] {
final override def compute(charArray: Array[Char]): Option[Array[Char]] = {
val fca = filter(charArray)
- if (fca.length == 0 || !(fca.head is Alpha)) None
+ if (fca.length == 0 || !(Alpha isSuperset fca.head)) None
else {
val tr = transcodeRight(fca.map(_.toLower))
val tl = transcodeLeft(tr._1)
@@ -65,7 +64,7 @@ class NysiisAlgorithm extends StringAlgorithm[String] {
if (r.length >= 1 && r.head == 'v') shift(2, o ++ Array('a', 'f'))
else shift(1, o :+ 'a')
case 'h' =>
- if (l.length >= 1 && (!(l.last is LowercaseVowel) || (r.length >= 1 && !(r.head is LowercaseVowel)))) shift(1, o)
+ if (l.length >= 1 && (!(LowercaseVowel isSuperset l.last) || (r.length >= 1 && !(LowercaseVowel isSuperset r.head)))) shift(1, o)
else shift(1, o :+ c)
case 'k' => if (r.length >= 1 && r.head == 'n') shift(2, o :+ 'n') else shift(1, o :+ 'c')
case 'm' => shift(1, o :+ 'n')
@@ -75,7 +74,7 @@ class NysiisAlgorithm extends StringAlgorithm[String] {
if (r.length >= 2 && r.head == 'c' && r(1) == 'h') shift(3, o :+ c)
else shift(1, o :+ c)
case 'w' =>
- if (l.length >= 1 && (l.last is LowercaseVowel)) shift(1, o)
+ if (l.length >= 1 && (LowercaseVowel isSuperset l.last)) shift(1, o)
else shift(1, o :+ c)
case 'z' => shift(1, o :+ 's')
case _ => shift(1, o)
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala
index 2595593..ab9527b 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala
@@ -1,7 +1,6 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.StringMetric
-import com.rockymadden.stringmetric.phonetic.Alphabet._
/** An implementation of the NYSIIS metric. */
class NysiisMetric extends StringMetric[Boolean] {
@@ -16,7 +15,7 @@ class NysiisMetric extends StringMetric[Boolean] {
val fca1 = filter(charArray1)
lazy val fca2 = filter(charArray2)
- if (fca1.length == 0 || !(fca1.head is Alpha) || fca2.length == 0 || !(fca2.head is Alpha)) None
+ if (fca1.length == 0 || !(Alpha isSuperset fca1.head) || fca2.length == 0 || !(Alpha isSuperset fca2.head)) None
else if (unequal(fca1.head, fca2.head)) Some(false)
else {
val nysiisAlgorithm = NysiisAlgorithm()
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala
index 8f81e6c..32f05d0 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala
@@ -1,7 +1,6 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.StringAlgorithm
-import com.rockymadden.stringmetric.phonetic.Alphabet._
import scala.annotation.{ switch, tailrec }
/** An implementation of the refined NYSIIS algorithm. */
@@ -9,7 +8,7 @@ class RefinedNysiisAlgorithm extends StringAlgorithm[String] {
final override def compute(charArray: Array[Char]): Option[Array[Char]] = {
val fca = filter(charArray)
- if (fca.length == 0 || !(fca.head is Alpha)) None
+ if (fca.length == 0 || !(Alpha isSuperset fca.head)) None
else {
val lfca = fca.map(_.toLower)
val tlh = transcodeLast(transcodeHead(lfca.head +: cleanLast(lfca.tail, Set('s', 'z'))))
@@ -67,7 +66,7 @@ class RefinedNysiisAlgorithm extends StringAlgorithm[String] {
else shift(1, o :+ c)
case 'h' =>
if (l.length == 0) shift(1, o :+ c)
- else if (!(l.last is LowercaseVowel) || (r.length >= 1 && !(r.head is LowercaseVowel))) shift(1, o)
+ else if (!(LowercaseVowel isSuperset l.last) || (r.length >= 1 && !(LowercaseVowel isSuperset r.head))) shift(1, o)
else shift(1, o :+ c)
case 'k' => if (r.length >= 1 && r.head == 'n') shift(2, o :+ 'n') else shift(1, o :+ 'c')
case 'm' => if (l.length == 0) shift(1, o :+ c) else shift(1, o :+ 'n')
@@ -78,7 +77,7 @@ class RefinedNysiisAlgorithm extends StringAlgorithm[String] {
else if (r.length >= 1 && r.head == 'h') shift(2, o :+ c)
else shift(1, o :+ c)
case 'w' =>
- if (l.length >= 1 && (l.last is LowercaseVowel)) shift(1, o)
+ if (l.length >= 1 && (LowercaseVowel isSuperset l.last)) shift(1, o)
else if (r.length >= 1 && r.head == 'r') shift(2, o :+ 'r')
else shift(1, o :+ c)
case 'y' =>
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala
index 290cd15..0db8a8c 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala
@@ -1,7 +1,6 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.StringMetric
-import com.rockymadden.stringmetric.phonetic.Alphabet._
/** An implementation of the refined NYSIIS metric. */
class RefinedNysiisMetric extends StringMetric[Boolean] {
@@ -16,7 +15,7 @@ class RefinedNysiisMetric extends StringMetric[Boolean] {
val fca1 = filter(charArray1)
lazy val fca2 = filter(charArray2)
- if (fca1.length == 0 || !(fca1.head is Alpha) || fca2.length == 0 || !(fca2.head is Alpha)) None
+ if (fca1.length == 0 || !(Alpha isSuperset fca1.head) || fca2.length == 0 || !(Alpha isSuperset fca2.head)) None
else if (unequal(fca1.head, fca2.head)) Some(false)
else {
val refinedNysiisAlgorithm = RefinedNysiisAlgorithm()
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala
index 60f2a31..b054a99 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala
@@ -1,7 +1,6 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.StringAlgorithm
-import com.rockymadden.stringmetric.phonetic.Alphabet._
import scala.annotation.{ switch, tailrec }
/** An implementation of the refined Soundex algorithm. */
@@ -9,7 +8,7 @@ class RefinedSoundexAlgorithm extends StringAlgorithm[String] {
final override def compute(charArray: Array[Char]): Option[Array[Char]] = {
val fca = filter(charArray)
- if (fca.length == 0 || !(fca.head is Alpha)) None
+ if (fca.length == 0 || !(Alpha isSuperset fca.head)) None
else Some(transcode(fca, Array(fca.head.toLower)))
}
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala
index f65fc4e..5ad134e 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala
@@ -1,7 +1,6 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.StringMetric
-import com.rockymadden.stringmetric.phonetic.Alphabet._
/** An implementation of the refined Soundex metric. */
class RefinedSoundexMetric extends StringMetric[Boolean] {
@@ -9,7 +8,7 @@ class RefinedSoundexMetric extends StringMetric[Boolean] {
val fca1 = filter(charArray1)
lazy val fca2 = filter(charArray2)
- if (fca1.length == 0 || !(fca1.head is Alpha) || fca2.length == 0 || !(fca2.head is Alpha)) None
+ if (fca1.length == 0 || !(Alpha isSuperset fca1.head) || fca2.length == 0 || !(Alpha isSuperset fca2.head)) None
else if (fca1.head.toLower != fca2.head.toLower) Some(false)
else {
val refinedSoundexAlgorithm = RefinedSoundexAlgorithm()
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala
index 4b217a2..0ab4a5b 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala
@@ -1,7 +1,6 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.StringAlgorithm
-import com.rockymadden.stringmetric.phonetic.Alphabet._
import scala.annotation.{ switch, tailrec }
/** An implementation of the Soundex algorithm. */
@@ -9,7 +8,7 @@ class SoundexAlgorithm extends StringAlgorithm[String] {
final override def compute(charArray: Array[Char]): Option[Array[Char]] = {
val fca = filter(charArray)
- if (fca.length == 0 || !(fca.head is Alpha)) None
+ if (fca.length == 0 || !(Alpha isSuperset fca.head)) None
else {
val fc = fca.head.toLower
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala
index 89a26be..bb011be 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala
@@ -1,7 +1,6 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.StringMetric
-import com.rockymadden.stringmetric.phonetic.Alphabet._
/** An implementation of the Soundex metric. */
class SoundexMetric extends StringMetric[Boolean] {
@@ -9,7 +8,7 @@ class SoundexMetric extends StringMetric[Boolean] {
val fca1 = filter(charArray1)
lazy val fca2 = filter(charArray2)
- if (fca1.length == 0 || !(fca1.head is Alpha) || fca2.length == 0 || !(fca2.head is Alpha)) None
+ if (fca1.length == 0 || !(Alpha isSuperset fca1.head) || fca2.length == 0 || !(Alpha isSuperset fca2.head)) None
else if (fca1.head.toLower != fca2.head.toLower) Some(false)
else {
val soundexAlgorithm = SoundexAlgorithm()
diff --git a/core/source/test/scala/com/rockymadden/stringmetric/phonetic/AlphabetSpec.scala b/core/source/test/scala/com/rockymadden/stringmetric/phonetic/AlphabetSpec.scala
index 5d41633..8329b57 100755
--- a/core/source/test/scala/com/rockymadden/stringmetric/phonetic/AlphabetSpec.scala
+++ b/core/source/test/scala/com/rockymadden/stringmetric/phonetic/AlphabetSpec.scala
@@ -1,129 +1,145 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.ScalaTest
-import com.rockymadden.stringmetric.phonetic.Alphabet._
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
@RunWith(classOf[JUnitRunner])
final class AlphabetSpec extends ScalaTest {
"Alphabet" should provide {
- "an overloaded is method which accepts a Char" when passed {
+ "an overloaded isSuperset method which accepts Char" when passed {
"non-alphabet argument" should returns {
"false" in {
- '0' is Alpha should be (false)
+ Alpha isSuperset '0' should be (false)
}
}
"alphabet argument" should returns {
"true" in {
- 'a' is Alpha should be (true)
- 'A' is Alpha should be (true)
+ Alpha isSuperset 'a' should be (true)
+ Alpha isSuperset 'A' should be (true)
}
}
"non-vowel argument" should returns {
"false" in {
- 'y' is Vowel should be (false)
+ Vowel isSuperset 'y' should be (false)
}
}
"vowel argument" should returns {
"true" in {
- 'a' is Vowel should be (true)
- 'A' is Vowel should be (true)
+ Vowel isSuperset 'a' should be (true)
+ Vowel isSuperset 'A' should be (true)
}
}
}
- "an overloaded is method which accepts an Array[Char]" when passed {
+ "an overloaded isSuperset method which accepts Array[Char]" when passed {
"empty argument" should returns {
"false" in {
- Array.empty[Char] is Alpha should be (false)
+ Alpha isSuperset Array.empty[Char] should be (false)
}
}
"non-alphabet argument" should returns {
"false" in {
- "hi!".toCharArray is Alpha should be (false)
- "helloworld!".toCharArray is Alpha should be (false)
+ Alpha isSuperset "hi!".toCharArray should be (false)
+ Alpha isSuperset "helloworld!".toCharArray should be (false)
}
}
"alphabet argument" should returns {
"true" in {
- "hi".toCharArray is Alpha should be (true)
- "helloworld".toCharArray is Alpha should be (true)
- "HI".toCharArray is Alpha should be (true)
- "HELLOWORLD".toCharArray is Alpha should be (true)
+ Alpha isSuperset "hi".toCharArray should be (true)
+ Alpha isSuperset "helloworld".toCharArray should be (true)
+ Alpha isSuperset "HI".toCharArray should be (true)
+ Alpha isSuperset "HELLOWORLD".toCharArray should be (true)
}
}
"non-vowel argument" should returns {
"false" in {
- "y".toCharArray is Vowel should be (false)
+ Vowel isSuperset "y".toCharArray should be (false)
}
}
"vowel argument" should returns {
"true" in {
- "a".toCharArray is Vowel should be (true)
- "A".toCharArray is Vowel should be (true)
+ Vowel isSuperset "a".toCharArray should be (true)
+ Vowel isSuperset "A".toCharArray should be (true)
}
}
}
- "an overloaded is method which accepts a String" when passed {
+ "an overloaded isSuperset method which accepts String" when passed {
"empty argument" should returns {
"false" in {
- "" is Alpha should be (false)
+ Alpha isSuperset "" should be (false)
}
}
"non-alphabet argument" should returns {
"false" in {
- "helloworld!" is Alpha should be (false)
+ Alpha isSuperset "helloworld!" should be (false)
}
}
"alphabet argument" should returns {
"true" in {
- "helloworld" is Alpha should be (true)
- "HELLOWORLD" is Alpha should be (true)
+ Alpha isSuperset "helloworld" should be (true)
+ Alpha isSuperset "HELLOWORLD" should be (true)
}
}
"non-vowel argument" should returns {
"false" in {
- "y" is Vowel should be (false)
+ Vowel isSuperset "y" should be (false)
}
}
"vowel argument" should returns {
"true" in {
- "a" is Vowel should be (true)
- "A" is Vowel should be (true)
+ Vowel isSuperset "a" should be (true)
+ Vowel isSuperset "A" should be (true)
}
}
}
- "an overloaded startsWith method which accepts an Array[Char]" when passed {
+ "an overloaded startsWith method which accepts Array[Char]" when passed {
"empty argument" should returns {
"false" in {
- Array.empty[Char] is Alpha should be (false)
+ Alpha startsWith Array.empty[Char] should be (false)
}
}
"non-alphabet argument" should returns {
"false" in {
- "1abc".toCharArray is Alpha should be (false)
+ Alpha startsWith "1abc".toCharArray should be (false)
}
}
"alphabet argument" should returns {
"true" in {
- "abc".toCharArray is Alpha should be (true)
+ Alpha startsWith "abc".toCharArray should be (true)
}
}
}
- "an overloaded startsWith method which accepts a String" when passed {
+ "an overloaded startsWith method which accepts Char" when passed {
"empty argument" should returns {
"false" in {
- "" is Alpha should be (false)
+ Alpha startsWith '0' should be (false)
}
}
"non-alphabet argument" should returns {
"false" in {
- "1abc" is Alpha should be (false)
+ Alpha startsWith '1' should be (false)
}
}
"alphabet argument" should returns {
"true" in {
- "abc" is Alpha should be (true)
+ Alpha startsWith 'a' should be (true)
+ }
+ }
+ }
+ "an overloaded startsWith method which accepts String" when passed {
+ "empty argument" should returns {
+ "false" in {
+ Alpha startsWith "" should be (false)
+ }
+ }
+ "non-alphabet argument" should returns {
+ "false" in {
+ Alpha startsWith "1abc" should be (false)
+ }
+ }
+ "alphabet argument" should returns {
+ "true" in {
+ Alpha startsWith "abc" should be (true)
}
}
}