BEGIN { use_ok(
'Data::Range::Compare::Stream'
) };
BEGIN { use_ok(
'Data::Range::Compare::Stream::Sort'
) };
BEGIN { use_ok(
'Data::Range::Compare::Stream::Iterator::Array'
) };
BEGIN { use_ok(
'Data::Range::Compare::Stream::Iterator::Consolidate::Result'
) };
BEGIN { use_ok(
'Data::Range::Compare::Stream::Iterator::Consolidate'
) };
{
my
$obj
=Data::Range::Compare::Stream::Iterator::Array->new();
ok(
$obj
,
"Should construct the class object without error"
);
cmp_ok(
$obj
.
''
,
'eq'
,
'Data::Range::Compare::Stream::Iterator::Array'
,
"The name of the class should be returned when calling the instance in a string context"
);
}
{
my
$obj
=Data::Range::Compare::Stream::Iterator::Array->new();
my
@range_set_a
=
qw(
5 7
0 0
1 2
2 3
11 15
5 9
27 31
17 29
30 31
30 33
)
;
my
@ranges
;
while
(
my
(
$start
,
$end
)=
splice
(
@range_set_a
,0,2)) {
$obj
->create_range(
$start
,
$end
);
}
$obj
->prepare_for_consolidate_asc;
my
$iterator
=Data::Range::Compare::Stream::Iterator::Consolidate->new(
$obj
);
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'0 - 0'
,
"Consolidate ASC Common range check 1"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'0 - 0'
,
"Consolidate ASC Start range check 1"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'0 - 0'
,
"Consolidate ASC End range check 1"
);
ok(!
$range
->is_generated,
'generaated check'
);
}
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'1 - 3'
,
"Consolidate ASC Common range check 2"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'1 - 2'
,
"Consolidate ASC Start range check 2"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'2 - 3'
,
"Consolidate ASC End range check 2"
);
ok(
$range
->is_generated,
'generaated check'
);
}
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'5 - 9'
,
"Consolidate ASC Common range check 3"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'5 - 7'
,
"Consolidate ASC Start range check 3"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'5 - 9'
,
"Consolidate ASC End range check 3"
);
ok(
$range
->is_generated,
'generaated check'
);
}
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'11 - 15'
,
"Consolidate ASC Common range check 4"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'11 - 15'
,
"Consolidate ASC Start range check 4"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'11 - 15'
,
"Consolidate ASC End range check 4"
);
ok(!
$range
->is_generated,
'generaated check'
);
}
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'17 - 33'
,
"Consolidate ASC Common range check 5"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'17 - 29'
,
"Consolidate ASC Start range check 5"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'30 - 33'
,
"Consolidate ASC End range check 5"
);
ok(
$range
->is_generated,
'generaated check'
);
}
my
$last_iterator
=
$iterator
->get_next;
ok(!
$last_iterator
,
"Iterator should be empty!"
) or diag(Dumper(
$last_iterator
));
ok(!
$obj
->get_next,
"Collection should be empty!"
);
}
{
my
$obj
=Data::Range::Compare::Stream::Iterator::Array->new();
my
@range_set_a
=
qw(
0 0
)
;
my
@ranges
;
while
(
my
(
$start
,
$end
)=
splice
(
@range_set_a
,0,2)) {
$obj
->create_range(
$start
,
$end
);
}
$obj
->prepare_for_consolidate_asc;
my
$iterator
=Data::Range::Compare::Stream::Iterator::Consolidate->new(
$obj
);
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'0 - 0'
,
"Consolidate Single Common range check 1"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'0 - 0'
,
"Consolidate Single Start range check 1"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'0 - 0'
,
"Consolidate Single End range check 1"
);
ok(!
$range
->is_generated,
'generaated check'
);
}
my
$last_iterator
=
$iterator
->get_next;
ok(!
$last_iterator
,
"Iterator should be empty!"
) or diag(Dumper(
$last_iterator
));
ok(!
$obj
->get_next,
"Collection should be empty!"
);
}
{
our
$CONSOLIDATE
=0;
our
$UNIQUE
=0;
our
%VALIDATE
;
{
sub
on_consolidate {
my
(
$self
,
$new_range
,
$last_range
,
$next_range
)=
@_
;
++
$CONSOLIDATE
;
if
(
my
$id
=
$last_range
->data) {
$UNIQUE
++
unless
$VALIDATE
{
$id
}++;
}
if
(
my
$id
=
$next_range
->data) {
$UNIQUE
++
unless
$VALIDATE
{
$id
}++;
}
}
1;
}
my
$obj
=Data::Range::Compare::Stream::Iterator::Array->new();
my
@range_set_a
=
qw(
0 0
0 0
3 4
4 7
5 7
9 10
11 12
13 14
15 16
17 18
19 19
20 21
21 22
20 23
)
;
my
@ranges
;
my
$id
=0;
while
(
my
(
$start
,
$end
)=
splice
(
@range_set_a
,0,2)) {
my
$range
=new Data::Range::Compare::Stream(
$start
,
$end
,++
$id
);
$obj
->add_range(
$range
);
}
$obj
->prepare_for_consolidate_asc;
my
$cons
=new ConsolidateSubClass(
$obj
);
while
(
$cons
->has_next) {
$cons
->get_next;
}
cmp_ok(
$CONSOLIDATE
,
'=='
,5,
"Should be 5 Consolidations"
);
cmp_ok(
$UNIQUE
,
'=='
,
scalar
(
keys
%VALIDATE
),
"Should have 8 unique ranges passing through the call back"
);
}
{
my
$obj
=Data::Range::Compare::Stream::Iterator::Array->new();
my
@range_set_a
=
qw(
5 7
0 0
0 0
0 0
1 2
2 3
11 15
5 9
27 31
17 29
30 31
30 33
)
;
my
@ranges
;
while
(
my
(
$start
,
$end
)=
splice
(
@range_set_a
,0,2)) {
$obj
->create_range(
$start
,
$end
);
}
$obj
->prepare_for_consolidate_asc;
my
$iterator
=Data::Range::Compare::Stream::Iterator::Consolidate->new(
$obj
);
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'0 - 0'
,
"Consolidate ASC Common range check 1"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'0 - 0'
,
"Consolidate ASC Start range check 1"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'0 - 0'
,
"Consolidate ASC End range check 1"
);
ok(
$range
->is_generated,
'generaated check'
);
}
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'1 - 3'
,
"Consolidate ASC Common range check 2"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'1 - 2'
,
"Consolidate ASC Start range check 2"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'2 - 3'
,
"Consolidate ASC End range check 2"
);
ok(
$range
->is_generated,
'generaated check'
);
}
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'5 - 9'
,
"Consolidate ASC Common range check 3"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'5 - 7'
,
"Consolidate ASC Start range check 3"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'5 - 9'
,
"Consolidate ASC End range check 3"
);
ok(
$range
->is_generated,
'generaated check'
);
}
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'11 - 15'
,
"Consolidate ASC Common range check 4"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'11 - 15'
,
"Consolidate ASC Start range check 4"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'11 - 15'
,
"Consolidate ASC End range check 4"
);
ok(!
$range
->is_generated,
'generaated check'
);
}
{
my
$range
=
$iterator
->get_next;
cmp_ok(
$range
->get_common.
''
,
'eq'
,
'17 - 33'
,
"Consolidate ASC Common range check 5"
);
cmp_ok(
$range
->get_start.
''
,
'eq'
,
'17 - 29'
,
"Consolidate ASC Start range check 5"
);
cmp_ok(
$range
->get_end.
''
,
'eq'
,
'30 - 33'
,
"Consolidate ASC End range check 5"
);
ok(
$range
->is_generated,
'generaated check'
);
}
my
$last_iterator
=
$iterator
->get_next;
ok(!
$last_iterator
,
"Iterator should be empty!"
) or diag(Dumper(
$last_iterator
));
ok(!
$obj
->get_next,
"Collection should be empty!"
);
}