// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package dag import ( "slices" "strings" "testing" ) const diamond = ` NONE < a < b, c < d; ` func mustParse(t *testing.T, dag string) *Graph { t.Helper() g, err := Parse(dag) if err != nil { t.Fatal(err) } return g } func wantEdges(t *testing.T, g *Graph, edges string) { t.Helper() wantEdges := strings.Fields(edges) wantEdgeMap := make(map[string]bool) for _, e := range wantEdges { wantEdgeMap[e] = true } for _, n1 := range g.Nodes { for _, n2 := range g.Nodes { got := g.HasEdge(n1, n2) want := wantEdgeMap[n1+"->"+n2] if got && want { t.Logf("%s->%s", n1, n2) } else if got && !want { t.Errorf("%s->%s present but not expected", n1, n2) } else if want && !got { t.Errorf("%s->%s missing but expected", n1, n2) } } } } func TestParse(t *testing.T) { // Basic smoke test for graph parsing. g := mustParse(t, diamond) wantNodes := strings.Fields("a b c d") if !slices.Equal(wantNodes, g.Nodes) { t.Fatalf("want nodes %v, got %v", wantNodes, g.Nodes) } // Parse returns the transitive closure, so it adds d->a. wantEdges(t, g, "b->a c->a d->a d->b d->c") }