Skip to content

Commit 7da1038

Browse files
author
Bernhard Scholz
authored
Merge pull request souffle-lang#245 from mmcgr/master
Add 5 new tests of aggregate functions.
2 parents 563af86 + 55ddfe1 commit 7da1038

28 files changed

+152
-0
lines changed

tests/evaluation.at

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,8 @@ POSITIVE_TEST([circuit_records],[evaluation])
143143
POSITIVE_TEST([circuit_sat],[evaluation])
144144
POSITIVE_TEST([factoring],[evaluation])
145145
POSITIVE_TEST([perfect_numbers],[evaluation])
146+
POSITIVE_TEST([shortest_path],[evaluation])
147+
POSITIVE_TEST([shortest_edges],[evaluation])
148+
POSITIVE_TEST([degree],[evaluation])
149+
POSITIVE_TEST([highest_degree],[evaluation])
150+
POSITIVE_TEST([disconnected],[evaluation])

tests/evaluation/degree/InDegree.csv

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
b 1
2+
e 3
3+
c 1
4+
d 1

tests/evaluation/degree/OutDegree.csv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
a 2
2+
b 2
3+
c 2

tests/evaluation/degree/degree.dl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// Find the shorted outward edge for every Node
2+
.type Node
3+
4+
.decl Edge(n:Node, m:Node, w:number) input
5+
6+
.decl OutDegree(n:Node, l:number) output
7+
8+
OutDegree(x, l) :- Edge(x, _, _), l = sum 1 : Edge(x, _, _).
9+
10+
.decl InDegree(n:Node, l:number) output
11+
12+
InDegree(x, l) :- Edge(_, x, _), l = sum 1 : Edge(_, x, _).

tests/evaluation/degree/degree.err

Whitespace-only changes.

tests/evaluation/degree/degree.out

Whitespace-only changes.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
a b 1
2+
a e 5
3+
b c 2
4+
b e 4
5+
c d 3
6+
c e 40
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
a g
2+
a h
3+
a f
4+
b g
5+
b h
6+
b f
7+
c b
8+
c g
9+
c h
10+
c f
11+
f b
12+
f e
13+
f c
14+
f d
15+
g b
16+
g e
17+
g c
18+
g d
19+
h b
20+
h e
21+
h c
22+
h d
23+
b a
24+
c a
25+
f a
26+
g a
27+
h a
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Find all disconnected node pairs
2+
.type Node
3+
4+
.decl Edge(n:Node, m:Node, w:number) input
5+
6+
// Find the connected nodes
7+
.decl Connected(n:Node, m:Node)
8+
Connected(n, n) :- Edge(n, _, _).
9+
Connected(n, n) :- Edge(_, n, _).
10+
Connected(n, m) :- Edge(n, m, _).
11+
Connected(n, m) :- Edge(n, z, _), Connected(z, m).
12+
13+
// Find nodes without a connection
14+
.decl DisConnected(n:Node, m:Node) output
15+
DisConnected(n, m) :- Edge(n, _, _), Edge(_, m, _), !Connected(n, m).
16+
DisConnected(n, m) :- Edge(n, _, _), Edge(m, _, _), !Connected(n, m).

tests/evaluation/disconnected/disconnected.err

Whitespace-only changes.

tests/evaluation/disconnected/disconnected.out

Whitespace-only changes.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
a b 1
2+
a e 5
3+
b c 2
4+
b e 4
5+
c d 3
6+
c e 40
7+
f g 1
8+
g h 1
9+
h f 1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
a b 1
2+
a e 5
3+
b c 2
4+
b e 4
5+
c d 3
6+
c e 40
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Find the highest in and out degree nodes in the graph
2+
.type Node
3+
4+
.decl Edge(n:Node, m:Node, w:number) input
5+
6+
.decl OutDegree(n:Node, l:number)
7+
OutDegree(x, l) :- Edge(x, _, _), l = sum 1 : Edge(x, _, _).
8+
9+
.decl InDegree(n:Node, l:number)
10+
InDegree(x, l) :- Edge(_, x, _), l = sum 1 : Edge(_, x, _).
11+
12+
.decl HighestOutDegree(d:number) output
13+
HighestOutDegree(d) :- OutDegree(_, _), d = max D : OutDegree(_, D).
14+
15+
.decl HighestInDegree(d:number) output
16+
HighestInDegree(d) :- InDegree(_, _), d = max D : InDegree(_, D).
17+

tests/evaluation/highest_degree/highest_degree.err

Whitespace-only changes.

tests/evaluation/highest_degree/highest_degree.out

Whitespace-only changes.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
a 1
2+
b 2
3+
c 3
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
a b 1
2+
a e 5
3+
b c 2
4+
b e 4
5+
c d 3
6+
c e 40
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Find the shortest outward edge for every Node
2+
.type Node
3+
4+
.decl Edge(n:Node, m:Node, w:number) input
5+
6+
.decl ShortestEdgeFromN(n:Node, l:number) output
7+
8+
ShortestEdgeFromN(x, l) :- Edge(x, _, _), l = min Z : Edge(x, _, Z).

tests/evaluation/shortest_edges/shortest_edges.err

Whitespace-only changes.

tests/evaluation/shortest_edges/shortest_edges.out

Whitespace-only changes.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
a b 1
2+
a e 5
3+
b c 2
4+
b e 4
5+
c d 3
6+
c e 40
7+
a c 3
8+
b d 5
9+
a d 6
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
a b 1
2+
a e 5
3+
b c 2
4+
b e 4
5+
c d 3
6+
c e 40
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Find the shortest paths between all nodes, the slow way
2+
.type Node
3+
4+
.decl Edge(n:Node, m:Node, w:number) input
5+
6+
// Find all paths
7+
.decl Length (n:Node, m:Node, l:number)
8+
Length(x,y,t) :- t=l, Edge(x,y,l).
9+
Length(x,y,t+l) :- Edge(x,z,l), Length(z,y,t).
10+
11+
// Filter out the longest path
12+
.decl ShortestPath(n:Node, m:Node, l:number) output
13+
ShortestPath(x, y, a) :- Length(x, y, _), a = min Z : Length(x, y, Z).

tests/evaluation/shortest_path/shortest_path.err

Whitespace-only changes.

tests/evaluation/shortest_path/shortest_path.out

Whitespace-only changes.

0 commit comments

Comments
 (0)