風 山 堂

(foussin's diary)

gmcl.pl の動作検証、完了

f:id:foussin:20120109010458j:plain【 賀 】

 ここでは、テストコードと、その実行例だけ載せる。

テストコード:

#!/usr/bin/perl

# undef-chk2.pl  (gmcl.pl の挙動をチェック)

# 引数(座標データ)が『undef』、もしくは『長さ 0』の
# 挙動をチェックするテストコード【其ノ2】(コピペ多用)

# フィクスの目的:
#
#       undef:何もしない       (グラフィックコマンドの場合)
#       長さ0:座標の点を打つ   (circle のみ例外 → 何もしない)

use strict;
use warnings;

require "txt_draw.pl";
require "gmcl.pl";

# 変数初期化
@gmcl::x    = ();
@gmcl::y    = ();
my $str     = "";
my $spc     = "";
my $icode   = "";
my $del_or_shift = "shift";

my ($x0, $y0, $x1, $y1, $r, $t, $closed);               # 最初は undef


;### 14: circle (真円、円弧を描く)
# circle では『undef』『長さ 0』、共に『何もしない』
# 書式1:gmcl::circle($x0, $y0, $r);                    # 真円を描く
print "# circle(書式1): undef\n";
gmcl::circle($x0, $y0, $r);
my @x = @gmcl::x;
my @y = @gmcl::y;
txt_draw::run(\@x, \@y, $str, $spc, $del_or_shift);

print "# circle(書式1): 長さ0\n";
gmcl::circle(1, 1, 0);
@x = @gmcl::x;
@y = @gmcl::y;
txt_draw::run(\@x, \@y, $str, $spc, $del_or_shift);

my ($x2, $y2, $start, $end);                            # 最初は undef

# 書式2:($x2, $y2, $start, $end, $r) =
#        gmcl::circle($x0, $y0, $x1, $y1, $t, $closed); # 円弧を描く
print "# circle(書式2): undef\n";
($x2, $y2, $start, $end, $r) =
gmcl::circle($x0, $y0, $x1, $y1, $t, $closed);
print "ret:($x2, $y2, $start, $end, $r)\n";
@x = @gmcl::x;
@y = @gmcl::y;
txt_draw::run(\@x, \@y, $str, $spc, $del_or_shift);

print "# circle(書式2): 長さ0\n";
($x2, $y2, $start, $end, $r) =
gmcl::circle(1, 1, 1, 1, $t, $closed);
print "ret:($x2, $y2, $start, $end, $r)\n";
@x = @gmcl::x;
@y = @gmcl::y;
txt_draw::run(\@x, \@y, $str, $spc, $del_or_shift);


;### 15: circle0 (真円、楕円、円弧を描く…昔の circle 文)
# 書式:($x2, $y2, $x1, $y1) =
#       &gmcl::circle0($x0, $y0, $r, $ratio, $start, $end, $closed);
my $ratio;  # 最初は undef
$x2 = $y2 = $x1 = $y1 = undef;
$x0 = $y0 = $r  = $start = $end = $closed = undef;

print "# circle0: undef\n";
($x2, $y2, $x1, $y1) =
gmcl::circle0($x0, $y0, $r, $ratio, $start, $end, $closed);
print "ret:($x2, $y2, $x1, $y1)\n";
@x = @gmcl::x;
@y = @gmcl::y;
txt_draw::run(\@x, \@y, $str, $spc, $del_or_shift);

print "# circle0: 長さ0\n";
($x2, $y2, $x1, $y1) =
gmcl::circle0(1, 1, 0, 1, $start, $end, $closed);
print "ret:($x2, $y2, $x1, $y1)\n";
@x = @gmcl::x;
@y = @gmcl::y;
txt_draw::run(\@x, \@y, $str, $spc, $del_or_shift);


;### 16: rad_lines (放射状の線を引く... radial lines)
# 書式:($x, $y) =
#       gmcl::rad_lines($x0, $y0, $r[, $many, $itv, $ratio, $start, $t]);

my ($many, $itv, $x, $y);  # 最初は undef
$x0 = $y0 = $r  = $start = $t = $ratio = undef;

print "# rad_lines: undef\n";
($x, $y) = gmcl::rad_lines($x0, $y0, $r, $many, $itv, $ratio, $start, $t);
print "ret:($x, $y)\n";
@x = @gmcl::x;
@y = @gmcl::y;
txt_draw::run(\@x, \@y, $str, $spc, $del_or_shift);

print "# rad_lines: 長さ0\n";
($x, $y) = gmcl::rad_lines(1, 1, 0, $many, $itv, $ratio, $start, $t);
print "ret:($x, $y)\n";
@x = @gmcl::x;
@y = @gmcl::y;
txt_draw::run(\@x, \@y, $str, $spc, $del_or_shift);


;### 17: not (論理演算的な反転)
# 書式:gmcl::not(\@x, \@y[, $x0, $y0, $x1, $y1, $opt]);
my $opt;
@x = @y = @gmcl::x = @gmcl::y = ();
$x0 = $y0 = $x1 = $y1 = undef;

print "# not: undef\n";
gmcl::not(\@x, \@y, $x0, $y0, $x1, $y1, $opt);
txt_draw::run(\@x, \@y, $str, $spc, $del_or_shift);

print "# not: 反転矩形範囲の面積が『点』(長さ、面積が 0)\n";
@x = @y = (0,1,2,3,4);              # 今度は undef ではない
gmcl::not(\@x, \@y, 2, 2, 2, 2, 1); # $opt = 1 : 座標(2,2)だけ反転する
txt_draw::run(\@x, \@y, $str, $spc, $del_or_shift);


;### 18: true_or_not (引数が "" or undef なら 偽、それ以外なら真を返す)
# 検証不要(他の関数に組み込んで動作確認済み)


;### 19: round (端数を四捨五入して整数化)
# 書式:$int = gmcl::round($float);     (scalar)
# 書式:@int = gmcl::round(@float);     (array, list)

print "# round: undef\n";
my ($int, @int);
$x0 = $y0 = $x1 = $y1 = undef;
@int = gmcl::round($x0, $y0, $x1, $y1);
print "int: ", join(", ", @int), "\n\n";

print "# round: TEST\n";
print "float: 3.4, 3.5, -3.4, -3.5\n";
@int = gmcl::round(3.4, 3.5, -3.4, -3.5);
print "int  : ", join(",   ", @int), "\n\n";


### 20: cat_yx (y,x の順番で、連結して格納)(重複座標も除去)
# 検証不要(他の関数に組み込んで動作確認済み)

my $time = localtime;  print "\n実行時刻: $time\n";

__END__

 

実行結果:

# circle(書式1): undef


# circle(書式1): 長さ0


# circle(書式2): undef
ret:(, , , , )


# circle(書式2): 長さ0
ret:(, , , , )


# circle0: undef
ret:(, , , )


# circle0: 長さ0
ret:(1, 1, 1, 1)

 *

# rad_lines: undef
ret:(, )


# rad_lines: 長さ0
ret:(1, 1)

 *

# not: undef


# not: 反転矩形範囲の面積が『点』(長さ、面積が 0)
*
 *

   *
    *

# round: undef
int: 0, 0, 0, 0

# round: TEST
float: 3.4, 3.5, -3.4, -3.5
int  : 3,   4,   -3,   -4


実行時刻: Mon Jan 16 02:30:29 2012

 

 修正に伴い、過去のテストコードも動作チェックした。特に問題はないみたい。なので、ダイアリーの方で最新版を公開する。しばしお待ちを。。。