File: model-union.t

package info (click to toggle)
librdf-trine-perl 1.015-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 10,188 kB
  • ctags: 1,059
  • sloc: perl: 17,584; makefile: 30; sql: 20
file content (94 lines) | stat: -rw-r--r-- 2,997 bytes parent folder | download | duplicates (6)
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
use Test::More tests => 9;
use Test::Exception;

use strict;
use warnings;
no warnings 'redefine';

use RDF::Trine;
use RDF::Trine::Model::Union;
use RDF::Trine::Node;
use RDF::Trine::Pattern;
use RDF::Trine::Namespace;
use RDF::Trine::Statement;
use File::Temp qw(tempfile);

my $rdf		= RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#');
my $foaf	= RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/');
my $kasei	= RDF::Trine::Namespace->new('http://kasei.us/');

my $g		= RDF::Trine::Node::Blank->new();
my $h		= RDF::Trine::Node::Blank->new();
my $st0		= RDF::Trine::Statement->new( $h, $foaf->name, RDF::Trine::Node::Literal->new('Alice') );
my $st1		= RDF::Trine::Statement->new( $g, $rdf->type, $foaf->Person );
my $st2		= RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Greg') );
my $st3		= RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Gregory') );

my $store1	= RDF::Trine::Store->temporary_store();
my $store2	= RDF::Trine::Store->temporary_store();
my $model	= RDF::Trine::Model::Union->new( $store1, $store2 );

$store1->add_statement( $_ ) for ($st0, $st1);
$store2->add_statement( $_ ) for ($st2);
$model->add_statement( $st3 );

{
	my $x	= RDF::Trine::Node::Variable->new( 'x' );
	my $t	= RDF::Trine::Statement->new( $x, $rdf->type, $foaf->Person );
	my $p	= RDF::Trine::Pattern->new( $t );
	
	my $iter	= $model->get_pattern( $p );
	isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' );
	
	my (@rows)	= $iter->get_all;
	is_deeply( \@rows, [ RDF::Trine::VariableBindings->new({ x => $g }) ], '1-triple get_pattern results' );
}

{
	my $x	= RDF::Trine::Node::Variable->new( 'x' );
	my $n	= RDF::Trine::Node::Variable->new( 'name' );
	my $p	= RDF::Trine::Pattern->new(
		RDF::Trine::Statement->new( $x, $rdf->type, $foaf->Person ),
		RDF::Trine::Statement->new( $x, $foaf->name, $n ),
	);
	
	my $iter	= $model->get_pattern( $p );
	isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' );
	
	my %got;
	my $count	= 0;
	while (my $row = $iter->next) {
		$got{ $row->{'name'}->literal_value }++;
		$count++;
	}
	my $expect	= { qw(Greg 1 Gregory 1) };
	is( $count, 2, 'expected result count' );
	is_deeply( \%got, $expect, '2-triple get_pattern results' );
}

$model->remove_statement( $st3 );

{
	my $x	= RDF::Trine::Node::Variable->new( 'x' );
	my $n	= RDF::Trine::Node::Variable->new( 'name' );
	my $p	= RDF::Trine::Pattern->new(
		RDF::Trine::Statement->new( $x, $rdf->type, $foaf->Person ),
		RDF::Trine::Statement->new( $x, $foaf->name, $n ),
	);
	
	my $iter	= $model->get_pattern( $p );
	isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' );
	
	my %got;
	my $count	= 0;
	while (my $row = $iter->next) {
		$got{ $row->{'name'}->literal_value }++;
		$count++;
	}
	my $expect	= { qw(Greg 1) };
	is( $count, 1, 'expected result count' );
	is_deeply( \%got, $expect, '2-triple get_pattern results' );
}

$model->remove_statements( $g, undef, undef );
is( $model->size, 1, 'model size after remove_statements' );