8000 WIP: replicating a basic test from souffle · Z80coder/datalog-cpp@fabebe8 · GitHub
[go: up one dir, main page]

Skip to content

Commit fabebe8

Browse files
author
wright
committed
WIP: replicating a basic test from souffle
1 parent f41d728 commit fabebe8

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/Datalog.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,17 @@ VariableOrValue<T> atomElement(const T& t) {
7777
return VariableOrValue<T>{t};
7878
};
7979

80+
#if 1
8081
template<typename RELATION_TYPE, typename ... Ts>
8182
typename RELATION_TYPE::Atom atom(Ts&& ... elements) {
8283
return typename RELATION_TYPE::Atom(forward_as_tuple(atomElement(elements)...));
8384
}
85+
#else
86+
template<typename RELATION_TYPE, typename ... Ts>
87+
typename RELATION_TYPE::Atom atom(Ts ... elements) {
88+
return typename RELATION_TYPE::Atom(forward_as_tuple(atomElement(&elements)...));
89+
}
90+
#endif
8491

8592
template <typename... Ts>
8693
struct Relation : tuple<Ts...>
@@ -91,7 +98,6 @@ struct Relation : tuple<Ts...>
9198
typedef set<Relation> Set;
9299
};
93100

94-
// TODO: can we avoid unbinding non-Variables by compile-time decisions?
95101
template <typename T>
96102
static void unbind(const VariableOrValue<T> &VariableOrValue)
97103
{

tests/types_test.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,36 @@ bool test2()
128128
return true;
129129
}
130130

131+
bool po1()
132+
{
133+
typedef unsigned int Number;
134+
struct Check : Relation<Number, Number, Number, Number, Number, Number>{};
135+
struct In : Relation<Number, Number, Number, Number, Number, Number, Number>{};
136+
struct A : Relation<Number, Number>{};
137+
138+
Variable<Number> a, b, c, d, e, f, i;
139+
Variable<Number> anon;
140+
141+
#if 0
142+
struct Rule1 : Rule<A, Check, In> {} rule1{
143+
atom<A>(1, i),
144+
//atom<A>(Number{1}, i),
145+
//atom<A>(uint{1}, i),
146+
//atom<A>(forward<Number>(1), i),
147+
//atom<A>(move(1), i),
148+
{
149+
atom<Check>(anon, b, c, d, e, f),
150+
atom<In>(anon, b, c, d, e, f, i)
151+
}
152+
};
153+
#endif
154+
155+
return true;
156+
}
157+
131158
int main()
132159
{
133160
test1();
134161
test2();
162+
po1();
135163
}

0 commit comments

Comments
 (0)
0