1# frozen_string_literal: true 2require 'test/unit' 3require 'date' 4 5class DateSub < Date; end 6class DateTimeSub < DateTime; end 7 8class TestDate < Test::Unit::TestCase 9 10 def test__const 11 assert_nil(Date::MONTHNAMES[0]) 12 assert_equal('January', Date::MONTHNAMES[1]) 13 assert_equal(13, Date::MONTHNAMES.size) 14 assert_equal('Sunday', Date::DAYNAMES[0]) 15 assert_equal(7, Date::DAYNAMES.size) 16 17 assert_nil(Date::ABBR_MONTHNAMES[0]) 18 assert_equal('Jan', Date::ABBR_MONTHNAMES[1]) 19 assert_equal(13, Date::ABBR_MONTHNAMES.size) 20 assert_equal('Sun', Date::ABBR_DAYNAMES[0]) 21 assert_equal(7, Date::ABBR_DAYNAMES.size) 22 23 assert(Date::MONTHNAMES.frozen?) 24 assert(Date::MONTHNAMES[1].frozen?) 25 assert(Date::DAYNAMES.frozen?) 26 assert(Date::DAYNAMES[0].frozen?) 27 28 assert(Date::ABBR_MONTHNAMES.frozen?) 29 assert(Date::ABBR_MONTHNAMES[1].frozen?) 30 assert(Date::ABBR_DAYNAMES.frozen?) 31 assert(Date::ABBR_DAYNAMES[0].frozen?) 32 end 33 34 def test_sub 35 d = DateSub.new 36 dt = DateTimeSub.new 37 38 assert_instance_of(DateSub, d) 39 assert_instance_of(DateTimeSub, dt) 40 41 assert_instance_of(DateSub, DateSub.today) 42 assert_instance_of(DateTimeSub, DateTimeSub.now) 43 44 assert_equal('-4712-01-01', d.to_s) 45 assert_equal('-4712-01-01T00:00:00+00:00', dt.to_s) 46 47 d2 = d + 1 48 assert_instance_of(DateSub, d2) 49 d2 = d - 1 50 assert_instance_of(DateSub, d2) 51 d2 = d >> 1 52 assert_instance_of(DateSub, d2) 53 d2 = d << 1 54 assert_instance_of(DateSub, d2) 55 d2 = d.succ 56 assert_instance_of(DateSub, d2) 57 d2 = d.next 58 assert_instance_of(DateSub, d2) 59 d2 = d.italy 60 assert_instance_of(DateSub, d2) 61 d2 = d.england 62 assert_instance_of(DateSub, d2) 63 d2 = d.julian 64 assert_instance_of(DateSub, d2) 65 d2 = d.gregorian 66 assert_instance_of(DateSub, d2) 67 s = Marshal.dump(d) 68 d2 = Marshal.load(s) 69 assert_equal(d2, d) 70 assert_instance_of(DateSub, d2) 71 72 dt2 = dt + 1 73 assert_instance_of(DateTimeSub, dt2) 74 dt2 = dt - 1 75 assert_instance_of(DateTimeSub, dt2) 76 dt2 = dt >> 1 77 assert_instance_of(DateTimeSub, dt2) 78 dt2 = dt << 1 79 assert_instance_of(DateTimeSub, dt2) 80 dt2 = dt.succ 81 assert_instance_of(DateTimeSub, dt2) 82 dt2 = dt.next 83 assert_instance_of(DateTimeSub, dt2) 84 dt2 = dt.italy 85 assert_instance_of(DateTimeSub, dt2) 86 dt2 = dt.england 87 assert_instance_of(DateTimeSub, dt2) 88 dt2 = dt.julian 89 assert_instance_of(DateTimeSub, dt2) 90 dt2 = dt.gregorian 91 assert_instance_of(DateTimeSub, dt2) 92 s = Marshal.dump(dt) 93 dt2 = Marshal.load(s) 94 assert_equal(dt2, dt) 95 assert_instance_of(DateTimeSub, dt2) 96 end 97 98 def test_eql_p 99 d = Date.jd(0) 100 d2 = Date.jd(0) 101 dt = DateTime.jd(0) 102 dt2 = DateTime.jd(0) 103 104 assert_equal(d, d2) 105 assert_not_equal(d, 0) 106 107 assert_equal(dt, dt2) 108 assert_not_equal(dt, 0) 109 110 assert_equal(d, dt) 111 assert_equal(d2, dt2) 112 end 113 114 def test_hash 115 h = {} 116 h[Date.new(1999,5,23)] = 0 117 h[Date.new(1999,5,24)] = 1 118 h[Date.new(1999,5,25)] = 2 119 h[Date.new(1999,5,25)] = 9 120 assert_equal(3, h.size) 121 assert_equal(9, h[Date.new(1999,5,25)]) 122 assert_equal(9, h[DateTime.new(1999,5,25)]) 123 124 h = {} 125 h[DateTime.new(1999,5,23)] = 0 126 h[DateTime.new(1999,5,24)] = 1 127 h[DateTime.new(1999,5,25)] = 2 128 h[DateTime.new(1999,5,25)] = 9 129 assert_equal(3, h.size) 130 assert_equal(9, h[Date.new(1999,5,25)]) 131 assert_equal(9, h[DateTime.new(1999,5,25)]) 132 133 assert_instance_of(String, Date.new(1999,5,25).hash.to_s) 134 end 135 136 def test_freeze 137 d = Date.new 138 d.freeze 139 assert_equal(true, d.frozen?) 140 assert_instance_of(Integer, d.yday) 141 assert_instance_of(String, d.to_s) 142 end 143 144 def test_submillisecond_comparison 145 d1 = DateTime.new(2013, 12, 6, 0, 0, Rational(1, 10000)) 146 d2 = DateTime.new(2013, 12, 6, 0, 0, Rational(2, 10000)) 147 # d1 is 0.0001s earlier than d2 148 assert_equal(-1, d1 <=> d2) 149 assert_equal(0, d1 <=> d1) 150 assert_equal(1, d2 <=> d1) 151 end 152 153end 154