diff options
author | Seth Tisue <seth@tisue.net> | 2017-03-20 17:13:56 -0700 |
---|---|---|
committer | Seth Tisue <seth@tisue.net> | 2017-03-20 17:24:33 -0700 |
commit | 25048bc73741846107c18ed01e0e9f6f07785379 (patch) | |
tree | c1c9d60002fec74fc13af354e51bb3d688b33902 /test/disabled/coder/Coder.scala | |
parent | 0563c4b23cdc7ed6c05e9defe2a675df4d838347 (diff) | |
download | scala-25048bc73741846107c18ed01e0e9f6f07785379.tar.gz scala-25048bc73741846107c18ed01e0e9f6f07785379.tar.bz2 scala-25048bc73741846107c18ed01e0e9f6f07785379.zip |
rm -r test/{flaky,disabled*,checker-tests,support,debug}
keeping this stuff, somewhere, forever and ever and ever is what
version control is for.
who dares disturb the ancient and accursed tomb of all this code...?
Diffstat (limited to 'test/disabled/coder/Coder.scala')
-rw-r--r-- | test/disabled/coder/Coder.scala | 212 |
1 files changed, 0 insertions, 212 deletions
diff --git a/test/disabled/coder/Coder.scala b/test/disabled/coder/Coder.scala deleted file mode 100644 index b116a41a5d..0000000000 --- a/test/disabled/coder/Coder.scala +++ /dev/null @@ -1,212 +0,0 @@ - - -import collection.immutable._ -import collection.parallel.immutable._ - - -class SeqCoder(words: List[String]) { - - private val m = Map( - '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", - '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ") - - /** Invert the mnemonics map to give a map from chars 'A' ... 'Z' to '2' ... '9' */ - private val charCode: Map[Char, Char] = - for ((digit, letters) <- m; letter <- letters) yield letter -> digit - - /** Maps a word to the digit string it represents, - * e.g. `Java` -> `5282` */ - private def wordCode(word: String): String = word.toUpperCase map charCode - - /** A map from digit strings to the words that represent - * them e.g. `5282` -> List(`Java`, `Kata`, `Lava`, ...) - */ - val wordsForNum: Map[String, List[String]] = - words groupBy wordCode withDefaultValue List() - - val memo = collection.mutable.Map[String, Set[List[String]]]("" -> Set(List())) - val wfnmemo = collection.mutable.Map[(String, String), Set[List[String]]]() - val subsmemo = collection.mutable.Map[(String, String, String), Set[List[String]]]() - - /** All ways to encode a number as a list of words */ - def encode(number: String): Set[List[String]] = - if (number.isEmpty) Set(List()) - else { - val splits = (1 to number.length).toSet - // for { - // split <- splits - // word <- wordsForNum(number take split) - // rest <- encode(number drop split) - // } yield word :: rest - val r = splits.flatMap(split => { - val wfn = wordsForNum(number take split).flatMap(word => { - val subs = encode(number drop split) - val subsmapped = subs.map(rest => word :: rest) - subsmemo += (number, number drop split, word) -> subsmapped - subsmapped - }) - wfnmemo += (number, number take split) -> wfn.toSet - wfn - }) - memo += number -> r - r - } - - /** Maps a number to a list of all word phrases that can - * represent it */ - def translate(number: String): Set[String] = encode(number) map (_ mkString " ") - - def ??? : Nothing = throw new UnsupportedOperationException -} - -class ParCoder(words: List[String]) { - - private val m = Map( - '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", - '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ") - - /** Invert the mnemonics map to give a map from chars 'A' ... 'Z' to '2' ... '9' */ - private val charCode: Map[Char, Char] = - for ((digit, letters) <- m; letter <- letters) yield letter -> digit - - /** Maps a word to the digit string it represents, - * e.g. `Java` -> `5282` */ - private def wordCode(word: String): String = word.toUpperCase map charCode - - /** A map from digit strings to the words that represent - * them e.g. `5282` -> List(`Java`, `Kata`, `Lava`, ...) - */ - val wordsForNum: Map[String, List[String]] = - words groupBy wordCode withDefaultValue List() - - val comparison = new SeqCoder(words) - - /** All ways to encode a number as a list of words */ - def encode(number: String): ParSet[List[String]] = - if (number.isEmpty) ParSet(List()) - else { - val splits = (1 to number.length).toSet.par - // for { - // split <- splits - // word <- wordsForNum(number take split) - // rest <- encode(number drop split) - // } yield word :: rest - val r = splits.flatMap(split => { - val wfn = wordsForNum(number take split).flatMap(word => { - val subs = encode(number drop split) - assertNumber(number drop split, subs) - val subsmapped = subs.map(rest => word :: rest) - assertSubs(number, number drop split, word, subsmapped) - subsmapped.toList - }) - assertWfn(number, number take split, number drop split, wfn) - wfn - }) - assertNumber(number, r) - r - } - - def assertSubs(num: String, subsfrom: String, word: String, r: ParSet[List[String]]) { - val m = comparison.subsmemo((num, subsfrom, word)) - if (r != m) { - println("map for number from subs and word: " + num + ", " + subsfrom + ", " + word) - println("parset: " + r.size) - println("memoed: " + m.size) - error("r != m") - } - } - - def assertWfn(num: String, split: String, dropped: String, r: List[List[String]]) { - val m = comparison.wfnmemo((num, split)) - val rs = r.toSet - val words: List[String] = wordsForNum(split) - if (rs != m) { - println("flatmap for number with split: " + num + ", " + split) - println("words for: " + words) - println("parset: " + rs.size) - println("memoed: " + m.size) - println("retrying...") - for (i <- 0 until 30) { - val r2: List[List[String]] = words.flatMap(word => { - val subs: ParSet[List[String]] = encode(dropped) - println("subs size for '" + dropped + "': " + subs.size) - val subsmapped: ParSet[List[String]] = subs.map(rest => word :: rest) - println("map size: " + subsmapped.size) - subsmapped.toList - }) - println(i + ") retry size: " + r2.size) - } - error("rs != m") - } - } - - def assertNumber(num: String, r: ParSet[List[String]]) { - val m = comparison.memo(num) - if (r != m) { - println("for number: " + num) - println("parset: " + r.size) - println("memoed: " + m.size) - error("r != m") - } - } - - /** Maps a number to a list of all word phrases that can - * represent it */ - def translate(number: String): ParSet[String] = { - comparison.translate(number) - encode(number) map (_ mkString " ") - } - - def ??? : Nothing = throw new UnsupportedOperationException -} - - -/** Test code */ -object Test { - val code = "2328437472947"//36262633"//837976"//"6477323986225453446" - //val code = "747294736262633" - - /* */ - def main(args : Array[String]) { - // import java.util.concurrent.ForkJoinPool - // collection.parallel.tasksupport.environment match { - // case fj: ForkJoinPool => fj.setParallelism(1) - // } - // println(collection.parallel.tasksupport.parallelismLevel) - - for (i <- 0 until 10) { - val seqcoder = new SeqCoder(Dictionary.wordlist) - val st = seqcoder.translate(code) - //println("Translation check: " + st.size) - - val parcoder = new ParCoder(Dictionary.wordlist) - val pt = parcoder.translate(code) - //println("Translation check: " + pt.size) - - // val st = sts.toList.sorted - // val pt = pts.toList.sorted - if (st.size != pt.size) { - // val zipped = st.zip(pt) - // val ind = zipped.indexWhere { case (a, b) => a != b } - // val sliced = zipped.slice(ind - 10, ind + 10) - // println(sliced.map(t => t._1 + "\n" + t._2 + "\n--------").mkString("\n")) - println(i + ") seq vs par: " + st.size + " vs " + pt.size) - } - assert(st == pt) - } - } -} - - - - - - - - - - - - - - |