aboutsummaryrefslogtreecommitdiffstats
path: root/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemTestUtil.xtend
blob: b31756592cf4a9dff73ab9ca728bc0d1d7e5085c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package org.eclipse.viatra.solver.language.tests

import org.eclipse.viatra.solver.language.ProblemUtil
import org.eclipse.viatra.solver.language.model.problem.Argument
import org.eclipse.viatra.solver.language.model.problem.Assertion
import org.eclipse.viatra.solver.language.model.problem.AssertionArgument
import org.eclipse.viatra.solver.language.model.problem.Atom
import org.eclipse.viatra.solver.language.model.problem.ClassDeclaration
import org.eclipse.viatra.solver.language.model.problem.Conjunction
import org.eclipse.viatra.solver.language.model.problem.EnumDeclaration
import org.eclipse.viatra.solver.language.model.problem.Literal
import org.eclipse.viatra.solver.language.model.problem.NegativeLiteral
import org.eclipse.viatra.solver.language.model.problem.Node
import org.eclipse.viatra.solver.language.model.problem.NodeAssertionArgument
import org.eclipse.viatra.solver.language.model.problem.NodeValueAssertion
import org.eclipse.viatra.solver.language.model.problem.PredicateDefinition
import org.eclipse.viatra.solver.language.model.problem.Problem
import org.eclipse.viatra.solver.language.model.problem.Variable
import org.eclipse.viatra.solver.language.model.problem.VariableOrNodeArgument
import org.eclipse.viatra.solver.language.model.problem.UniqueDeclaration

class ProblemTestUtil {
	def builtin(Problem it) {
		ProblemUtil.getBuiltInLibrary(it).get
	}
	
	def errors(Problem it) {
		eResource.errors
	}
	
	def nodeNames(Problem it) {
		nodes.map[name]
	}
	
	def pred(Problem it, String name) {
		statements.filter(PredicateDefinition).findFirst[it.name == name]
	}
	
	def param(PredicateDefinition it, int i) {
		parameters.get(i)
	} 

	def conj(PredicateDefinition it, int i) {
		bodies.get(i)
	}

	def lit(Conjunction it, int i) {
		literals.get(i)
	}

	def negated(Literal it) {
		(it as NegativeLiteral).atom
	}

	def relation(Literal it) {
		(it as Atom).relation
	}

	def arg(Atom it, int i) {
		it.arguments.get(i)
	}

	def arg(Literal it, int i) {
		(it as Atom).arg(i)
	}

	def variable(Argument it) {
		(it as VariableOrNodeArgument).variableOrNode as Variable
	}

	def node(Argument it) {
		(it as VariableOrNodeArgument).variableOrNode as Node
	}
	
	def assertion(Problem it, int i) {
		statements.filter(Assertion).get(i)
	}
	
	def nodeValueAssertion(Problem it, int i) {
		statements.filter(NodeValueAssertion).get(i)
	}
	
	def arg(Assertion it, int i) {
		arguments.get(i)
	}
	
	def node(AssertionArgument it) {
		(it as NodeAssertionArgument).node
	}
	
	def node(Problem it, String name) {
		nodes.findFirst[it.name == name]
	}
	
	def uniqueNode(Problem it, String name) {
		statements.filter(UniqueDeclaration).flatMap[nodes].findFirst[it.name == name]
	}
	
	def findClass(Problem it, String name) {
		statements.filter(ClassDeclaration).findFirst[it.name == name]
	}
	
	def reference(ClassDeclaration it, String name) {
		it.referenceDeclarations.findFirst[it.name == name]
	}
	
	def findEnum(Problem it, String name) {
		statements.filter(EnumDeclaration).findFirst[it.name == name]
	}
	
	def literal(EnumDeclaration it, String name) {
		literals.findFirst[it.name == name]
	}
}