1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
#!perl -w
#
# this tests the API headers are C++ compatible
use strict;
use Test::More;
eval "require Inline::CPP;";
plan skip_all => "Inline::CPP required for testing C++ compatibility" if $@;
use Cwd 'getcwd';
plan skip_all => "Inline won't work in directories with spaces"
if getcwd() =~ / /;
plan skip_all => "perl 5.005_04, 5.005_05 too buggy"
if $] =~ /^5\.005_0[45]$/;
-d "testout" or mkdir "testout";
print STDERR "Inline::CPP version $Inline::CPP::VERSION\n";
require Inline;
Inline->import(with => 'Imager');
Inline->import("FORCE"); # force rebuild
#Inline->import(C => Config => OPTIMIZE => "-g");
Inline->bind(CPP => <<'EOS');
#include <math.h>
int pixel_count(Imager::ImgRaw im) {
return im->xsize * im->ysize;
}
int count_color(Imager::ImgRaw im, Imager::Color c) {
int count = 0, x, y, chan;
i_color read_c;
for (x = 0; x < im->xsize; ++x) {
for (y = 0; y < im->ysize; ++y) {
int match = 1;
i_gpix(im, x, y, &read_c);
for (chan = 0; chan < im->channels; ++chan) {
if (read_c.channel[chan] != c->channel[chan]) {
match = 0;
break;
}
}
if (match)
++count;
}
}
return count;
}
Imager make_10x10() {
i_img *im = i_img_8_new(10, 10, 3);
i_color c;
c.channel[0] = c.channel[1] = c.channel[2] = 255;
i_box_filled(im, 0, 0, im->xsize-1, im->ysize-1, &c);
return im;
}
EOS
my $im = Imager->new(xsize=>50, ysize=>50);
is(pixel_count($im), 2500, "pixel_count");
my $black = Imager::Color->new(0,0,0);
is(count_color($im, $black), 2500, "count_color black on black image");
my $im2 = make_10x10();
my $white = Imager::Color->new(255, 255, 255);
is(count_color($im2, $white), 100, "check new image white count");
ok($im2->box(filled=>1, xmin=>1, ymin=>1, xmax => 8, ymax=>8, color=>$black),
"try new image");
is(count_color($im2, $black), 64, "check modified black count");
is(count_color($im2, $white), 36, "check modified white count");
done_testing();
|