NumberLibTest.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <?php
  2. App::uses('NumberLib', 'Tools.Lib');
  3. App::uses('MyCakeTestCase', 'Tools.Lib');
  4. class NumberLibTest extends MyCakeTestCase {
  5. public $NumberLib = null;
  6. public function startTest() {
  7. //$this->NumberLib = new NumberLib();
  8. }
  9. /**
  10. *2011-04-14 lb
  11. */
  12. public function testRoundTo() {
  13. //increment = 10
  14. $values = array(
  15. '22' => 20,
  16. '15' => 20,
  17. '3.4' => 0,
  18. '6' => 10,
  19. '-3.12' => 0,
  20. '-10' => -10
  21. );
  22. foreach ($values as $was => $expected) {
  23. $is = NumberLib::roundTo($was, 10);
  24. $this->assertEquals($is, $expected, null, $was);
  25. }
  26. //increment = 0.1
  27. $values2 = array(
  28. '22' => 22,
  29. '15.234' => 15.2,
  30. '3.4' => 3.4,
  31. '6.131' => 6.1,
  32. '-3.17' => -3.2,
  33. '-10.99' => -11
  34. );
  35. foreach ($values2 as $was => $expected) {
  36. $is = NumberLib::roundTo($was, 0.1);
  37. $this->assertEquals($is, $expected, null, $was);
  38. }
  39. }
  40. /**
  41. *2011-04-14 lb
  42. */
  43. public function testRoundUpTo() {
  44. //increment = 10
  45. $values = array(
  46. '22.765' => 30,
  47. '15.22' => 20,
  48. '3.4' => 10,
  49. '6' => 10,
  50. '-3.12' => 0,
  51. '-10' => -10
  52. );
  53. foreach ($values as $was => $expected) {
  54. $is = NumberLib::roundUpTo($was, 10);
  55. $this->assertEquals($is, $expected, null, $was);
  56. }
  57. //increment = 5
  58. $values = array(
  59. '22' => 25,
  60. '15.234' => 20,
  61. '3.4' => 5,
  62. '6.131' => 10,
  63. '-3.17' => 0,
  64. '-10.99' => -10
  65. );
  66. foreach ($values as $was => $expected) {
  67. $is = NumberLib::roundUpTo($was, 5);
  68. $this->assertEquals($is, $expected, null, $was);
  69. }
  70. }
  71. /**
  72. *2011-04-14 lb
  73. */
  74. public function testRoundDownTo() {
  75. //increment = 10
  76. $values = array(
  77. '22.765' => 20,
  78. '15.22' => 10,
  79. '3.4' => 0,
  80. '6' => 0,
  81. '-3.12' => -10,
  82. '-10' => -10
  83. );
  84. foreach ($values as $was => $expected) {
  85. $is = NumberLib::roundDownTo($was, 10);
  86. $this->assertEquals($is, $expected, null, $was);
  87. }
  88. //increment = 3
  89. $values = array(
  90. '22' => 21,
  91. '15.234' => 15,
  92. '3.4' => 3,
  93. '6.131' => 6,
  94. '-3.17' => -6,
  95. '-10.99' => -12
  96. );
  97. foreach ($values as $was => $expected) {
  98. $is = NumberLib::roundDownTo($was, 3);
  99. $this->assertEquals($is, $expected, null, $was);
  100. }
  101. }
  102. /**
  103. *2011-04-15 lb
  104. */
  105. public function testGetDecimalPlaces() {
  106. $values = array(
  107. '100' => -2,
  108. '0.0001' => 4,
  109. '10' => -1,
  110. '0.1' => 1,
  111. '1' => 0,
  112. '0.001' => 3
  113. );
  114. foreach ($values as $was => $expected) {
  115. $is = NumberLib::getDecimalPlaces($was, 10);
  116. $this->assertEquals($is, $expected, null, $was);
  117. }
  118. }
  119. public function testParseDate() {
  120. echo $this->_header(__FUNCTION__);
  121. $tests = array(
  122. '2010-12-11' => 1292022000,
  123. '2010-01-02' => 1262386800,
  124. '10-01-02' => 1262386800,
  125. '2.1.2010' => 1262386800,
  126. '2.1.10' => 1262386800,
  127. '02.01.10' => 1262386800,
  128. '02.01.2010' => 1262386800,
  129. '02.01.2010 22:11' => 1262386800,
  130. '2010-01-02 22:11' => 1262386800,
  131. );
  132. foreach ($tests as $was => $expected) {
  133. $is = NumberLib::parseDate($was);
  134. //pr($is);
  135. pr(date(FORMAT_NICE_YMDHMS, $is));
  136. $this->assertEquals($is, $expected, null, $was);
  137. }
  138. }
  139. public function testParseTime() {
  140. echo $this->_header(__FUNCTION__);
  141. $tests = array(
  142. '2:4' => 7440,
  143. '2:04' => 7440,
  144. '2' => 7200,
  145. '1,5' => 3600+1800,
  146. '1.5' => 3600+1800,
  147. '1.50' => 3600+1800,
  148. '1.01' => 3660,
  149. ':4' => 240,
  150. ':04' => 240,
  151. ':40' => 40*MINUTE,
  152. '1:2:4' => 1*HOUR+2*MINUTE+4*SECOND,
  153. '01:2:04' => 1*HOUR+2*MINUTE+4*SECOND,
  154. '0:2:04' => 2*MINUTE+4*SECOND,
  155. '::4' => 4*SECOND,
  156. '::04' => 4*SECOND,
  157. '::40' => 40*SECOND,
  158. '2011-11-12 10:10:10' => 10*HOUR+10*MINUTE+10*SECOND,
  159. );
  160. # positive
  161. foreach ($tests as $was => $expected) {
  162. $is = NumberLib::parseTime($was);
  163. //pr($is);
  164. $this->assertEquals($is, $expected, null, $was);
  165. }
  166. unset($tests['2011-11-12 10:10:10']);
  167. # negative
  168. foreach ($tests as $was => $expected) {
  169. $is = NumberLib::parseTime('-'.$was);
  170. //pr($is);
  171. $this->assertEquals($is, -$expected, null, '-'.$was.' ['.$is.' => '.(-$expected).']');
  172. }
  173. }
  174. public function testBuildTime() {
  175. echo $this->_header(__FUNCTION__);
  176. $tests = array(
  177. 7440 => '2:04',
  178. 7220 => '2:00', # 02:00:20 => rounded to 2:00:00
  179. 5400 => '1:30',
  180. 3660 => '1:01',
  181. );
  182. # positive
  183. foreach ($tests as $was => $expected) {
  184. $is = NumberLib::buildTime($was);
  185. pr($is);
  186. $this->assertEquals($is, $expected);
  187. }
  188. # negative
  189. foreach ($tests as $was => $expected) {
  190. $is = NumberLib::buildTime(-$was);
  191. pr($is);
  192. $this->assertEquals($is, '-'.$expected);
  193. }
  194. }
  195. public function testBuildDefaultTime() {
  196. echo $this->_header(__FUNCTION__);
  197. $tests = array(
  198. 7440 => '02:04:00',
  199. 7220 => '02:00:20',
  200. 5400 => '01:30:00',
  201. 3660 => '01:01:00',
  202. 1*HOUR+2*MINUTE+4*SECOND => '01:02:04',
  203. );
  204. foreach ($tests as $was => $expected) {
  205. $is = NumberLib::buildDefaultTime($was);
  206. pr($is);
  207. $this->assertEquals($is, $expected);
  208. }
  209. }
  210. /**
  211. * basic
  212. */
  213. public function testStandardDecimal() {
  214. echo $this->_header(__FUNCTION__);
  215. $value = '9.30';
  216. $is = NumberLib::standardToDecimalTime($value);
  217. $this->assertEquals(round($is, 2), '9.50');
  218. $value = '9.3';
  219. $is = NumberLib::standardToDecimalTime($value);
  220. $this->assertEquals(round($is, 2), '9.50');
  221. }
  222. public function testDecimalStandard() {
  223. echo $this->_header(__FUNCTION__);
  224. $value = '9.50';
  225. $is = NumberLib::decimalToStandardTime($value);
  226. $this->assertEquals(round($is, 2), '9.3');
  227. $value = '9.5';
  228. $is = NumberLib::decimalToStandardTime($value);
  229. pr($is);
  230. $this->assertEquals($is, '9.3');
  231. $is = NumberLib::decimalToStandardTime($value, 2);
  232. pr($is);
  233. $this->assertEquals($is, '9.30');
  234. $is = NumberLib::decimalToStandardTime($value, 2, ':');
  235. pr($is);
  236. $this->assertEquals($is, '9:30');
  237. }
  238. }