use strict; use warnings; # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More qw(no_plan); use Data::Dumper; $Data::Dumper::Indent = 1; sub _chomp { my $s = shift; chomp $s; return $s; } #== TESTS ===================================================================== use TM; use TM::Materialized::AsTMa; { # testing add, same baseuri my $tm1 = new TM; $tm1->internalize ('rumsti' => \ 'http://rumsti/'); $tm1->assert (Assertion->new (type => 'is-subclass-of', roles => [ 'superclass', 'subclass' ], players => [ 'rumsti', 'ramsti' ])); $tm1->assert (Assertion->new (type => 'is-subclass-of', roles => [ 'superclass', 'subclass' ], players => [ 'rumsti', 'remsti' ])); my $tm2 = new TM; $tm2->internalize ('rumsti' => \ 'http://xxxrumsti/'); $tm2->assert (Assertion->new (type => 'is-subclass-of', roles => [ 'superclass', 'subclass' ], players => [ 'rumsti', 'rimsti' ])); $tm2->add ($tm1); #warn Dumper $tm2; my $m = $tm2->insane; die $m if $m; ok (eq_set ([ map { $_->players->[0] } $tm2->match (TM->FORALL, anyid => $tm2->tids (\ 'http://rumsti/')) ], [ 'tm://nirvana/ramsti', 'tm://nirvana/remsti', ] ), 'add: found all assocs (new rumsti)'); ok (eq_set ([ map { $_->players->[0] } $tm2->match (TM->FORALL, anyid => $tm2->tids (\ 'http://xxxrumsti/')) ], [ 'tm://nirvana/rimsti', ] ), 'add: found all assocs (old rumsti)'); ok (eq_array ([ $tm2->tids ('ramsti', 'remsti', 'rimsti',) ], [ 'tm://nirvana/ramsti', 'tm://nirvana/remsti', 'tm://nirvana/rimsti', ]), 'add: found all rumstis'); } { my $tm1 = new TM::Materialized::AsTMa (baseuri => 'tm1:', inline => 'aaa (bbb) in: AAA oc: http://aaa/ bbb bn: BBB oc: http://bbb/ sin: http://xxx/ (is-subclass-of) subclass: ccc superclass: bbb '); $tm1->sync_in; my $tm2 = new TM::Materialized::AsTMa (baseuri => 'tm2:', inline => 'aaa (bbb) in: AAA2 oc: http://aaa2/ bbb bn: BBB2 oc: http://bbb2/ sin: http://xxx/ (is-subclass-of) subclass: ccc superclass: bbb '); $tm2->sync_in; $tm1->add ($tm2); $tm1->consolidate; my $m = $tm1->insane; die "CORRRUPT $m" if $m; { # make sure that only bbb is merged isnt ($tm1->toplet ('tm1:aaa'), $tm1->toplet ('tm2:aaa'), 'aaa not merged'); is ($tm1->toplet ('tm1:bbb'), $tm1->toplet ('tm2:bbb'), 'bbb merged (toplet)'); ok (eq_set ( $tm1->toplets ('tm1:bbb')->[TM->INDICATORS], [ 'http://xxx/' ] ), 'subject indicators'); is ($tm1->tids ('tm1:bbb'), $tm1->tids ('tm2:bbb'), 'bbb merged (ID)'); } { # try to find chars ok (eq_set ([ map { $_->[0] } map { $_->[TM->PLAYERS]->[1] } $tm1->match_forall (char => 1, topic => $tm1->tids ('bbb')) ] , [ 'BBB2', 'http://bbb/', 'BBB', 'http://bbb2/' ]), 'chars of bbb'); ok (eq_set ([ map { $_->[0] } map { $_->[TM->PLAYERS]->[1] } $tm1->match_forall (char => 1, topic => $tm1->tids ('tm1:aaa')) ] , [ 'AAA', 'http://aaa/', ]), 'chars of tm1:aaa'); ok (eq_set ([ map { $_->[0] } map { $_->[TM->PLAYERS]->[1] } $tm1->match_forall (char => 1, topic => $tm1->tids ('tm2:aaa')) ] , [ 'AAA2', 'http://aaa2/', ]), 'chars of tm2:aaa'); } #warn Dumper $tm1; { ok (eq_set ([ $tm1->instances ('tm1:bbb') ],[ 'tm1:aaa', 'tm2:aaa' ]), 'instances of bbb'); ok (eq_set ([ $tm1->subclasses ('tm1:bbb') ],[ 'tm1:ccc', 'tm2:ccc' ]), 'subclasses of bbb'); } TODO: { local $TODO = "merge maps with the same baseURI"; ok( 0, 'exotic use' ); }; } __END__