ComparisonTest.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * This file is part of the Carbon package.
  5. *
  6. * (c) Brian Nesbitt <brian@nesbot.com>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Tests\CarbonImmutable;
  12. use Carbon\CarbonImmutable as Carbon;
  13. use DateTime;
  14. use Tests\AbstractTestCase;
  15. class ComparisonTest extends AbstractTestCase
  16. {
  17. public function testEqualToTrue()
  18. {
  19. $this->assertTrue(Carbon::createFromDate(2000, 1, 1)->equalTo(Carbon::createFromDate(2000, 1, 1)));
  20. }
  21. public function testEqualToFalse()
  22. {
  23. $this->assertFalse(Carbon::createFromDate(2000, 1, 1)->equalTo(Carbon::createFromDate(2000, 1, 2)));
  24. }
  25. public function testEqualWithTimezoneTrue()
  26. {
  27. $this->assertTrue(Carbon::create(2000, 1, 1, 12, 0, 0, 'America/Toronto')->equalTo(Carbon::create(2000, 1, 1, 9, 0, 0, 'America/Vancouver')));
  28. }
  29. public function testNotEqualToTrue()
  30. {
  31. $this->assertTrue(Carbon::createFromDate(2000, 1, 1)->notEqualTo(Carbon::createFromDate(2000, 1, 2)));
  32. }
  33. public function testNotEqualToFalse()
  34. {
  35. $this->assertFalse(Carbon::createFromDate(2000, 1, 1)->notEqualTo(Carbon::createFromDate(2000, 1, 1)));
  36. }
  37. public function testGreaterThanTrue()
  38. {
  39. $this->assertTrue(Carbon::createFromDate(2000, 1, 1)->greaterThan(Carbon::createFromDate(1999, 12, 31)));
  40. }
  41. public function testGreaterThanFalse()
  42. {
  43. $this->assertFalse(Carbon::createFromDate(2000, 1, 1)->greaterThan(Carbon::createFromDate(2000, 1, 2)));
  44. }
  45. public function testGreaterThanWithTimezoneTrue()
  46. {
  47. $dt1 = Carbon::create(2000, 1, 1, 12, 0, 0, 'America/Toronto');
  48. $dt2 = Carbon::create(2000, 1, 1, 8, 59, 59, 'America/Vancouver');
  49. $this->assertTrue($dt1->greaterThan($dt2));
  50. }
  51. public function testGreaterThanWithTimezoneFalse()
  52. {
  53. $dt1 = Carbon::create(2000, 1, 1, 12, 0, 0, 'America/Toronto');
  54. $dt2 = Carbon::create(2000, 1, 1, 9, 0, 1, 'America/Vancouver');
  55. $this->assertFalse($dt1->greaterThan($dt2));
  56. }
  57. public function testGreaterThanOrEqualTrue()
  58. {
  59. $this->assertTrue(Carbon::createFromDate(2000, 1, 1)->greaterThanOrEqualTo(Carbon::createFromDate(1999, 12, 31)));
  60. }
  61. public function testGreaterThanOrEqualTrueEqual()
  62. {
  63. $this->assertTrue(Carbon::createFromDate(2000, 1, 1)->greaterThanOrEqualTo(Carbon::createFromDate(2000, 1, 1)));
  64. }
  65. public function testGreaterThanOrEqualFalse()
  66. {
  67. $this->assertFalse(Carbon::createFromDate(2000, 1, 1)->greaterThanOrEqualTo(Carbon::createFromDate(2000, 1, 2)));
  68. }
  69. public function testLessThanTrue()
  70. {
  71. $this->assertTrue(Carbon::createFromDate(2000, 1, 1)->lessThan(Carbon::createFromDate(2000, 1, 2)));
  72. }
  73. public function testLessThanFalse()
  74. {
  75. $this->assertFalse(Carbon::createFromDate(2000, 1, 1)->lessThan(Carbon::createFromDate(1999, 12, 31)));
  76. }
  77. public function testLessThanOrEqualTrue()
  78. {
  79. $this->assertTrue(Carbon::createFromDate(2000, 1, 1)->lessThanOrEqualTo(Carbon::createFromDate(2000, 1, 2)));
  80. }
  81. public function testLessThanOrEqualTrueEqual()
  82. {
  83. $this->assertTrue(Carbon::createFromDate(2000, 1, 1)->lessThanOrEqualTo(Carbon::createFromDate(2000, 1, 1)));
  84. }
  85. public function testLessThanOrEqualFalse()
  86. {
  87. $this->assertFalse(Carbon::createFromDate(2000, 1, 1)->lessThanOrEqualTo(Carbon::createFromDate(1999, 12, 31)));
  88. }
  89. public function testBetweenEqualTrue()
  90. {
  91. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->between(Carbon::createFromDate(2000, 1, 1), Carbon::createFromDate(2000, 1, 31), true));
  92. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->isBetween(Carbon::createFromDate(2000, 1, 1), Carbon::createFromDate(2000, 1, 31), true));
  93. $this->assertTrue(\Carbon\Carbon::createFromDate(2000, 1, 15)->between(new DateTime('2000-01-01'), new DateTime('2000-01-31'), true));
  94. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->isBetween(new DateTime('2000-01-01'), new DateTime('2000-01-31'), true));
  95. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->between('2000-01-01', '2000-01-31', true));
  96. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->isBetween('2000-01-01', '2000-01-31', true));
  97. }
  98. public function testBetweenNotEqualTrue()
  99. {
  100. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->between(Carbon::createFromDate(2000, 1, 1), Carbon::createFromDate(2000, 1, 31), false));
  101. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->isBetween(Carbon::createFromDate(2000, 1, 1), Carbon::createFromDate(2000, 1, 31), false));
  102. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->between(new DateTime('2000-01-01'), new DateTime('2000-01-31'), false));
  103. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->isBetween(new DateTime('2000-01-01'), new DateTime('2000-01-31'), false));
  104. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->between('2000-01-01', '2000-01-31', false));
  105. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->isBetween('2000-01-01', '2000-01-31', false));
  106. }
  107. public function testBetweenExcludedTrue()
  108. {
  109. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->betweenExcluded(Carbon::createFromDate(2000, 1, 1), Carbon::createFromDate(2000, 1, 31)));
  110. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->betweenExcluded(new DateTime('2000-01-01'), new DateTime('2000-01-31')));
  111. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->betweenExcluded('2000-01-01', '2000-01-31'));
  112. }
  113. public function testBetweenEqualFalse()
  114. {
  115. $this->assertFalse(Carbon::createFromDate(1999, 12, 31)->between(Carbon::createFromDate(2000, 1, 1), Carbon::createFromDate(2000, 1, 31), true));
  116. }
  117. public function testBetweenNotEqualFalse()
  118. {
  119. $this->assertFalse(Carbon::createFromDate(2000, 1, 1)->between(Carbon::createFromDate(2000, 1, 1), Carbon::createFromDate(2000, 1, 31), false));
  120. }
  121. public function testBetweenEqualSwitchTrue()
  122. {
  123. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->between(Carbon::createFromDate(2000, 1, 31), Carbon::createFromDate(2000, 1, 1), true));
  124. }
  125. public function testBetweenNotEqualSwitchTrue()
  126. {
  127. $this->assertTrue(Carbon::createFromDate(2000, 1, 15)->between(Carbon::createFromDate(2000, 1, 31), Carbon::createFromDate(2000, 1, 1), false));
  128. }
  129. public function testBetweenEqualSwitchFalse()
  130. {
  131. $this->assertFalse(Carbon::createFromDate(1999, 12, 31)->between(Carbon::createFromDate(2000, 1, 31), Carbon::createFromDate(2000, 1, 1), true));
  132. }
  133. public function testBetweenNotEqualSwitchFalse()
  134. {
  135. $this->assertFalse(Carbon::createFromDate(2000, 1, 1)->between(Carbon::createFromDate(2000, 1, 31), Carbon::createFromDate(2000, 1, 1), false));
  136. }
  137. public function testMinIsFluid()
  138. {
  139. $dt = Carbon::now();
  140. $this->assertInstanceOfCarbon($dt->min());
  141. }
  142. public function testMinWithNow()
  143. {
  144. $dt = Carbon::create(2012, 1, 1, 0, 0, 0)->min();
  145. $this->assertCarbon($dt, 2012, 1, 1, 0, 0, 0);
  146. }
  147. public function testMinWithInstance()
  148. {
  149. $dt1 = Carbon::create(2013, 12, 31, 23, 59, 59);
  150. $dt2 = Carbon::create(2012, 1, 1, 0, 0, 0)->min($dt1);
  151. $this->assertCarbon($dt2, 2012, 1, 1, 0, 0, 0);
  152. }
  153. public function testMaxIsFluid()
  154. {
  155. $dt = Carbon::now();
  156. $this->assertInstanceOfCarbon($dt->max());
  157. }
  158. public function testMaxWithNow()
  159. {
  160. $dt = Carbon::create(2099, 12, 31, 23, 59, 59)->max();
  161. $this->assertCarbon($dt, 2099, 12, 31, 23, 59, 59);
  162. }
  163. public function testMaxWithInstance()
  164. {
  165. $dt1 = Carbon::create(2012, 1, 1, 0, 0, 0);
  166. $dt2 = Carbon::create(2099, 12, 31, 23, 59, 59)->max($dt1);
  167. $this->assertCarbon($dt2, 2099, 12, 31, 23, 59, 59);
  168. }
  169. public function testIsBirthday()
  170. {
  171. $dt = Carbon::now();
  172. // Birthday test can't work on February 29th
  173. if ($dt->format('m-d') === '02-29') {
  174. Carbon::setTestNow($dt->subDay());
  175. $dt = Carbon::now();
  176. }
  177. $aBirthday = $dt->subYear();
  178. $this->assertTrue($aBirthday->isBirthday());
  179. $notABirthday = $dt->subDay();
  180. $this->assertFalse($notABirthday->isBirthday());
  181. $alsoNotABirthday = $dt->addDays(2);
  182. $this->assertFalse($alsoNotABirthday->isBirthday());
  183. $dt1 = Carbon::createFromDate(1987, 4, 23);
  184. $dt2 = Carbon::createFromDate(2014, 9, 26);
  185. $dt3 = Carbon::createFromDate(2014, 4, 23);
  186. $this->assertFalse($dt2->isBirthday($dt1));
  187. $this->assertTrue($dt3->isBirthday($dt1));
  188. }
  189. public function testClosest()
  190. {
  191. $instance = Carbon::create(2015, 5, 28, 12, 0, 0);
  192. $dt1 = Carbon::create(2015, 5, 28, 11, 0, 0);
  193. $dt2 = Carbon::create(2015, 5, 28, 14, 0, 0);
  194. $closest = $instance->closest($dt1, $dt2);
  195. $this->assertSame($dt1, $closest);
  196. }
  197. public function testClosestWithEquals()
  198. {
  199. $instance = Carbon::create(2015, 5, 28, 12, 0, 0);
  200. $dt1 = Carbon::create(2015, 5, 28, 12, 0, 0);
  201. $dt2 = Carbon::create(2015, 5, 28, 14, 0, 0);
  202. $closest = $instance->closest($dt1, $dt2);
  203. $this->assertSame($dt1, $closest);
  204. }
  205. public function testClosestWithMicroseconds()
  206. {
  207. $baseDate = Carbon::parse('2018-10-11 20:59:06.500000');
  208. $closestDate = Carbon::parse('2018-10-11 20:59:06.600000');
  209. $farthestDate = Carbon::parse('2018-10-11 20:59:06.300000');
  210. $this->assertSame('06.600000', $baseDate->closest($closestDate, $farthestDate)->format('s.u'));
  211. }
  212. public function testClosestWithFarDates()
  213. {
  214. $baseDate = Carbon::parse('2018-10-11 20:59:06.500000');
  215. $closestDate = Carbon::parse('-4025-10-11 20:59:06.600000');
  216. $farthestDate = Carbon::parse('9995-10-11 20:59:06.300000');
  217. $this->assertSame('06.600000', $baseDate->closest($closestDate, $farthestDate)->format('s.u'));
  218. }
  219. public function testFarthest()
  220. {
  221. $instance = Carbon::create(2015, 5, 28, 12, 0, 0);
  222. $dt1 = Carbon::create(2015, 5, 28, 11, 0, 0);
  223. $dt2 = Carbon::create(2015, 5, 28, 14, 0, 0);
  224. $farthest = $instance->farthest($dt1, $dt2);
  225. $this->assertSame($dt2, $farthest);
  226. }
  227. public function testFarthestWithEquals()
  228. {
  229. $instance = Carbon::create(2015, 5, 28, 12, 0, 0);
  230. $dt1 = Carbon::create(2015, 5, 28, 12, 0, 0);
  231. $dt2 = Carbon::create(2015, 5, 28, 14, 0, 0);
  232. $farthest = $instance->farthest($dt1, $dt2);
  233. $this->assertSame($dt2, $farthest);
  234. }
  235. public function testFarthestWithMicroseconds()
  236. {
  237. $baseDate = Carbon::parse('2018-10-11 20:59:06.500000');
  238. $closestDate = Carbon::parse('2018-10-11 20:59:06.600000');
  239. $farthestDate = Carbon::parse('2018-10-11 20:59:06.300000');
  240. $this->assertSame('06.300000', $baseDate->farthest($closestDate, $farthestDate)->format('s.u'));
  241. }
  242. public function testFarthestWithFarDates()
  243. {
  244. $baseDate = Carbon::parse('2018-10-11 20:59:06.500000');
  245. $closestDate = Carbon::parse('-4025-10-11 20:59:06.600000');
  246. $farthestDate = Carbon::parse('9995-10-11 20:59:06.300000');
  247. $this->assertSame('06.300000', $baseDate->farthest($closestDate, $farthestDate)->format('s.u'));
  248. }
  249. }