@@ -3,68 +3,76 @@ package graph
33import org .scalatest .funspec .AnyFunSpec
44import org .scalatest .matchers .should .Matchers .shouldBe
55import P85 .isIsomorphicTo
6+ import graph .Util .given
7+ import scala .language .implicitConversions
68
79class P85Spec extends AnyFunSpec :
810 it(" graph isomorphism" ):
911
10- val v1 = List ('a' , 'b' )
11- val e1 = List (('a' , 'b' ))
12- val v2 = List (5 , 7 )
13- val e2 = List ((5 , 7 ))
14- val g1 = Graph .buildUG(v1, e1.map((u, v) => Edge (u, v, None )) )
15- val g2 = Graph .buildUG(v2, e2.map((u, v) => Edge (u, v, None )) )
12+ val v1 = List ('a' , 'b' )
13+ val e1 : List [ Edge [ Char , Nothing ]] = List (('a' , 'b' ))
14+ val v2 = List (5 , 7 )
15+ val e2 : List [ Edge [ Int , Nothing ]] = List ((5 , 7 ))
16+ val g1 = Graph .buildUG(v1, e1)
17+ val g2 = Graph .buildUG(v2, e2)
1618 g1.isIsomorphicTo(g2) shouldBe true
1719
1820 // format: off
1921 val v3 = (1 to 8 ).toList
20- val e3 =
22+ val e3 : List [ Edge [ Int , Nothing ]] =
2123 List (
2224 (1 , 5 ), (1 , 6 ), (1 , 7 ), (2 , 5 ),
2325 (2 , 6 ), (2 , 8 ), (3 , 5 ), (3 , 7 ),
2426 (3 , 8 ), (4 , 6 ), (4 , 7 ), (4 , 8 )
2527 )
26- val e4 =
28+ val e4 : List [ Edge [ Int , Nothing ]] =
2729 List (
2830 (1 , 2 ), (1 , 4 ), (1 , 5 ), (6 , 2 ),
2931 (6 , 5 ), (6 , 7 ), (8 , 4 ), (8 , 5 ),
3032 (8 , 7 ), (3 , 2 ), (3 , 4 ), (3 , 7 )
3133 )
3234 // format: on
3335
34- val g3 = Graph .buildUG(v3, e3.map((u, v) => Edge (u, v, None )) )
35- val g4 = Graph .buildUG(v3, e4.map((u, v) => Edge (u, v, None )) )
36+ val g3 = Graph .buildUG(v3, e3)
37+ val g4 = Graph .buildUG(v3, e4)
3638 g3.isIsomorphicTo(g4) shouldBe true
3739
3840 val v5 = ('a' to 'e' ).toList
39- val e5 = List (('a' , 'b' ), ('a' , 'c' ), ('a' , 'e' ), ('b' , 'c' ), ('c' , 'd' ), ('d' , 'e' ))
41+ val e5 : List [Edge [Char , Nothing ]] =
42+ List (('a' , 'b' ), ('a' , 'c' ), ('a' , 'e' ), ('b' , 'c' ), ('c' , 'd' ), ('d' , 'e' ))
4043 val v6 = ('A' to 'E' ).toList
41- val e6 = List (('A' , 'D' ), ('A' , 'E' ), ('B' , 'C' ), ('B' , 'D' ), ('B' , 'E' ), ('C' , 'D' ))
44+ val e6 : List [Edge [Char , Nothing ]] =
45+ List (('A' , 'D' ), ('A' , 'E' ), ('B' , 'C' ), ('B' , 'D' ), ('B' , 'E' ), ('C' , 'D' ))
4246
43- val g5 = Graph .buildUG(v5, e5.map((u, v) => Edge (u, v, None )) )
44- val g6 = Graph .buildUG(v6, e6.map((u, v) => Edge (u, v, None )) )
47+ val g5 = Graph .buildUG(v5, e5)
48+ val g6 = Graph .buildUG(v6, e6)
4549 g5.isIsomorphicTo(g6) shouldBe true
4650
4751 val v7 = List ('α' , 'β' , 'γ' , 'δ' , 'ε' )
48- val e7 = List (('α' , 'β' ), ('α' , 'γ' ), ('α' , 'ε' ), ('β' , 'δ' ), ('γ' , 'δ' ), ('δ' , 'ε' ))
49- val g7 = Graph .buildUG(v7, e7.map((u, v) => Edge (u, v, None )))
52+ val e7 : List [Edge [Char , Nothing ]] =
53+ List (('α' , 'β' ), ('α' , 'γ' ), ('α' , 'ε' ), ('β' , 'δ' ), ('γ' , 'δ' ), ('δ' , 'ε' ))
54+ val g7 = Graph .buildUG(v7, e7)
5055 g5.isIsomorphicTo(g7) shouldBe false
5156 g6.isIsomorphicTo(g7) shouldBe false
5257
5358 val v8 = ('a' to 'f' ).toList
54- val e8 = List (('a' , 'b' ), ('a' , 'd' ), ('b' , 'c' ), ('c' , 'f' ), ('d' , 'e' ), ('e' , 'f' ))
55- val e9 = List (('a' , 'd' ), ('a' , 'e' ), ('b' , 'd' ), ('b' , 'f' ), ('c' , 'e' ), ('c' , 'f' ))
56- val g8 = Graph .buildUG(v8, e8.map((u, v) => Edge (u, v, None )))
57- val g9 = Graph .buildUG(v8, e9.map((u, v) => Edge (u, v, None )))
59+ val e8 : List [Edge [Char , Nothing ]] =
60+ List (('a' , 'b' ), ('a' , 'd' ), ('b' , 'c' ), ('c' , 'f' ), ('d' , 'e' ), ('e' , 'f' ))
61+ val e9 : List [Edge [Char , Nothing ]] =
62+ List (('a' , 'd' ), ('a' , 'e' ), ('b' , 'd' ), ('b' , 'f' ), ('c' , 'e' ), ('c' , 'f' ))
63+ val g8 = Graph .buildUG(v8, e8)
64+ val g9 = Graph .buildUG(v8, e9)
5865 g8.isIsomorphicTo(g9) shouldBe true
5966
6067 // G(v8 e8) and G(va ea) are not isomorphic but the algorithm can't determine that.
6168 // val va = [1..6]
6269 // val ea = [(1, 3), (1, 5), (2, 4), (2, 6), (3, 5), (4, 6)]
6370
6471 val v10 = ('A' to 'D' ).toList
65- val e10 = List (('A' , 'B' ), ('A' , 'C' ), ('A' , 'D' ), ('B' , 'C' ), ('B' , 'D' ), ('C' , 'D' ))
66- val v11 = (1 to 4 ).toList
67- val e11 = List ((1 , 2 ), (1 , 3 ), (1 , 4 ), (2 , 3 ), (2 , 4 ), (3 , 4 ))
68- val g10 = Graph .buildUG(v10, e10.map((u, v) => Edge (u, v, None )))
69- val g11 = Graph .buildUG(v11, e11.map((u, v) => Edge (u, v, None )))
72+ val e10 : List [Edge [Char , Nothing ]] =
73+ List (('A' , 'B' ), ('A' , 'C' ), ('A' , 'D' ), ('B' , 'C' ), ('B' , 'D' ), ('C' , 'D' ))
74+ val v11 = (1 to 4 ).toList
75+ val e11 : List [Edge [Int , Nothing ]] = List ((1 , 2 ), (1 , 3 ), (1 , 4 ), (2 , 3 ), (2 , 4 ), (3 , 4 ))
76+ val g10 = Graph .buildUG(v10, e10)
77+ val g11 = Graph .buildUG(v11, e11)
7078 g10.isIsomorphicTo(g11) shouldBe true
0 commit comments