summaryrefslogtreecommitdiff
path: root/src/test/scala/examples/VendingMachineUtils.scala
diff options
context:
space:
mode:
authorjackkoenig2016-10-26 16:40:36 -0700
committerJack Koenig2017-02-02 22:53:03 -0800
commitdd51b917566e6b30c3f123ca22a0393e73c2afe8 (patch)
treef81fce104ccc3405c7924c76618483750a4350bb /src/test/scala/examples/VendingMachineUtils.scala
parentb0a328492383108509c322189ed2803f671d7a59 (diff)
Revamp VendingMachine.scala as cookbook example
* Move to cookbook * Change FSM implementation to use switch & is * Add non-FSM implementation * Add execution-driven test
Diffstat (limited to 'src/test/scala/examples/VendingMachineUtils.scala')
-rw-r--r--src/test/scala/examples/VendingMachineUtils.scala39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/test/scala/examples/VendingMachineUtils.scala b/src/test/scala/examples/VendingMachineUtils.scala
new file mode 100644
index 00000000..e229dab5
--- /dev/null
+++ b/src/test/scala/examples/VendingMachineUtils.scala
@@ -0,0 +1,39 @@
+// See LICENSE for license details.
+
+package examples
+
+import scala.collection.mutable
+
+/* Useful utilities for testing vending machines */
+object VendingMachineUtils {
+ abstract class Coin(val name: String, val value: Int)
+ // US Coins
+ case object Penny extends Coin("penny", 1)
+ case object Nickel extends Coin("nickel", 5)
+ case object Dime extends Coin("dime", 10)
+ case object Quarter extends Coin("quarter", 25)
+
+ // Harry Potter Coins
+ case object Knut extends Coin("knut", Penny.value * 2) // Assuming 1 Knut is worth $0.02
+ case object Sickle extends Coin("sickle", Knut.value * 29)
+ case object Galleon extends Coin("galleon", Sickle.value * 17)
+
+ def getExpectedResults(inputs: Seq[Option[Coin]], sodaCost: Int): Seq[Boolean] = {
+ var value = 0
+ val outputs = mutable.ArrayBuffer.empty[Boolean]
+ for (input <- inputs) {
+ val incValue = input match {
+ case Some(coin) => coin.value
+ case None => 0
+ }
+ if (value >= sodaCost) {
+ outputs.append(true)
+ value = 0
+ } else {
+ outputs.append(false)
+ value += incValue
+ }
+ }
+ outputs
+ }
+}