Revision: 35559
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 10, 2010 08:23 by gpupo
Initial Code
<?php class financeira { private $value, $original, $info; public function __construct($value = 100) { $this->value = $this->original = $value; $this->info = array('log'=>$value,'operacao' => ''); } private function addLog($x) { $this->info['log'] .= "\n" . $x; } private function addOperacao($x) { $this->info['operacao'] .= $x; $this->addLog($x); } public function getInfo($k = 'operacao') { return $this->info[$k]; } public function setValue($x) { $this->original = $x; $this->resetValue(); return $this; } public function getValue() { $this->addLog('=' . $this->value); return (float) $this->value; } public function resetValue() { $this->value = $this->original; $this->info['operacao'] = ''; $this->info['log'] = ''; return $this; } private function percent($x, $v = NULL) { if(!isset($v)) { $v = $this->value; } $r = ($v * $x) /100; $this->addOperacao('-' . $x . '%'); return $r; } public function addDesconto($x) { $this->value -= $this->percent($x); } /* * Calcula descontos progressivos como 10% + 20% + 5% a partir de um array */ public function addDescontoProgressivo(array $descontos) { foreach($descontos as $desconto) { $this->addDesconto($desconto); } return $this; } public function getDesconto() { return $this->original - $this->value; } public function getAlterador() { return ($this->getDesconto() * 100) / $this->original; } /* * Calcula o numero multiplicador de desconto progressivo como 10% + 20% + 5% a partir de um array */ public function getMultiplicadorDaProgressao(array $descontos) { $this->resetValue(); foreach($descontos as $desconto) { $this->addDesconto($desconto); } return $this->getAlterador(); } } // Teste unitário, salvo no arquivo financeiraTest.php /** * * @author Gilmar Pupo <[email protected]> * * Testa as funcoes da classe financeira */ require_once dirname(__FILE__).'/../bootstrap/unit.php'; $t = new lime_test(25); $v = new financeira(100); $v->addDesconto(10); $t->is( $v->getValue(),90 ,'adicionando 10% de Porcentagem:' . $v->getValue()); $v->addDesconto(10); $t->is( $v->getValue(),81 ,'adicionando 10% de Porcentagem:' . $v->getValue()); $v->resetValue(); $t->is( $v->getValue(),100 ,'reiniciando valores:' . $v->getValue()); $v->addDescontoProgressivo(array(10, 10)); $t->is( $v->getValue(),81 ,'adicionando 10% + 10% de Porcentagem:' . $v->getValue()); $v->resetValue(); $v->addDescontoProgressivo(array(30, 10, 5)); $t->is( $v->getValue(),59.85 ,'adicionando 30% + 10% + 5% de desconto em 100:' . $v->getValue()); $t->diag('Testando métodos compactados'); $v->setValue(80)->addDescontoProgressivo(array(30, 10, 5)); $t->is( $v->getValue(),47.88 ,'adicionando 30% + 10% + 5% de desconto em 80:' . $v->getValue()); $t->is( $v->setValue(50) ->addDescontoProgressivo(array(30, 10, 5)) ->getValue() ,29.925 ,'adicionando 30% + 10% + 5% de desconto em 50:' . $v->getValue()); $t->diag('Obtendo dados informativos'); $t->is( $v->setValue(100) ->addDescontoProgressivo(array(30, 10, 5)) ->getDesconto() ,40.15 ,'acumulado de desconto foi de:' . $v->getDesconto()); $t->is( $v->getAlterador(), 40.15, 'alterador:' . $v->getAlterador()); $t->is( $v->setValue(80) ->addDescontoProgressivo(array(30, 10, 5)) ->getDesconto() ,32.12 ,'acumulado de desconto foi de:' . $v->getDesconto()); $t->is( $v->getAlterador(), 40.15, 'alterador:' . $v->getAlterador()); $t->is( $v->setValue(50) ->addDescontoProgressivo(array(30, 10, 5)) ->getDesconto() ,20.075 ,'acumulado de desconto foi de:' . $v->getDesconto()); $t->is( $v->getAlterador(), 40.15, 'alterador:' . $v->getAlterador()); $t->diag('Definindo multiplicador a partir de um array'); $y = new financeira(); $t->is( $i = $y->getMultiplicadorDaProgressao(array(30, 10, 10)) , 43.3, 'getMultiplicadorDaProgressao:' . $i); $t->isa_ok( $y->getInfo(), 'string', 'operacao:' . $y->getInfo()); //echo $y->getInfo('log') . "\n"; $t->is( $i = $y->getMultiplicadorDaProgressao(array(20, 10, 10)) , 35.2, 'getMultiplicadorDaProgressao:' . $i); $t->isa_ok( $y->getInfo(), 'string', 'operacao:' . $y->getInfo()); //echo $y->getInfo('log') . "\n"; $t->is( $i = $y->getMultiplicadorDaProgressao(array(30, 10, 5)) , 40.15, 'getMultiplicadorDaProgressao:' . $i); $t->isa_ok( $y->getInfo(), 'string', 'operacao:' . $y->getInfo()); //echo $y->getInfo('log') . "\n"; $t->is($r = ((100 * $y->getMultiplicadorDaProgressao(array(30, 10, 5))) /100) , 40.15, $y->getInfo() . ':' . $r); $t->is($r = ((80 * $y->getMultiplicadorDaProgressao(array(30, 10, 5))) /100) , 32.12, $y->getInfo() . ':' . $r); $t->is($r = ((50 * $y->getMultiplicadorDaProgressao(array(30, 10, 5))) /100) , 20.075, $y->getInfo() . ':' . $r); $t->is($r = ((100 * $y->getMultiplicadorDaProgressao(array(30, 7, 5))) /100) , 38.155, $y->getInfo() . ':' . $r); $t->is($r = ((80 * $y->getMultiplicadorDaProgressao(array(30, 8, 5))) /100) , 31.056, $y->getInfo() . ':' . $r); $t->is($r = ((50 * $y->getMultiplicadorDaProgressao(array(20, 9, 20))) /100) , 20.88, $y->getInfo() . ':' . $r);
Initial URL
Initial Description
Uma classe e seu teste unitário
Initial Title
Classe para cálculo de desconto progressivo e teste unitário Symfony
Initial Tags
Initial Language
PHP