The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! /usr/bin/env perl

## 00-util.t --- test procedure for utility functions.

# Copyright (C) 2010 Ralph Schleicher.  All rights reserved.

# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.

## Code:

use strict;
use warnings;

use Test::Simple tests => 27;

BEGIN
{
  unshift (@INC, 'lib', '../lib');
}

use Math::MatrixDecomposition::Util qw(:all);

my ($re, $im);

ok (1 + eps   != 1, '1 + eps  ');
ok (1 + eps/2 == 1, '1 + eps/2');

ok (mod ( 0, 1) == 0, 'mod ( 0, 1)');
ok (mod (-2, 1) == 0, 'mod (-2, 1)');
ok (mod ( 2, 1) == 0, 'mod ( 2, 1)');
ok (mod (-3.14, 1) != 0, 'mod (-3.14, 1)');
ok (mod ( 3.14, 1) != 0, 'mod ( 3.14, 1)');

ok (min (3, 3) == 3, 'min (3, 3)');
ok (min (3, 5) == 3, 'min (3, 5)');
ok (min (5, 3) == 3, 'min (5, 3)');

ok (max (3, 3) == 3, 'max (3, 3)');
ok (max (3, 5) == 5, 'max (3, 5)');
ok (max (5, 3) == 5, 'max (5, 3)');

ok (sign (-2, -1) == -2, 'sign (-2, -1)');
ok (sign (-2,  0) ==  2, 'sign (-2,  0)');
ok (sign (-2,  1) ==  2, 'sign (-2,  1)');
ok (sign ( 0, -1) ==  0, 'sign ( 0, -1)');
ok (sign ( 0,  0) ==  0, 'sign ( 0,  0)');
ok (sign ( 0,  1) ==  0, 'sign ( 0,  1)');
ok (sign ( 2, -1) == -2, 'sign ( 2, -1)');
ok (sign ( 2,  0) ==  2, 'sign ( 2,  0)');
ok (sign ( 2,  1) ==  2, 'sign ( 2,  1)');
ok (sign (eps/9, -1) == -(eps/9), 'sign (eps/9, -1)');
ok (sign (eps/9,  0) ==  (eps/9), 'sign (eps/9,  0)');
ok (sign (eps/9,  1) ==  (eps/9), 'sign (eps/9,  1)');

ok (hypot (3, 4) == 5, 'hypot (3, 4)');

($re, $im) = cdiv (4, -3, -2, 7);
ok ($re == -29/53 && $im == -22/53, 'cdiv (4, -3, -2, 7)');

## 00-util.t ends here