LeJeuDuFrigo/AtelierOctobre2004TremeurEtCedricUn seul fichier de code, pour la simplicité de développement.
<?
error_reporting(E_ALL);
require_once('simpletest/unit_tester.php');
require_once('simpletest/reporter.php');
class CFrigo
{
var $temperature, $commande=100;
var $journal=array();
function CFrigo()
{
$this->temperature=Number_Format(15, 1);
$this->Memorise();
}
function Action($action)
{
if($action!=-1 and $action<=200 and is_int($action))
{
$this->commande=$action;
if(count($this->journal)<5) $id=0; else $id=count($this->journal)-5;
$Ti5=$this->journal[$id]['temperature'];
$this->temperature=$this->temperature+($this->commande/10+2-$Ti5)/3;
$this->Memorise();
}
}
function Temperature()
{
return Number_Format($this->temperature, 5);
}
function Memorise()
{
$this->journal[]=array('temperature'=>$this->Temperature(), 'commande'=>$this->commande);
}
function Resultat()
{
$resultat=array('t T C');
foreach ($this->journal as $id=>$ligne) $resultat[]=$id.' '.$ligne['temperature'].' '.$ligne['commande'];
return $resultat;
}
}
class testFrigo extends UnitTestCase
{
var $frigo;
function setUp()
{
$this->frigo=new CFrigo();
}
function VerifieValeurs($temperature, $commande)
{
$this->AssertEqual($temperature, $this->frigo->Temperature());
$this->AssertEqual($commande, $this->frigo->commande);
}
function testValeursInitiales()
{
$this->VerifieValeurs('15.0', 100);
}
function testActionCommande()
{
$this->VerifieValeurs(15, 100);
$this->frigo->Action(50);
$this->VerifieValeurs(12.33333, 50);
$this->frigo->Action('');
$this->VerifieValeurs(12.33333, 50);
$this->frigo->Action(-1);
$this->VerifieValeurs(12.33333, 50);
$this->frigo->Action(201);
$this->VerifieValeurs(12.33333, 50);
}
function testRecapitulatif()
{
$this->VerifieValeurs(15, 100);
$this->frigo->Action(50);
$this->VerifieValeurs(12.33333, 50);
$this->frigo->Action(75);
$this->VerifieValeurs(10.5, 75);
$this->frigo->Action('7lib');
$this->VerifieValeurs(10.5, 75);
$this->frigo->Action('Q');
$tab=$this->frigo->resultat();
$this->AssertEqual(4, count($tab));
$this->AssertEqual('t T C', $tab[0]);
$this->AssertEqual('0 15.00000 100', $tab[1]);
$this->AssertEqual('1 12.33333 50', $tab[2]);
$this->AssertEqual('2 10.50000 75', $tab[3]);
}
function testEvolutionTemperature()
{
$this->VerifieValeurs(15, 100);
$this->frigo->Action(100);
$this->VerifieValeurs(14, 100);
$this->frigo->Action(100);
$this->VerifieValeurs(13, 100);
$this->frigo->Action(100);
$this->VerifieValeurs(12, 100);
$this->frigo->Action(100);
$this->VerifieValeurs(11, 100);
$this->frigo->Action(100);
$this->VerifieValeurs(10, 100);
$this->frigo->Action(100);
$this->VerifieValeurs(9.33333, 100);
$this->frigo->Action(100);
$this->VerifieValeurs(9, 100);
}
function testEvolutionCommande()
{
$this->VerifieValeurs(15, 100);
$this->frigo->Action(50);
$this->VerifieValeurs(12.33333, 50);
$this->frigo->Action(50);
$this->VerifieValeurs(9.66667, 50);
$this->frigo->Action(50);
$this->VerifieValeurs(7, 50);
$this->frigo->Action(50);
$this->VerifieValeurs(4.33333, 50);
$this->frigo->Action(75);
$this->VerifieValeurs(2.5, 75);
$this->frigo->Action(75);
$this->VerifieValeurs(1.55556, 75);
$this->frigo->Action(75);
$this->VerifieValeurs(1.5, 75);
}
function testDivision()
{
$this->AssertEqual(3.33333, Round(10/3, 5));
}
}
$test = &new testFrigo('All tests');
$test->run(new HtmlReporter());
?>