前回,
今回取り上げるプログラム
今回取り上げるのは
リスト1 「Nゲージ」
#! /usr/local/bin/php
<?php
$url = "http://192.168.0.100/";
file_get_contents($url."?00=C");
file_get_contents($url."?01=D");
file_get_contents($url."?02=D");
file_get_contents($url."?03=C");
?>
どうでしょう。ちょっとテスト駆動に向かないのではないか,
こちらは,
リスト2 「Nゲージ」
#! /usr/local/bin/php
<?php
$url = "http://192.168.0.100/";
class rail {
var $number;
function rail($number = "00") {
$this->number = $number;
}
function drive($speed = 0) {
global $url;
if ($speed >= 0)
$command = substr("ABCDEF", min($speed, 5), 1);
else
$command = substr("abcdef", min(-$speed, 5), 1);
file_get_contents($url."?".$this->number."=".$command);
}
function sense() {
global $url;
return file_get_contents($url."?".$this->number."=S") + 0;
}
}
#
# |---r4---|---r3---|---r2---|---r1---|---r0---|
#
$r0 =& new rail("00");
$r1 =& new rail("01");
$r2 =& new rail("02");
$r3 =& new rail("03");
$r4 =& new rail("04");
for (;;) {
$r0->drive(2);
$r1->drive(3);
$r2->drive(3);
$r3->drive(2);
while ($r4->sense() == 0)
;
$r0->drive(0);
$r1->drive(0);
$r2->drive(0);
$r3->drive(0);
$r4->drive(-2);
$r3->drive(-3);
$r2->drive(-3);
$r1->drive(-2);
while ($r0->sense() == 0)
;
$r4->drive(0);
$r3->drive(0);
$r2->drive(0);
$r1->drive(0);
}
?>
今回使用するテストエンジンは,
リスト3 run.
#! /usr/local/bin/php
<?php
function asserteq($expected, $found) {
if ($expected === $found) {
printf(".");
return;
}
printf("\nexpected: \"%s\"\nfound: \"%s\"\n----\ntest failed.\n", $expected, $found);
die();
}
require(@$argv[1]);
foreach (get_declared_classes() as $classname) {
foreach (get_class_methods($classname) as $methodname) {
if (!ereg("^test", $methodname))
continue;
$obj =& new $classname();
$obj->$methodname();
}
}
print"\ntest successed.\n";
?>
また,