1#! /usr/bin/perl
2# $OpenBSD: check-cfl,v 1.3 2014/01/31 10:28:18 espie Exp $
3# Written by Marc Espie
4# Public domain
5
6use strict;
7use warnings;
8use Test::Simple tests => 4;
9
10use OpenBSD::PkgCfl;
11use OpenBSD::PackingList;
12use OpenBSD::PackingElement;
13
14sub check_list
15{
16	my $expected = shift;
17	my @r = sort(@$expected);
18	@_ = sort(@_);
19	if (@r != @_) {
20		print STDERR "length: ", scalar(@r)," vs. ", 
21		    scalar(@_), "\n";
22		    print STDERR "Expected: ", join(',', @r), "\n";
23		    print STDERR "Result: ", join(',', @_), "\n";
24		return 0;
25	}
26	for my $i (0 .. @_ -1) {
27		if ($r[$i] ne $_[$i]) {
28			print STDERR "$r[$i] vs. $_[$i]\n";
29			return 0;
30		}
31	}
32	return 1;
33}
34
35sub check_conflict
36{
37	my ($plist, @list) = @_;
38	my $cfl = OpenBSD::PkgCfl->make_conflict_list($plist);
39	return $cfl->conflicts_with(@list);
40}
41
42
43my $p1 = OpenBSD::PackingList->new;
44OpenBSD::PackingElement::Name->add($p1, "foo-1.0");
45
46my @l1 = qw(foo-2.0 partial-foo-2.5 bar-2.0 bar-1.5 buz-1.0 .libs-buz-0.0);
47my @r1 = qw(foo-2.0 partial-foo-2.5);
48ok(check_list(\@r1, check_conflict($p1, @l1)));
49
50my $p2 = OpenBSD::PackingList->new;
51OpenBSD::PackingElement::Name->add($p2, "bar-2.0");
52OpenBSD::PackingElement::NoDefaultConflict->add($p2);
53my @r2 = qw(bar-2.0);
54ok(check_list(\@r2, check_conflict($p2, @l1)));
55
56my $p3 = OpenBSD::PackingList->new;
57OpenBSD::PackingElement::Name->add($p3, "buz-2.5");
58OpenBSD::PackingElement::Conflict->add($p3, "bar->=2");
59
60my @r3 = qw(bar-2.0 buz-1.0 .libs-buz-0.0);
61ok(check_list(\@r3, check_conflict($p3, @l1)));
62
63my @l2 = qw(partial-foo-2.5 partial-partial-foo-2.10 bar-2.0 bar-1.5 buz-1.0 .libs-buz-0.0);
64my @r4 = qw(partial-foo-2.5 partial-partial-foo-2.10);
65ok(check_list(\@r4, check_conflict($p1, @l2)));
66