PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/projects/jruby-1.7.3/test/externals/ruby1.9/date/test_switch_hitter.rb

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Ruby | 577 lines | 496 code | 77 blank | 4 comment | 4 complexity | d26b2d1be9db9cd05fac15e3922f10da MD5 | raw file
  1. require 'test/unit'
  2. require 'date'
  3. class TestSH < Test::Unit::TestCase
  4. def test_new
  5. [Date.new,
  6. Date.civil,
  7. DateTime.new,
  8. DateTime.civil
  9. ].each do |d|
  10. assert_equal([-4712, 1, 1], [d.year, d.mon, d.mday])
  11. end
  12. [Date.new(2001),
  13. Date.civil(2001),
  14. DateTime.new(2001),
  15. DateTime.civil(2001)
  16. ].each do |d|
  17. assert_equal([2001, 1, 1], [d.year, d.mon, d.mday])
  18. end
  19. d = Date.new(2001, 2, 3)
  20. assert_equal([2001, 2, 3], [d.year, d.mon, d.mday])
  21. d = Date.new(2001, 2, Rational('3.5'))
  22. assert_equal([2001, 2, 3], [d.year, d.mon, d.mday])
  23. d = Date.new(2001,2, 3, Date::JULIAN)
  24. assert_equal([2001, 2, 3], [d.year, d.mon, d.mday])
  25. d = Date.new(2001,2, 3, Date::GREGORIAN)
  26. assert_equal([2001, 2, 3], [d.year, d.mon, d.mday])
  27. d = Date.new(2001,-12, -31)
  28. assert_equal([2001, 1, 1], [d.year, d.mon, d.mday])
  29. d = Date.new(2001,-12, -31, Date::JULIAN)
  30. assert_equal([2001, 1, 1], [d.year, d.mon, d.mday])
  31. d = Date.new(2001,-12, -31, Date::GREGORIAN)
  32. assert_equal([2001, 1, 1], [d.year, d.mon, d.mday])
  33. d = DateTime.new(2001, 2, 3, 4, 5, 6)
  34. assert_equal([2001, 2, 3, 4, 5, 6, 0],
  35. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  36. d = DateTime.new(2001, 2, 3, 4, 5, 6, 0)
  37. assert_equal([2001, 2, 3, 4, 5, 6, 0],
  38. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  39. d = DateTime.new(2001, 2, 3, 4, 5, 6, Rational(9,24))
  40. assert_equal([2001, 2, 3, 4, 5, 6, Rational(9,24)],
  41. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  42. d = DateTime.new(2001, 2, 3, 4, 5, 6, 0.375)
  43. assert_equal([2001, 2, 3, 4, 5, 6, Rational(9,24)],
  44. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  45. d = DateTime.new(2001, 2, 3, 4, 5, 6, '+09:00')
  46. assert_equal([2001, 2, 3, 4, 5, 6, Rational(9,24)],
  47. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  48. d = DateTime.new(2001, 2, 3, 4, 5, 6, '-09:00')
  49. assert_equal([2001, 2, 3, 4, 5, 6, Rational(-9,24)],
  50. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  51. d = DateTime.new(2001, -12, -31, -4, -5, -6, '-09:00')
  52. assert_equal([2001, 1, 1, 20, 55, 54, Rational(-9,24)],
  53. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  54. d = DateTime.new(2001, -12, -31, -4, -5, -6, '-09:00', Date::JULIAN)
  55. assert_equal([2001, 1, 1, 20, 55, 54, Rational(-9,24)],
  56. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  57. d = DateTime.new(2001, -12, -31, -4, -5, -6, '-09:00', Date::GREGORIAN)
  58. assert_equal([2001, 1, 1, 20, 55, 54, Rational(-9,24)],
  59. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  60. end
  61. def test_jd
  62. d = Date.jd
  63. assert_equal([-4712, 1, 1], [d.year, d.mon, d.mday])
  64. d = Date.jd(0)
  65. assert_equal([-4712, 1, 1], [d.year, d.mon, d.mday])
  66. d = Date.jd(2451944)
  67. assert_equal([2001, 2, 3], [d.year, d.mon, d.mday])
  68. d = DateTime.jd
  69. assert_equal([-4712, 1, 1, 0, 0, 0, 0],
  70. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  71. d = DateTime.jd(0)
  72. assert_equal([-4712, 1, 1, 0, 0, 0, 0],
  73. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  74. d = DateTime.jd(2451944)
  75. assert_equal([2001, 2, 3, 0, 0, 0, 0],
  76. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  77. d = DateTime.jd(2451944, 4, 5, 6)
  78. assert_equal([2001, 2, 3, 4, 5, 6, 0],
  79. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  80. d = DateTime.jd(2451944, 4, 5, 6, 0)
  81. assert_equal([2001, 2, 3, 4, 5, 6, 0],
  82. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  83. d = DateTime.jd(2451944, 4, 5, 6, '+9:00')
  84. assert_equal([2001, 2, 3, 4, 5, 6, Rational(9, 24)],
  85. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  86. d = DateTime.jd(2451944, -4, -5, -6, '-9:00')
  87. assert_equal([2001, 2, 3, 20, 55, 54, Rational(-9, 24)],
  88. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  89. end
  90. def test_ordinal
  91. d = Date.ordinal
  92. assert_equal([-4712, 1], [d.year, d.yday])
  93. d = Date.ordinal(-4712, 1)
  94. assert_equal([-4712, 1], [d.year, d.yday])
  95. d = Date.ordinal(2001, 2)
  96. assert_equal([2001, 2], [d.year, d.yday])
  97. d = Date.ordinal(2001, 2, Date::JULIAN)
  98. assert_equal([2001, 2], [d.year, d.yday])
  99. d = Date.ordinal(2001, 2, Date::GREGORIAN)
  100. assert_equal([2001, 2], [d.year, d.yday])
  101. d = Date.ordinal(2001, -2, Date::JULIAN)
  102. assert_equal([2001, 364], [d.year, d.yday])
  103. d = Date.ordinal(2001, -2, Date::GREGORIAN)
  104. assert_equal([2001, 364], [d.year, d.yday])
  105. d = DateTime.ordinal
  106. assert_equal([-4712, 1, 1, 0, 0, 0, 0],
  107. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  108. d = DateTime.ordinal(-4712, 1)
  109. assert_equal([-4712, 1, 1, 0, 0, 0, 0],
  110. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  111. d = DateTime.ordinal(2001, 34)
  112. assert_equal([2001, 2, 3, 0, 0, 0, 0],
  113. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  114. d = DateTime.ordinal(2001, 34, 4, 5, 6)
  115. assert_equal([2001, 2, 3, 4, 5, 6, 0],
  116. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  117. d = DateTime.ordinal(2001, 34, 4, 5, 6, 0)
  118. assert_equal([2001, 2, 3, 4, 5, 6, 0],
  119. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  120. d = DateTime.ordinal(2001, 34, 4, 5, 6, '+9:00')
  121. assert_equal([2001, 2, 3, 4, 5, 6, Rational(9, 24)],
  122. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  123. d = DateTime.ordinal(2001, 34, -4, -5, -6, '-9:00')
  124. assert_equal([2001, 2, 3, 20, 55, 54, Rational(-9, 24)],
  125. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  126. end
  127. def test_commercial
  128. d = Date.commercial
  129. assert_equal([-4712, 1, 1], [d.cwyear, d.cweek, d.cwday])
  130. d = Date.commercial(-4712, 1, 1)
  131. assert_equal([-4712, 1, 1], [d.cwyear, d.cweek, d.cwday])
  132. d = Date.commercial(2001, 2, 3)
  133. assert_equal([2001, 2, 3], [d.cwyear, d.cweek, d.cwday])
  134. d = Date.commercial(2001, 2, 3, Date::JULIAN)
  135. assert_equal([2001, 2, 3], [d.cwyear, d.cweek, d.cwday])
  136. d = Date.commercial(2001, 2, 3, Date::GREGORIAN)
  137. assert_equal([2001, 2, 3], [d.cwyear, d.cweek, d.cwday])
  138. d = Date.commercial(2001, -2, -3)
  139. assert_equal([2001, 51, 5], [d.cwyear, d.cweek, d.cwday])
  140. d = Date.commercial(2001, -2, -3, Date::JULIAN)
  141. assert_equal([2001, 51, 5], [d.cwyear, d.cweek, d.cwday])
  142. d = Date.commercial(2001, -2, -3, Date::GREGORIAN)
  143. assert_equal([2001, 51, 5], [d.cwyear, d.cweek, d.cwday])
  144. d = DateTime.commercial
  145. assert_equal([-4712, 1, 1, 0, 0, 0, 0],
  146. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  147. d = DateTime.commercial(-4712, 1, 1)
  148. assert_equal([-4712, 1, 1, 0, 0, 0, 0],
  149. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  150. d = DateTime.commercial(2001, 5, 6)
  151. assert_equal([2001, 2, 3, 0, 0, 0, 0],
  152. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  153. d = DateTime.commercial(2001, 5, 6, 4, 5, 6)
  154. assert_equal([2001, 2, 3, 4, 5, 6, 0],
  155. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  156. d = DateTime.commercial(2001, 5, 6, 4, 5, 6, 0)
  157. assert_equal([2001, 2, 3, 4, 5, 6, 0],
  158. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  159. d = DateTime.commercial(2001, 5, 6, 4, 5, 6, '+9:00')
  160. assert_equal([2001, 2, 3, 4, 5, 6, Rational(9, 24)],
  161. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  162. d = DateTime.commercial(2001, 5, 6, -4, -5, -6, '-9:00')
  163. assert_equal([2001, 2, 3, 20, 55, 54, Rational(-9, 24)],
  164. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  165. end
  166. def test_fractional
  167. d = Date.jd(2451944.0)
  168. assert_equal(2451944, d.jd)
  169. d = Date.jd(Rational(2451944))
  170. assert_equal(2451944, d.jd)
  171. d = Date.jd(2451944.5)
  172. assert_equal([2451944, 12], [d.jd, d.send('hour')])
  173. d = Date.jd(Rational('2451944.5'))
  174. assert_equal([2451944, 12], [d.jd, d.send('hour')])
  175. d = Date.civil(2001, 2, 3.0)
  176. assert_equal([2001, 2, 3], [d.year, d.mon, d.mday])
  177. d = Date.civil(2001, 2, Rational(3))
  178. assert_equal([2001, 2, 3], [d.year, d.mon, d.mday])
  179. d = Date.civil(2001, 2, 3.5)
  180. assert_equal([2001, 2, 3, 12], [d.year, d.mon, d.mday, d.send('hour')])
  181. d = Date.civil(2001, 2, Rational('3.5'))
  182. assert_equal([2001, 2, 3, 12], [d.year, d.mon, d.mday, d.send('hour')])
  183. d = Date.ordinal(2001, 2.0)
  184. assert_equal([2001, 2], [d.year, d.yday])
  185. d = Date.ordinal(2001, Rational(2))
  186. assert_equal([2001, 2], [d.year, d.yday])
  187. d = Date.commercial(2001, 2, 3.0)
  188. assert_equal([2001, 2, 3], [d.cwyear, d.cweek, d.cwday])
  189. d = Date.commercial(2001, 2, Rational(3))
  190. assert_equal([2001, 2, 3], [d.cwyear, d.cweek, d.cwday])
  191. d = DateTime.jd(2451944.0)
  192. assert_equal(2451944, d.jd)
  193. d = DateTime.jd(Rational(2451944))
  194. assert_equal(2451944, d.jd)
  195. d = DateTime.jd(2451944.5)
  196. assert_equal([2451944, 12], [d.jd, d.hour])
  197. d = DateTime.jd(Rational('2451944.5'))
  198. assert_equal([2451944, 12], [d.jd, d.hour])
  199. d = DateTime.civil(2001, 2, 3.0)
  200. assert_equal([2001, 2, 3], [d.year, d.mon, d.mday])
  201. d = DateTime.civil(2001, 2, Rational(3))
  202. assert_equal([2001, 2, 3], [d.year, d.mon, d.mday])
  203. d = DateTime.civil(2001, 2, 3.5)
  204. assert_equal([2001, 2, 3, 12], [d.year, d.mon, d.mday, d.hour])
  205. d = DateTime.civil(2001, 2, Rational('3.5'))
  206. assert_equal([2001, 2, 3, 12], [d.year, d.mon, d.mday, d.hour])
  207. d = DateTime.civil(2001, 2, 3, 4.5)
  208. assert_equal([2001, 2, 3, 4, 30], [d.year, d.mon, d.mday, d.hour, d.min])
  209. d = DateTime.civil(2001, 2, 3, Rational('4.5'))
  210. assert_equal([2001, 2, 3, 4, 30], [d.year, d.mon, d.mday, d.hour, d.min])
  211. d = DateTime.civil(2001, 2, 3, 4, 5.5)
  212. assert_equal([2001, 2, 3, 4, 5, 30],
  213. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  214. d = DateTime.civil(2001, 2, 3, 4, Rational('5.5'))
  215. assert_equal([2001, 2, 3, 4, 5, 30],
  216. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  217. d = DateTime.ordinal(2001, 2.0)
  218. assert_equal([2001, 2], [d.year, d.yday])
  219. d = DateTime.ordinal(2001, Rational(2))
  220. assert_equal([2001, 2], [d.year, d.yday])
  221. d = DateTime.commercial(2001, 2, 3.0)
  222. assert_equal([2001, 2, 3], [d.cwyear, d.cweek, d.cwday])
  223. d = DateTime.commercial(2001, 2, Rational(3))
  224. assert_equal([2001, 2, 3], [d.cwyear, d.cweek, d.cwday])
  225. end
  226. def test_canon24oc
  227. d = DateTime.jd(2451943,24)
  228. assert_equal([2001, 2, 3, 0, 0, 0, 0],
  229. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  230. d = DateTime.ordinal(2001,33,24)
  231. assert_equal([2001, 2, 3, 0, 0, 0, 0],
  232. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  233. d = DateTime.new(2001,2,2,24)
  234. assert_equal([2001, 2, 3, 0, 0, 0, 0],
  235. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  236. d = DateTime.commercial(2001,5,5,24)
  237. assert_equal([2001, 2, 3, 0, 0, 0, 0],
  238. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.offset])
  239. end
  240. def test_zone
  241. d = Date.new(2001, 2, 3)
  242. assert_equal(Encoding::US_ASCII, d.send(:zone).encoding)
  243. d = DateTime.new(2001, 2, 3)
  244. assert_equal(Encoding::US_ASCII, d.send(:zone).encoding)
  245. end
  246. def test_to_s
  247. d = Date.new(2001, 2, 3)
  248. assert_equal(Encoding::US_ASCII, d.to_s.encoding)
  249. assert_equal(Encoding::US_ASCII, d.strftime.encoding)
  250. d = DateTime.new(2001, 2, 3)
  251. assert_equal(Encoding::US_ASCII, d.to_s.encoding)
  252. assert_equal(Encoding::US_ASCII, d.strftime.encoding)
  253. end
  254. def test_inspect
  255. d = Date.new(2001, 2, 3)
  256. assert_equal(Encoding::US_ASCII, d.inspect.encoding)
  257. d = DateTime.new(2001, 2, 3)
  258. assert_equal(Encoding::US_ASCII, d.inspect.encoding)
  259. end
  260. def test_strftime
  261. assert_raise(Errno::ERANGE) do
  262. Date.today.strftime('%100000z')
  263. end
  264. assert_raise(Errno::ERANGE) do
  265. Date.new(1 << 10000).strftime('%Y')
  266. end
  267. end
  268. def test_cmp
  269. assert_equal(-1, Date.new(2001,2,3) <=> Date.new(2001,2,4))
  270. assert_equal(0, Date.new(2001,2,3) <=> Date.new(2001,2,3))
  271. assert_equal(1, Date.new(2001,2,3) <=> Date.new(2001,2,2))
  272. assert_equal(-1, Date.new(2001,2,3) <=> 2451944.0)
  273. assert_equal(-1, Date.new(2001,2,3) <=> 2451944)
  274. assert_equal(0, Date.new(2001,2,3) <=> 2451943.5)
  275. assert_equal(1, Date.new(2001,2,3) <=> 2451943.0)
  276. assert_equal(1, Date.new(2001,2,3) <=> 2451943)
  277. assert_equal(-1, Date.new(2001,2,3) <=> Rational('4903888/2'))
  278. assert_equal(0, Date.new(2001,2,3) <=> Rational('4903887/2'))
  279. assert_equal(1, Date.new(2001,2,3) <=> Rational('4903886/2'))
  280. end
  281. def test_eqeqeq
  282. assert_equal(false, Date.new(2001,2,3) === Date.new(2001,2,4))
  283. assert_equal(true, Date.new(2001,2,3) === Date.new(2001,2,3))
  284. assert_equal(false, Date.new(2001,2,3) === Date.new(2001,2,2))
  285. assert_equal(true, Date.new(2001,2,3) === 2451944.0)
  286. assert_equal(true, Date.new(2001,2,3) === 2451944)
  287. assert_equal(false, Date.new(2001,2,3) === 2451943.5)
  288. assert_equal(false, Date.new(2001,2,3) === 2451943.0)
  289. assert_equal(false, Date.new(2001,2,3) === 2451943)
  290. assert_equal(true, Date.new(2001,2,3) === Rational('4903888/2'))
  291. assert_equal(false, Date.new(2001,2,3) === Rational('4903887/2'))
  292. assert_equal(false, Date.new(2001,2,3) === Rational('4903886/2'))
  293. end
  294. def test_period
  295. # -5000
  296. d = Date.new(-5000,1,1)
  297. assert_equal([-5000, 1, 1, 5], [d.year, d.mon, d.mday, d.wday])
  298. d2 = d.gregorian
  299. assert_equal([-5001, 11, 22, 5], [d2.year, d2.mon, d2.mday, d.wday])
  300. d = Date.new(-5000,1,1,Date::JULIAN)
  301. assert_equal([-5000, 1, 1, 5], [d.year, d.mon, d.mday, d.wday])
  302. d2 = d.gregorian
  303. assert_equal([-5001, 11, 22, 5], [d2.year, d2.mon, d2.mday, d.wday])
  304. d = Date.new(-5000,1,1,Date::GREGORIAN)
  305. assert_equal([-5000, 1, 1, 3], [d.year, d.mon, d.mday, d.wday])
  306. d2 = d.julian
  307. assert_equal([-5000, 2, 10, 3], [d2.year, d2.mon, d2.mday, d.wday])
  308. d = Date.jd(-105192)
  309. assert_equal([-5000, 1, 1, 5], [d.year, d.mon, d.mday, d.wday])
  310. d2 = d.gregorian
  311. assert_equal([-5001, 11, 22, 5], [d2.year, d2.mon, d2.mday, d.wday])
  312. d = Date.jd(-105192,Date::JULIAN)
  313. assert_equal([-5000, 1, 1, 5], [d.year, d.mon, d.mday, d.wday])
  314. d2 = d.gregorian
  315. assert_equal([-5001, 11, 22, 5], [d2.year, d2.mon, d2.mday, d.wday])
  316. d = Date.jd(-105152,Date::GREGORIAN)
  317. assert_equal([-5000, 1, 1, 3], [d.year, d.mon, d.mday, d.wday])
  318. d2 = d.julian
  319. assert_equal([-5000, 2, 10, 3], [d2.year, d2.mon, d2.mday, d.wday])
  320. # -5000000
  321. d = Date.new(-5_000_000,1,1)
  322. assert_equal([-5_000_000, 1, 1, 3], [d.year, d.mon, d.mday, d.wday])
  323. d2 = d.gregorian
  324. assert_equal([-5_000_103, 4, 28, 3], [d2.year, d2.mon, d2.mday, d.wday])
  325. d = Date.new(-5_000_000,1,1,Date::JULIAN)
  326. assert_equal([-5_000_000, 1, 1, 3], [d.year, d.mon, d.mday, d.wday])
  327. d2 = d.gregorian
  328. assert_equal([-5_000_103, 4, 28, 3], [d2.year, d2.mon, d2.mday, d.wday])
  329. d = Date.new(-5_000_000,1,1,Date::GREGORIAN)
  330. assert_equal([-5_000_000, 1, 1, 6], [d.year, d.mon, d.mday, d.wday])
  331. d2 = d.julian
  332. assert_equal([-4_999_898, 9, 4, 6], [d2.year, d2.mon, d2.mday, d.wday])
  333. d = Date.jd(-1824528942)
  334. assert_equal([-5_000_000, 1, 1, 3], [d.year, d.mon, d.mday, d.wday])
  335. d2 = d.gregorian
  336. assert_equal([-5_000_103, 4, 28, 3], [d2.year, d2.mon, d2.mday, d.wday])
  337. d = Date.jd(-1824528942,Date::JULIAN)
  338. assert_equal([-5_000_000, 1, 1, 3], [d.year, d.mon, d.mday, d.wday])
  339. d2 = d.gregorian
  340. assert_equal([-5_000_103, 4, 28, 3], [d2.year, d2.mon, d2.mday, d.wday])
  341. d = Date.jd(-1824491440,Date::GREGORIAN)
  342. assert_equal([-5_000_000, 1, 1, 6], [d.year, d.mon, d.mday, d.wday])
  343. d2 = d.julian
  344. assert_equal([-4_999_898, 9, 4, 6], [d2.year, d2.mon, d2.mday, d.wday])
  345. # 5000000
  346. d = Date.new(5_000_000,1,1)
  347. assert_equal([5_000_000, 1, 1, 6], [d.year, d.mon, d.mday, d.wday])
  348. d2 = d.julian
  349. assert_equal([4_999_897, 5, 3, 6], [d2.year, d2.mon, d2.mday, d.wday])
  350. d = Date.new(5_000_000,1,1,Date::JULIAN)
  351. assert_equal([5_000_000, 1, 1, 5], [d.year, d.mon, d.mday, d.wday])
  352. d2 = d.gregorian
  353. assert_equal([5_000_102, 9, 1, 5], [d2.year, d2.mon, d2.mday, d.wday])
  354. d = Date.new(5_000_000,1,1,Date::GREGORIAN)
  355. assert_equal([5_000_000, 1, 1, 6], [d.year, d.mon, d.mday, d.wday])
  356. d2 = d.julian
  357. assert_equal([4_999_897, 5, 3, 6], [d2.year, d2.mon, d2.mday, d.wday])
  358. d = Date.jd(1827933560)
  359. assert_equal([5_000_000, 1, 1, 6], [d.year, d.mon, d.mday, d.wday])
  360. d2 = d.julian
  361. assert_equal([4_999_897, 5, 3, 6], [d2.year, d2.mon, d2.mday, d.wday])
  362. d = Date.jd(1827971058,Date::JULIAN)
  363. assert_equal([5_000_000, 1, 1, 5], [d.year, d.mon, d.mday, d.wday])
  364. d2 = d.gregorian
  365. assert_equal([5_000_102, 9, 1, 5], [d2.year, d2.mon, d2.mday, d.wday])
  366. d = Date.jd(1827933560,Date::GREGORIAN)
  367. assert_equal([5_000_000, 1, 1, 6], [d.year, d.mon, d.mday, d.wday])
  368. d2 = d.julian
  369. assert_equal([4_999_897, 5, 3, 6], [d2.year, d2.mon, d2.mday, d.wday])
  370. # dt
  371. d = DateTime.new(-123456789,2,3,4,5,6,0)
  372. assert_equal([-123456789, 2, 3, 4, 5, 6, 1],
  373. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.wday])
  374. d2 = d.gregorian
  375. assert_equal([-123459325, 12, 27, 4, 5, 6, 1],
  376. [d2.year, d2.mon, d2.mday, d2.hour, d2.min, d2.sec, d.wday])
  377. d = DateTime.new(123456789,2,3,4,5,6,0)
  378. assert_equal([123456789, 2, 3, 4, 5, 6, 5],
  379. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.wday])
  380. d2 = d.julian
  381. assert_equal([123454254, 1, 19, 4, 5, 6, 5],
  382. [d2.year, d2.mon, d2.mday, d2.hour, d2.min, d2.sec, d.wday])
  383. end
  384. def period2_iter2(from, to, sg)
  385. (from..to).each do |j|
  386. d = Date.jd(j, sg)
  387. d2 = Date.new(d.year, d.mon, d.mday, sg)
  388. assert_equal(d2.jd, j)
  389. assert_equal(d2.ajd, d.ajd)
  390. assert_equal(d2.year, d.year)
  391. d = DateTime.jd(j, 12,0,0, '+12:00', sg)
  392. d2 = DateTime.new(d.year, d.mon, d.mday,
  393. d.hour, d.min, d.sec, d.offset, sg)
  394. assert_equal(d2.jd, j)
  395. assert_equal(d2.ajd, d.ajd)
  396. assert_equal(d2.year, d.year)
  397. end
  398. end
  399. def period2_iter(from, to)
  400. period2_iter2(from, to, Date::GREGORIAN)
  401. period2_iter2(from, to, Date::ITALY)
  402. period2_iter2(from, to, Date::ENGLAND)
  403. period2_iter2(from, to, Date::JULIAN)
  404. end
  405. def test_period2
  406. cm_period0 = 71149239
  407. cm_period = 0xfffffff.div(cm_period0) * cm_period0
  408. period2_iter(-cm_period * (1 << 64) - 3, -cm_period * (1 << 64) + 3)
  409. period2_iter(-cm_period - 3, -cm_period + 3)
  410. period2_iter(0 - 3, 0 + 3)
  411. period2_iter(+cm_period - 3, +cm_period + 3)
  412. period2_iter(+cm_period * (1 << 64) - 3, +cm_period * (1 << 64) + 3)
  413. end
  414. def test_marshal
  415. s = "\x04\bU:\tDate[\bU:\rRational[\ai\x03\xCF\xD3Ji\ai\x00o:\x13Date::Infinity\x06:\a@di\xFA"
  416. d = Marshal.load(s)
  417. assert_equal(Rational(4903887,2), d.ajd)
  418. assert_equal(Rational(0,24), d.send(:offset))
  419. assert_equal(Date::GREGORIAN, d.start)
  420. s = "\x04\bU:\rDateTime[\bU:\rRational[\al+\b\xC9\xB0\x81\xBD\x02\x00i\x02\xC0\x12U;\x06[\ai\bi\ro:\x13Date::Infinity\x06:\a@di\xFA"
  421. d = Marshal.load(s)
  422. assert_equal(Rational(11769327817,4800), d.ajd)
  423. assert_equal(Rational(9,24), d.offset)
  424. assert_equal(Date::GREGORIAN, d.start)
  425. end
  426. def test_taint
  427. h = Date._strptime('15:43+09:00', '%R%z')
  428. assert_equal(false, h[:zone].tainted?)
  429. h = Date._strptime('15:43+09:00'.taint, '%R%z')
  430. assert_equal(true, h[:zone].tainted?)
  431. h = Date._strptime('1;1/0', '%d')
  432. assert_equal(false, h[:leftover].tainted?)
  433. h = Date._strptime('1;1/0'.taint, '%d')
  434. assert_equal(true, h[:leftover].tainted?)
  435. h = Date._parse('15:43+09:00')
  436. assert_equal(false, h[:zone].tainted?)
  437. h = Date._parse('15:43+09:00'.taint)
  438. assert_equal(true, h[:zone].tainted?)
  439. s = Date.today.strftime('new 105')
  440. assert_equal(false, s.tainted?)
  441. s = Date.today.strftime('new 105'.taint)
  442. assert_equal(true, s.tainted?)
  443. s = Date.today.strftime("new \000 105".taint)
  444. assert_equal(true, s.tainted?)
  445. s = DateTime.now.strftime('super $record')
  446. assert_equal(false, s.tainted?)
  447. s = DateTime.now.strftime('super $record'.taint)
  448. assert_equal(true, s.tainted?)
  449. end
  450. def test_enc
  451. Date::MONTHNAMES.each do |s|
  452. assert_equal(Encoding::US_ASCII, s.encoding) if s
  453. end
  454. Date::DAYNAMES.each do |s|
  455. assert_equal(Encoding::US_ASCII, s.encoding) if s
  456. end
  457. Date::ABBR_MONTHNAMES.each do |s|
  458. assert_equal(Encoding::US_ASCII, s.encoding) if s
  459. end
  460. Date::ABBR_DAYNAMES.each do |s|
  461. assert_equal(Encoding::US_ASCII, s.encoding) if s
  462. end
  463. h = Date._strptime('15:43+09:00'.force_encoding('euc-jp'), '%R%z')
  464. assert_equal(Encoding::EUC_JP, h[:zone].encoding)
  465. h = Date._strptime('15:43+09:00'.force_encoding('ascii-8bit'), '%R%z')
  466. assert_equal(Encoding::ASCII_8BIT, h[:zone].encoding)
  467. h = Date._strptime('1;1/0'.force_encoding('euc-jp'), '%d')
  468. assert_equal(Encoding::EUC_JP, h[:leftover].encoding)
  469. h = Date._strptime('1;1/0'.force_encoding('ascii-8bit'), '%d')
  470. assert_equal(Encoding::ASCII_8BIT, h[:leftover].encoding)
  471. h = Date._parse('15:43+09:00'.force_encoding('euc-jp'))
  472. assert_equal(Encoding::EUC_JP, h[:zone].encoding)
  473. h = Date._parse('15:43+09:00'.force_encoding('ascii-8bit'))
  474. assert_equal(Encoding::ASCII_8BIT, h[:zone].encoding)
  475. s = Date.today.strftime('new 105'.force_encoding('euc-jp'))
  476. assert_equal(Encoding::EUC_JP, s.encoding)
  477. s = Date.today.strftime('new 105'.force_encoding('ascii-8bit'))
  478. assert_equal(Encoding::ASCII_8BIT, s.encoding)
  479. s = DateTime.now.strftime('super $record'.force_encoding('euc-jp'))
  480. assert_equal(Encoding::EUC_JP, s.encoding)
  481. s = DateTime.now.strftime('super $record'.force_encoding('ascii-8bit'))
  482. assert_equal(Encoding::ASCII_8BIT, s.encoding)
  483. end
  484. def test_dup
  485. d = Date.new(2001,2,3)
  486. d2 = d.dup
  487. assert_not_equal(d.object_id, d2.object_id)
  488. assert_kind_of(Date, d2)
  489. assert_equal(d, d2)
  490. d = DateTime.new(2001,2,3)
  491. d2 = d.dup
  492. assert_not_equal(d.object_id, d2.object_id)
  493. assert_kind_of(DateTime, d2)
  494. assert_equal(d, d2)
  495. end
  496. def test_base
  497. skip unless defined?(Date.test_all)
  498. assert_equal(true, Date.test_all)
  499. end
  500. end