Skip to content
Snippets Groups Projects
Commit 045a7274 authored by Regis Blanc's avatar Regis Blanc
Browse files

fix extractors for Arrays

parent 87d6bd1f
No related branches found
No related tags found
No related merge requests found
......@@ -228,10 +228,12 @@ object Extractors {
(as: Seq[Expr]) => ArrayUpdated(as(0), as(1), as(2))
))
case NonemptyArray(elems, Some((default, length))) =>
val all = elems.values.toSeq :+ default :+ length
val elemsSeq: Seq[(Int, Expr)] = elems.toSeq
val all = elemsSeq.map(_._2) :+ default :+ length
Some((all, as => {
val l = as.length
nonemptyArray(as.take(l - 2), Some((as(l - 2), as(l - 1))))
NonemptyArray(elemsSeq.map(_._1).zip(as.take(l - 2)).toMap,
Some((as(l - 2), as(l - 1))))
}))
case na @ NonemptyArray(elems, None) =>
val ArrayType(tpe) = na.getType
......@@ -239,7 +241,7 @@ object Extractors {
Some((
elsOrdered,
es => finiteArray(indexes.zip(es).toMap, None, tpe)
es => NonemptyArray(indexes.zip(es).toMap, None)
))
case Tuple(args) => Some((args, es => Tuple(es)))
case IfExpr(cond, thenn, elze) => Some((
......
......@@ -25,17 +25,24 @@ class ExtractorsSuite extends FunSuite with ExpressionsDSL {
assert(e3 === e4)
}
ignore("Extractors of NonemptyArray with sparse elements") {
test("Extractors of NonemptyArray with sparse elements") {
val a1 = NonemptyArray(Map(0 -> x, 3 -> y, 5 -> z), Some((BigInt(0), BigInt(10))))
val a2 = a1 match {
case Operator(es, builder) => {
assert(es === Seq(x, y, z, InfiniteIntegerLiteral(0), InfiniteIntegerLiteral(10)))
builder(es)
}
}
assert(a2 === a1)
val a3 = NonemptyArray(Map(0 -> x, 1 -> y, 2 -> z), None)
val a4 = a3 match {
case Operator(es, builder) => {
assert(es === Seq(x, y, z))
builder(es)
}
}
assert(a3 === a4)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment