ossp-pkg/uuid/perl/uuid.ts
##
## OSSP uuid - Universally Unique Identifier
## Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
## Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
##
## This file is part of OSSP uuid, a library for the generation
## of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
##
## Permission to use, copy, modify, and distribute this software for
## any purpose with or without fee is hereby granted, provided that
## the above copyright notice and this permission notice appear in all
## copies.
##
## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
##
## uuid.ts: Perl Binding (Perl test suite part)
##
use Test::More tests => 36;
##
## Module Loading
##
BEGIN {
use_ok('OSSP::uuid');
};
BEGIN {
use OSSP::uuid qw(:all);
ok(defined(UUID_VERSION), "UUID_VERSION");
ok(UUID_RC_OK == 0, "UUID_RC_OK");
};
##
## C-Style API
##
my ($rc, $result, $uuid, $uuid_ns, $str, $ptr, $len);
$rc = uuid_create($uuid);
ok($rc == UUID_RC_OK, "uuid_create (1)");
$rc = uuid_create($uuid_ns);
ok($rc == UUID_RC_OK, "uuid_create (2)");
$rc = uuid_isnil($uuid, $result);
ok(($rc == UUID_RC_OK and $result == 1), "uuid_isnil (1)");
$rc = uuid_isnil($uuid_ns, $result);
ok(($rc == UUID_RC_OK and $result == 1), "uuid_isnil (2)");
$rc = uuid_compare($uuid, $uuid_ns, $result);
ok(($rc == UUID_RC_OK and $result == 0), "uuid_compare (1)");
$rc = uuid_export($uuid, UUID_FMT_STR, $ptr, $len);
ok(( $rc == UUID_RC_OK
and $ptr eq "00000000-0000-0000-0000-000000000000"
and $len == UUID_LEN_STR), "uuid_export (1)");
$rc = uuid_load($uuid_ns, "ns:URL");
ok($rc == UUID_RC_OK, "uuid_load (1)");
$rc = uuid_export($uuid_ns, UUID_FMT_STR, $ptr, $len);
ok(( $rc == UUID_RC_OK
and $ptr eq "6ba7b811-9dad-11d1-80b4-00c04fd430c8"
and $len == UUID_LEN_STR), "uuid_export (2)");
$rc = uuid_make($uuid, UUID_MAKE_V3, $uuid_ns, "http://www.ossp.org/");
ok($rc == UUID_RC_OK, "uuid_make (1)");
$rc = uuid_export($uuid, UUID_FMT_STR, $ptr, $len);
ok(( $rc == UUID_RC_OK
and $ptr eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"
and $len == UUID_LEN_STR), "uuid_export (3)");
$rc = uuid_export($uuid, UUID_FMT_BIN, $ptr, $len);
ok(( $rc == UUID_RC_OK
and $len == UUID_LEN_BIN), "uuid_export (4)");
$rc = uuid_import($uuid_ns, UUID_FMT_BIN, $ptr, $len);
ok($rc == UUID_RC_OK, "uuid_import (1)");
$rc = uuid_export($uuid_ns, UUID_FMT_STR, $ptr, $len);
ok(( $rc == UUID_RC_OK
and $ptr eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"
and $len == UUID_LEN_STR), "uuid_export (5)");
$rc = uuid_export($uuid_ns, UUID_FMT_SIV, $ptr, $len);
ok(( $rc == UUID_RC_OK
and $ptr eq "3789866285607910888100818383505376205"
and $len <= UUID_LEN_SIV), "uuid_export (6)");
$rc = uuid_destroy($uuid_ns);
ok($rc == UUID_RC_OK, "uuid_destroy (1)");
$rc = uuid_destroy($uuid);
ok($rc == UUID_RC_OK, "uuid_destroy (2)");
##
## OO-style API
##
$uuid = new OSSP::uuid;
ok(defined($uuid), "new OSSP::uuid (1)");
$uuid_ns = new OSSP::uuid;
ok(defined($uuid_ns), "new OSSP::uuid (2)");
$rc = $uuid->isnil();
ok((defined($rc) and $rc == 1), "isnil (1)");
$rc = $uuid_ns->isnil();
ok((defined($rc) and $rc == 1), "isnil (2)");
$rc = $uuid->compare($uuid_ns);
ok((defined($rc) and $rc == 0), "compare (1)");
$ptr = $uuid->export("str");
ok(( defined($ptr)
and $ptr eq "00000000-0000-0000-0000-000000000000"
and length($ptr) == UUID_LEN_STR), "export (1)");
$rc = $uuid_ns->load("ns:URL");
ok(defined($rc), "uuid_load (1)");
$ptr = $uuid_ns->export("str");
ok(( defined($ptr)
and $ptr eq "6ba7b811-9dad-11d1-80b4-00c04fd430c8"
and length($ptr) == UUID_LEN_STR), "export (2)");
$rc = $uuid->make("v3", $uuid_ns, "http://www.ossp.org/");
ok(defined($rc), "make (1)");
$ptr = $uuid->export("str");
ok(( defined($ptr)
and $ptr eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"
and length($ptr) == UUID_LEN_STR), "export (3)");
$ptr = $uuid->export("bin");
ok(( defined($ptr)
and length($ptr) == UUID_LEN_BIN), "export (4)");
$rc = $uuid_ns->import("bin", $ptr);
ok(defined($rc), "import (1)");
$ptr = $uuid_ns->export("str");
ok(( defined($ptr)
and $ptr eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"
and length($ptr) == UUID_LEN_STR), "export (5)");
undef $uuid;
undef $uuid_ns;
##
## TIE API
##
$uuid = new OSSP::uuid;
tie my $var, 'OSSP::uuid::tie';
my $val_get1 = $var;
my $val_get2 = $var;
ok($val_get1 ne $val_get2, "subsequent generation");
$uuid->import("str", $val_get1);
my $val_cmp1 = $uuid->export("str");
$uuid->import("str", $val_get2);
my $val_cmp2 = $uuid->export("str");
ok($val_get1 eq $val_cmp1, "validity comparison 1");
ok($val_get2 eq $val_cmp2, "validity comparison 2");
$var = [ "v3", "ns:URL", "http://www.ossp.org/" ];
$val_get1 = $var;
ok($val_get1 eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd", "generation of UUID v3");