Skip to content

Commit

Permalink
JobMarket takes a model type param
Browse files Browse the repository at this point in the history
  • Loading branch information
davesmith00000 committed Mar 23, 2024
1 parent f2e9ac5 commit 92adf87
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import indigo.shared.subsystems.SubSystemId
* @param availableJobs
* Jobs currently available for allocation to workers.
*/
final case class JobMarket(id: SubSystemId, availableJobs: List[Job]) extends SubSystem[Any] {
final case class JobMarket[Model](id: SubSystemId, availableJobs: List[Job]) extends SubSystem[Model] {
type EventType = JobMarketEvent
type SubSystemModel = List[Job]
type ReferenceData = Unit
Expand All @@ -27,7 +27,7 @@ final case class JobMarket(id: SubSystemId, availableJobs: List[Job]) extends Su
case _ => None
}

def reference(model: Any): ReferenceData =
def reference(model: Model): ReferenceData =
()

val initialModel: Outcome[List[Job]] =
Expand Down Expand Up @@ -68,10 +68,10 @@ object JobMarket {
* @return
* An empty JobMarket
*/
def subSystem(id: SubSystemId): JobMarket =
def subSystem[Model](id: SubSystemId): JobMarket[Model] =
JobMarket(id, Nil)

def apply(id: SubSystemId, availableJobs: Job*): JobMarket =
def apply[Model](id: SubSystemId, availableJobs: Job*): JobMarket[Model] =
JobMarket(id, availableJobs.toList)

def findJob(availableJobs: List[Job], canTakeJob: Job => Boolean): (Option[Job], List[Job]) = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,17 @@ class JobMarketTests extends munit.FunSuite {
}

test("The job market.should be able to report it's current jobs") {
val job: Job = SampleJobs.CantHave()
val market: JobMarket = JobMarket(SubSystemId("market"), List(job))
val job: Job = SampleJobs.CantHave()
val market: JobMarket[Unit] = JobMarket(SubSystemId("market"), List(job))

val report = market.availableJobs.map(_.jobName.toString).mkString(",")

assertEquals(report.contains(job.jobName.toString), true)
}

test("The job market.should not render anything") {
val job: Job = SampleJobs.WanderTo(10)
val market: JobMarket = JobMarket.subSystem(SubSystemId("market"))
val job: Job = SampleJobs.WanderTo(10)
val market: JobMarket[Unit] = JobMarket.subSystem(SubSystemId("market"))

assertEquals(market.present(context, List(job)).unsafeGet.layers.flatMap(_.nodes).isEmpty, true)
assertEquals(market.present(context, List(job)).unsafeGlobalEvents.isEmpty, true)
Expand All @@ -93,7 +93,7 @@ class JobMarketTests extends munit.FunSuite {
test("The job market.should allow a you to find work.when there is a job you can do") {
val bindingKey: BindingKey = BindingKey("0001")
val job: Job = SampleJobs.WanderTo(10)
val market: JobMarket = JobMarket.subSystem(SubSystemId("market"))
val market: JobMarket[Unit] = JobMarket.subSystem(SubSystemId("market"))
val findEvent: JobMarketEvent = JobMarketEvent.Find(bindingKey, SampleActor.worker.canTakeJob(workContext))

val updated = market.update(context, List(job))(findEvent)
Expand All @@ -104,7 +104,7 @@ class JobMarketTests extends munit.FunSuite {

test("The job market.should allow a you to find work.but not when there isn't any work") {
val bindingKey: BindingKey = BindingKey("0001")
val market: JobMarket = JobMarket.subSystem(SubSystemId("market"))
val market: JobMarket[Unit] = JobMarket.subSystem(SubSystemId("market"))
val findEvent: JobMarketEvent = JobMarketEvent.Find(bindingKey, SampleActor.worker.canTakeJob(workContext))

val updated = market.update(context, Nil)(findEvent)
Expand All @@ -116,7 +116,7 @@ class JobMarketTests extends munit.FunSuite {
test("The job market.should allow a you to find work.or when the work is not acceptable to the worker") {
val bindingKey: BindingKey = BindingKey("0001")
val job: Job = SampleJobs.CantHave()
val market: JobMarket = JobMarket.subSystem(SubSystemId("market"))
val market: JobMarket[Unit] = JobMarket.subSystem(SubSystemId("market"))
val findEvent: JobMarketEvent = JobMarketEvent.Find(bindingKey, SampleActor.worker.canTakeJob(workContext))

val updated = market.update(context, List(job))(findEvent)
Expand All @@ -128,7 +128,7 @@ class JobMarketTests extends munit.FunSuite {
test("The job market.should allow a you to find work.should give you the highest priority job first") {
val bindingKey: BindingKey = BindingKey("0001")
val jobs: List[Job] = List(SampleJobs.WanderTo(10), SampleJobs.WanderTo(20), SampleJobs.Fishing(0))
val market: JobMarket = JobMarket.subSystem(SubSystemId("market"))
val market: JobMarket[Unit] = JobMarket.subSystem(SubSystemId("market"))
val findEvent: JobMarketEvent = JobMarketEvent.Find(bindingKey, SampleActor.worker.canTakeJob(workContext))

val updated = market.update(context, jobs)(findEvent)
Expand All @@ -139,7 +139,7 @@ class JobMarketTests extends munit.FunSuite {

test("The job market.should allow you to post a job.to an empty market") {
val job: Job = SampleJobs.WanderTo(10)
val market: JobMarket = JobMarket.subSystem(SubSystemId("market"))
val market: JobMarket[Unit] = JobMarket.subSystem(SubSystemId("market"))
val postEvent: JobMarketEvent = JobMarketEvent.Post(job)

val updated = market.update(context, Nil)(postEvent)
Expand All @@ -149,7 +149,7 @@ class JobMarketTests extends munit.FunSuite {

test("The job market.should allow you to post a job.and append to a non-empty market") {
val job: Job = SampleJobs.WanderTo(10)
val market: JobMarket = JobMarket.subSystem(SubSystemId("market"))
val market: JobMarket[Unit] = JobMarket.subSystem(SubSystemId("market"))
val postEvent: JobMarketEvent = JobMarketEvent.Post(job)

val updated = market.update(context, List(SampleJobs.Fishing(0)))(postEvent)
Expand All @@ -159,7 +159,7 @@ class JobMarketTests extends munit.FunSuite {

test("The job market.should allow you to post a job.the jobs state will be preserved") {
val job: Job = SampleJobs.Fishing(50)
val market: JobMarket = JobMarket.subSystem(SubSystemId("market"))
val market: JobMarket[Unit] = JobMarket.subSystem(SubSystemId("market"))
val postEvent: JobMarketEvent = JobMarketEvent.Post(job)

val updated = market.update(context, Nil)(postEvent)
Expand Down

0 comments on commit 92adf87

Please sign in to comment.