#!perl
use strict;
use warnings;
use lib 't';
use MyTestHeader;
use Carp qw/confess/;
use Test::More tests => 2;
use Test::LectroTest::Compat
regressions => $Regfile;
use_ok('Physics::Lorentz');
use PDL;
# Check addition of vectors
my $add_works = Property {
##[
x <- Float, y <- Float, z <- Float, t <- Float
e <- Float, kx <- Float, ky <- Float, kz <- Float
]##
# WTF? Undefined values? FIXME
for ($x, $y, $z, $t, $e, $kx, $ky, $kz) {
$_ = 0 if not defined $_;
}
my $v1 = Physics::Lorentz::Vector->new([$t, $x, $y, $z]);
my $v2 = Physics::Lorentz::Vector->new([$e, $kx, $ky, $kz]);
my $v12 = Physics::Lorentz::Vector->new([$t+$e,$x+$kx,$y+$ky,$z+$kz]);
my $sum = $v1->add($v2);
myisa($sum, 'Physics::Lorentz::Vector');
pdl_approx_equiv($sum->get_pdl(), $v12->get_pdl(), 1e-8)
or confess("v1->add(v2) breaks. Expected: $v12. Got: $sum.");
$sum = $v2->add($v1);
myisa($sum, 'Physics::Lorentz::Vector');
pdl_approx_equiv($sum->get_pdl(), $v12->get_pdl(), 1e-8)
or confess("v2->add(v1) breaks. Expected: $v12. Got: $sum.");
$sum = $v1 + $v2;
myisa($sum, 'Physics::Lorentz::Vector');
pdl_approx_equiv($sum->get_pdl(), $v12->get_pdl(), 1e-8)
or confess("v1 + v2 breaks. Expected: $v12. Got: $sum.");
$sum = $v2 + $v1;
myisa($sum, 'Physics::Lorentz::Vector');
pdl_approx_equiv($sum->get_pdl(), $v12->get_pdl(), 1e-8)
or confess("v2 + v1 breaks. Expected: $v12. Got: $sum.");
$v1 += $v2;
myisa($v1, 'Physics::Lorentz::Vector');
pdl_approx_equiv($v1->get_pdl(), $v12->get_pdl(), 1e-8)
or confess("v1 += v2 breaks. Expected: $v12. Got: $v1.");
}, name => 'Addition of vectors works';
holds($add_works, trials => $Trials);