1 module fact_test;
2 
3 import fact;
4 import std.stdio,
5 	std.string;
6 import core.stdc.stdarg;
7 
8 void print2Darray ( const char*** names ) {
9 	writefln("[\n");
10 	int n=0;
11 	const (char*)* syns = names[0];
12 	while ( syns != null )
13 	{
14 		printf("[");
15 		int m = 0;
16 		const (char)* name;
17 		while ( (name = syns[m++]) != null)
18 			printf("%s ", name);
19 		writefln("]\n");
20 		syns=names[++n];
21 	}
22 	writefln("]\n");
23 }
24 
25 auto _fact_concept_actor_new(...) {
26 	return fact_concept_actor_new(_argptr);
27 }
28 auto _fact_individual_actor_new(...) {
29 	return fact_individual_actor_new(_argptr);
30 }
31 auto _fact_o_role_actor_new(...) {
32 	return fact_o_role_actor_new(_argptr);
33 }
34 
35 int main ( ) {
36 	puts("Starting FaCT++ C interface tests");
37 	// create kernel
38 	fact_reasoning_kernel* k = fact_reasoning_kernel_new();
39 
40 	// create classes C,D, property R
41 	puts("Creating entities");
42 	fact_concept_expression* c = fact_concept(k,"C");
43 	fact_concept_expression* d = fact_concept(k,"D");
44 	fact_individual_expression* i = fact_individual(k,"I");
45 	fact_o_role_expression* r = fact_object_role(k,"R");
46 
47 	// create C [= ER.T, ER.T [= D
48 	puts("Creating axioms");
49 	fact_concept_expression* some = fact_o_exists ( k, r, fact_top(k));
50 	fact_implies_concepts ( k, c, some );
51 	fact_implies_concepts ( k, some, d );
52 	fact_instance_of ( k, i, c );
53 
54 	// classify KB is not necessary: it's done automatically depending on a query
55 	puts("Classifying ontology");
56 	fact_classify_kb(k);
57 	
58 	
59 	// check whether C [= D
60 	puts("Is C subsumed by D?");
61 	if ( fact_is_subsumed_by(k,c,d) )
62 		puts("Yes!\n");
63 	else
64 		puts("No...\n");
65 
66 	// create a concept actor and use it to get all superclasses of C
67 	puts("All superclasses of C:");
68 	fact_actor* actor = _fact_concept_actor_new();
69 	fact_get_sup_concepts(k,c,0,&actor);
70 	print2Darray(fact_get_elements_2d(actor));
71 	fact_actor_free(actor);
72 
73 	// create an individual actor and use it to get all instances of C
74 	puts("All instances of C:");
75 	fact_actor* i_actor = _fact_individual_actor_new();
76 	fact_get_instances(k, c, &i_actor);
77 	print2Darray(fact_get_elements_2d(i_actor));
78 	fact_actor_free(i_actor);
79 
80 	// get all the properties
81 	puts("All object properties:");
82 	fact_o_role_expression* o_top = fact_object_role_top(k);
83 	actor = _fact_o_role_actor_new();
84 	fact_get_sub_roles(k,cast(fact_role_expression*)o_top,0,&actor);
85 	print2Darray(fact_get_elements_2d(actor));
86 	fact_actor_free(actor);
87 
88 	// we done so let's free memory
89 	puts("Destroying reasoning kernel");
90 	fact_reasoning_kernel_free(k);
91 	puts("All done");
92 	return 0;
93 }