The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use Test::More tests => 5 * 6;
use Games::EternalLands::Binary::Float16 ':all';

my @v = (1.234, -567.8, 0.003, -0.123, 1234.0, 12345.789);
for my $f (@v) {
  my $s = pack_float16($f);
  ok(defined $s, "pack($f) returns defined value");
  ok($s >= 0, "pack($f) returns non-negative integer ($s)");
  ok($s < 65536, "pack($f) returns unsigned short ($s)");
  my $g = unpack_float16($s);
  ok(defined $g, "unpack($s) returns defined value ($g)");
  my $e = abs(($f - $g) / $f) * 100.0;
  my $m = 0.5;
  cmp_ok($e, '<', $m, "percent error (|$f - $g| / |$f| = $e%) is less than $m%");
}