github.com/pachyderm/pachyderm@v1.13.4/src/server/pkg/dag/dag_test.go (about) 1 package dag 2 3 import ( 4 "testing" 5 6 "github.com/pachyderm/pachyderm/src/client/pkg/require" 7 ) 8 9 func TestLine(t *testing.T) { 10 d := NewDAG(map[string][]string{ 11 "1": {}, 12 "2": {"1"}, 13 "3": {"2"}, 14 "4": {"3"}, 15 }) 16 require.Equal(t, []string{"1", "2", "3", "4"}, d.Sorted()) 17 require.Equal(t, []string{"1", "2", "3", "4"}, d.Ancestors("4", nil)) 18 require.Equal(t, []string{"3", "4"}, d.Ancestors("4", []string{"2"})) 19 require.Equal(t, []string{"1", "2"}, d.Ancestors("2", nil)) 20 require.Equal(t, []string{"1", "2", "3", "4"}, d.Descendants("1", nil)) 21 require.Equal(t, []string{"3", "4"}, d.Descendants("3", nil)) 22 require.Equal(t, []string{"1", "2"}, d.Descendants("1", []string{"3"})) 23 require.Equal(t, []string{"4"}, d.Leaves()) 24 require.Equal(t, 0, len(d.Ghosts())) 25 } 26 27 func TestDiamond(t *testing.T) { 28 d := NewDAG(map[string][]string{ 29 "1": {}, 30 "2": {"1"}, 31 "3": {"1"}, 32 "4": {"2", "3"}, 33 }) 34 require.EqualOneOf( 35 t, 36 []interface{}{ 37 []string{"1", "2", "3", "4"}, 38 []string{"1", "3", "2", "4"}, 39 }, 40 d.Sorted(), 41 ) 42 require.EqualOneOf( 43 t, 44 []interface{}{ 45 []string{"1", "2", "3", "4"}, 46 []string{"1", "3", "2", "4"}, 47 }, 48 d.Ancestors("4", nil), 49 ) 50 require.EqualOneOf( 51 t, 52 []interface{}{ 53 []string{"2", "3", "4"}, 54 []string{"3", "2", "4"}, 55 }, 56 d.Ancestors("4", []string{"1"}), 57 ) 58 require.EqualOneOf( 59 t, 60 []interface{}{ 61 []string{"1", "2", "3"}, 62 []string{"1", "3", "2"}, 63 }, 64 d.Descendants("1", []string{"4"}), 65 ) 66 require.Equal(t, []string{"4"}, d.Leaves()) 67 require.Equal(t, 0, len(d.Ghosts())) 68 } 69 70 func TestGhosts(t *testing.T) { 71 d := NewDAG(map[string][]string{ 72 "1": {}, 73 "2": {"1", "3"}, 74 "3": {"4", "1"}, 75 "5": {"4", "6"}, 76 }) 77 require.EqualOneOf( 78 t, 79 []interface{}{ 80 []string{"4", "6"}, 81 []string{"6", "4"}, 82 }, 83 d.Ghosts(), 84 ) 85 }