Last active
May 25, 2024 10:20
-
-
Save dacr/c36480deb372e064a97ffe14c7fe9350 to your computer and use it in GitHub Desktop.
Playing with scala-graph API / published by https://github.com/dacr/code-examples-manager #41be75cf-c7c1-486c-a9f0-65d1c971d588/bfee2d46b3182d614444fa790e06abb41d2a5691
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// summary : Playing with scala-graph API | |
// keywords : scala, scala-graph, @testable | |
// publish : gist | |
// authors : David Crosson | |
// license : Apache NON-AI License Version 2.0 (https://raw.githubusercontent.com/non-ai-licenses/non-ai-licenses/main/NON-AI-APACHE2) | |
// id : 41be75cf-c7c1-486c-a9f0-65d1c971d588 | |
// created-on : 2021-12-30T09:03:58+01:00 | |
// managed-by : https://github.com/dacr/code-examples-manager | |
// run-with : scala-cli $file | |
// --------------------- | |
//> using scala "2.13.14" | |
//> using dep "org.scalatest::scalatest:3.2.16" | |
//> using dep "org.scala-graph::graph-core:1.13.3" | |
//> using dep "org.scala-graph::graph-dot:1.13.3" | |
//> using objectWrapper | |
// --------------------- | |
// https://www.scala-graph.org/ | |
// https://en.wikipedia.org/wiki/DOT_(graph_description_language) | |
import org.scalatest._ | |
import org.scalatest.concurrent.Eventually._ | |
import flatspec._, matchers._, OptionValues._ | |
import scalax.collection.Graph // or scalax.collection.mutable.Graph | |
import scalax.collection.GraphPredef._, scalax.collection.GraphEdge._ | |
import scalax.collection.edge.WDiEdge | |
import scalax.collection.edge.Implicits._ | |
case class Item(name: String) | |
class ThatSpec extends AnyFlatSpec with should.Matchers { | |
"Graph API" should "be able to create simple undirected graphs" in { | |
val g1 = Graph(1 ~ 3, 5) | |
g1.edges.size shouldBe 1 | |
g1.nodes.size shouldBe 3 | |
val g2 = Graph("A" ~ "B", "B" ~ "C", "A" ~ "D") | |
g2.edges.size shouldBe 3 | |
g2.nodes.size shouldBe 4 | |
} | |
it should "be able to create simple directed graphs" in { | |
val wheel = Graph( | |
Item("A") ~> Item("B"), | |
Item("B") ~> Item("C"), | |
Item("C") ~> Item("D"), | |
Item("D") ~> Item("A") | |
) | |
wheel.edges.size shouldBe 4 | |
wheel.nodes.size shouldBe 4 // and not 5 of course | |
} | |
it should "be able to create weighted directed/undirected graphs" in { | |
// https://www.scala-graph.org/guides/core-traversing.html | |
val graph = Graph( | |
1 ~ 2 % 4, | |
2 ~ 3 % 2, | |
1 ~> 3 % 5, | |
1 ~ 5 % 3, | |
3 ~ 5 % 2, | |
3 ~ 4 % 1, | |
4 ~> 4 % 1, | |
4 ~> 5 % 0 | |
) | |
val sp0 = graph.get(3) shortestPathTo graph.get(1) | |
} | |
// TODO - to be continued... | |
} | |
org.scalatest.tools.Runner.main(Array("-oDF", "-s", classOf[ThatSpec].getName)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment