File: dev-time-intervals.t

package info (click to toggle)
librdf-query-perl 2.919-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,580 kB
  • sloc: perl: 30,628; javascript: 131; sh: 13; makefile: 2
file content (123 lines) | stat: -rw-r--r-- 3,415 bytes parent folder | download | duplicates (5)
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/usr/bin/env perl

use strict;
use warnings;
no warnings 'redefine';
use Test::More;
use Test::Exception;
use Scalar::Util qw(refaddr);

use RDF::Query;

if ($ENV{RDFQUERY_TIMETEST}) {
	plan qw(no_plan);
} else {
	plan skip_all => 'Developer tests. Set RDFQUERY_TIMETEST to run these tests.';
	return;
}

use lib qw(. t);
BEGIN { require "models.pl"; }

my $debug	= 1;
my @files	= map { "data/$_" } qw(temporal.rdf);
my @models	= test_models( @files );


my $tests	= 0;
my $find_interval	= <<"END";
	PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
	PREFIX t: <http://www.w3.org/2006/09/time#>
	SELECT ?interval ?b ?e
	WHERE {
		{
			?interval a t:Interval ;
						t:begins ?b ; t:ends ?e .
			FILTER( ?b <= "%s"^^xsd:dateTime && ?e > "%s"^^xsd:dateTime )
		} UNION {
			?interval a t:Interval ;
						t:begins ?b .
			OPTIONAL { ?interval t:ends ?e } .
			FILTER( !BOUND(?e) ) .
			FILTER( ?b <= "%s"^^xsd:dateTime )
		} UNION {
			?interval a t:Interval .
			OPTIONAL { ?interval t:begins ?b } .
			?interval t:ends ?e .
			FILTER( !BOUND(?b) ) .
			FILTER( ?e > "%s"^^xsd:dateTime )
		} UNION {
			?interval a t:Interval .
			OPTIONAL { ?interval t:begins ?b } .
			OPTIONAL { ?interval t:ends ?e } .
			FILTER( !BOUND(?b) && !BOUND(?e) ) .
		}
	}
END

foreach my $model (@models) {
	print "\n#################################\n";
	print "### Using model: $model\n";
	{
		# find intervals that contain a specific date
		my $dt		= '1999-06-01';
		my $sparql	= sprintf( $find_interval, ($dt) x 4 );
		my $query	= RDF::Query->new( $sparql, undef, undef, 'sparql' );
		my $stream	= $query->execute( $model );
		my $count	= 0;
		while (my $data = $stream->next) {
			my $interval	= $data->[0];
			ok( $interval->isa('RDF::Trine::Node'), 'time-intervals' );
			like( $interval->uri_value, qr/#yearTo2000/, 'time-intervals: 1999' );
			$count++;
		}
		is( $count, 1, '1999: correct count of matching intervals' );
	}
	
	{
		# find intervals that contain a specific date
		my $dt		= '2000-06-01';
		my $sparql	= sprintf( $find_interval, ($dt) x 4 );
		my $query	= RDF::Query->new( $sparql, undef, undef, 'sparql' );
		my $stream	= $query->execute( $model );
		my $count	= 0;
		while (my $data = $stream->next) {
			my $interval	= $data->[0];
			ok( $interval->isa('RDF::Trine::Node'), 'time-intervals' );
			like( $interval->uri_value, qr/#year2000/, 'time-intervals: 2000' );
			$count++;
		}
		is( $count, 1, '2000: correct count of matching intervals' );
	}
	
	{
		# find intervals that contain a specific date
		my $dt		= '2002-06-01';
		my $sparql	= sprintf( $find_interval, ($dt) x 4 );
		my $query	= RDF::Query->new( $sparql, undef, undef, 'sparql' );
		my $stream	= $query->execute( $model );
		my $count	= 0;
		while (my $data = $stream->next) {
			my $interval	= $data->[0];
			$count++;
		}
		is( $count, 0, '2002: correct count of matching intervals' );
	}
	
	{
		# find intervals that contain a specific date
		my $dt		= '2005-06-01';
		my $sparql	= sprintf( $find_interval, ($dt) x 4 );
		my $query	= RDF::Query->new( $sparql, undef, undef, 'sparql' );
		my $stream	= $query->execute( $model );
		my $count	= 0;
		while (my $data = $stream->next) {
			my $interval	= $data->[0];
			ok( $interval->isa('RDF::Trine::Node'), 'time-intervals' );
			like( $interval->uri_value, qr/#yearFrom2003/, 'time-intervals: 2005' );
			$count++;
		}
		is( $count, 1, '2005: correct count of matching intervals' );
	}
}