From 97523fb53d2cdcaaf7248d0ba012a53ccb310bab Mon Sep 17 00:00:00 2001 From: Jeff May Date: Fri, 23 Sep 2022 17:25:39 -0700 Subject: [PATCH] Extend IterableOnce in FactTable and add unit tests --- core-v1/src/main/scala/data/FactTable.scala | 4 ++- .../src/test/scala/data/FactTableSpec.scala | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 core-v1/src/test/scala/data/FactTableSpec.scala diff --git a/core-v1/src/main/scala/data/FactTable.scala b/core-v1/src/main/scala/data/FactTable.scala index 8275cd63..db3ad069 100644 --- a/core-v1/src/main/scala/data/FactTable.scala +++ b/core-v1/src/main/scala/data/FactTable.scala @@ -14,7 +14,7 @@ import scala.collection.immutable.SortedMap * * @note some expressions can update the fact table for sub-expressions. */ -trait FactTable extends Any { +trait FactTable extends Any with IterableOnce[Fact] { protected type Self <: FactTable protected def build(factsByName: SortedMap[String, FactSet]): Self @@ -44,6 +44,8 @@ trait FactTable extends Any { matchingFacts.reduceOption(_ | _).map(TypedFactSet.from).getOrElse(Set.empty) } + final override def iterator: Iterator[Fact] = factsByName.valuesIterator.flatMap(_.iterator) + // TODO: Better support for formatting here override def toString: String = if (factsByName.isEmpty) "FactTable.empty" else { val factMap = factsByName.iterator.map { diff --git a/core-v1/src/test/scala/data/FactTableSpec.scala b/core-v1/src/test/scala/data/FactTableSpec.scala new file mode 100644 index 00000000..6edf7511 --- /dev/null +++ b/core-v1/src/test/scala/data/FactTableSpec.scala @@ -0,0 +1,30 @@ +package com.rallyhealth.vapors.v1 + +package data + +import munit.FunSuite + +import java.time.LocalDate + +class FactTableSpec extends FunSuite { + + import example.FactTypes._ + + test("FactTable.iterator removes duplicates") { + val allFacts = Seq[Fact](Age(23), Age(23), DateOfBirth(LocalDate.now())) + val factTable = FactTable(allFacts) + assertEquals(factTable.iterator.toSeq.sorted, allFacts.distinct.sorted) + } + + test("FactTable.toSet") { + val allFacts = Seq[Fact](Age(23), DateOfBirth(LocalDate.now()), Age(24)) + val factTable = FactTable(allFacts) + assertEquals(factTable.iterator.toSet, allFacts.toSet) + } + + test("FactTable.toSeq") { + val allFacts = Seq[Fact](Age(23), DateOfBirth(LocalDate.now()), Age(24)) + val factTable = FactTable(allFacts) + assertEquals(factTable.iterator.toSeq.sorted, allFacts.sorted) + } +}