Skip to content

Commit

Permalink
Finish refactoring and extending test to 100% coverage.
Browse files Browse the repository at this point in the history
  • Loading branch information
namcsi committed Jul 15, 2023
1 parent 0cd4b75 commit e537b22
Show file tree
Hide file tree
Showing 21 changed files with 394 additions and 231 deletions.
6 changes: 3 additions & 3 deletions src/renopro/asp/encodings/transform.lp
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ ast(constant_tuple(Id,Pos,Element)) :- constant_tuple(Id,Pos,Element).
ast(program(Name,Params,Statements)) :- program(Name,Params,Statements).


final(A) :- ast(A), not delete(A), not replace(A,_).
final(R) :- replace(_,R).
final(N) :- add(N).
final(A) :- ast(A), not ast_operation(delete(A)), not ast_operation(replace(A,_)).
final(R) :- ast_operation(replace(_,R)).
final(N) :- ast_operation(add(N)).

#show final/1.
File renamed without changes.
File renamed without changes.
7 changes: 7 additions & 0 deletions src/renopro/asp/tests/reify/good_ast/program_acid.lp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
% reified fact representation of program:
% #program acid(k).

program("base",constant_tuple(0),statement_tuple(1)).
program("acid",constant_tuple(2),statement_tuple(5)).
constant_tuple(2,0,function(3)).
function(3,k,term_tuple(4)).
File renamed without changes.
File renamed without changes.
File renamed without changes.
1 change: 1 addition & 0 deletions src/renopro/asp/tests/reify/malformed_ast/ast_fact.lp
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
atom(12,function(13)).
8 changes: 8 additions & 0 deletions src/renopro/asp/tests/reify/malformed_ast/missing_child.lp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
% Malformed set of ast facts with a missing child fact

program("base",constant_tuple(0),statement_tuple(1)).
statement_tuple(1,0,rule(2)).
rule(2,literal(3),literal_tuple(7)).
% facts representing head literal a.
literal(3,"pos",atom(4)).
atom(4,function(5)). % child fact function(5,_,_) is missing but required
11 changes: 11 additions & 0 deletions src/renopro/asp/tests/reify/malformed_ast/multiple_child.lp
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
% Malformed set of ast facts with a missing child fact

program("base",constant_tuple(0),statement_tuple(1)).
statement_tuple(1,0,rule(2)).
rule(2,literal(3),literal_tuple(7)).
% facts representing head literal a.
literal(3,"pos",atom(4)).
atom(4,function(5)).
% should only have one child like function(5,_,_)
function(5,a,term_tuple(6)).
function(5,b,term_tuple(7)).
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
notafact(dog, "mobius").
3 changes: 2 additions & 1 deletion src/renopro/asp/tests/transform/not_bad/transform.lp
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@ max_lit_index(LT,Idx)


% the transformation itself
ast_operation(
add((literal_tuple(LT,N+1,literal(new_id(LT,0)));
literal(new_id(LT,0),"not",atom(new_id(LT,1)));
atom(new_id(LT,1),function(new_id(LT,2)));
function(new_id(LT,2),bad,Fargs)))
function(new_id(LT,2),bad,Fargs))))
:- rule(_,literal(L),literal_tuple(LT)),
literal(L,"pos",atom(A)),
atom(A,function(F)),
Expand Down
23 changes: 11 additions & 12 deletions src/renopro/asp/tests/transform/prev_to_timepoints/transform.lp
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,22 @@ first_prev(A,F) :- prev_chain(A,F,O), not prev_chain(A,_,F).
% when an atom is not prev.

% add time point constant as additional argument
add(term_tuple(T,N+1,function(new_id(T)));
function(new_id(T),t,term_tuple(new_id(T))))
ast_operation(
add(term_tuple(T,N+1,function(new_id(T)));
function(new_id(T),t,term_tuple(new_id(T)))))
:- atom(A,function(F)), function(F,Name,term_tuple(T)),
Name!=prev, max_arg_index(T,N).

% when an atom is a prev.

% replace function symbol of atom with final operand, appending
% appropriate time point as additional argument.
replace(function(F,N,T1),function(F,Name,term_tuple(T2)))
ast_operation(
delete(function(F,N,T1));
add(function(F,Name,term_tuple(T2));
term_tuple(T2,I+1,binary_operation(new_id(O)));
binary_operation(new_id(O),"-",function(new_id(O)),number(new_id(O)));
function(new_id(O),t,term_tuple(new_id(O)));
number(new_id(O),Num)))
:- first_prev(A,function(F)), function(F,N,T1), final_operand(A,function(O)),
function(O,Name,term_tuple(T2)).

add((term_tuple(T,I+1,binary_operation(new_id(O)));
binary_operation(new_id(O),"-",function(new_id(O)),number(new_id(O)));
function(new_id(O),t,term_tuple(new_id(O)));
number(new_id(O),N)))
:- final_operand(A,function(O)), function(O,_,term_tuple(T)), max_arg_index(T,I),
num_prevs(A,N).

function(O,Name,term_tuple(T2)), max_arg_index(T2,I), num_prevs(A,Num).
4 changes: 1 addition & 3 deletions src/renopro/predicates.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,12 @@
Predicate,
RawField,
StringField,
Unifier,
combine_fields,
define_enum_field,
refine_field,
)

id_count = count()
next_id = lambda: next(id_count)

# by default we use integer identifiers, but allow arbitrary symbols as well
# for flexibility when these are user generated
Expand All @@ -38,7 +36,7 @@ def make_id_predicate(ast_pred):
id_pred_name,
(Predicate,),
{
"id": Identifier_Field(default=next_id),
"id": Identifier_Field(default=lambda: next(id_count)),
"Meta": type("Meta", tuple(), {"name": ast_pred.meta.name}),
},
)
Expand Down
Loading

0 comments on commit e537b22

Please sign in to comment.