runt19 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/History.txt +153 -0
  4. data/LICENSE +22 -0
  5. data/LICENSE.txt +44 -0
  6. data/Manifest.txt +112 -0
  7. data/README.md +29 -0
  8. data/README.txt +106 -0
  9. data/Rakefile +2 -0
  10. data/TODO +13 -0
  11. data/examples/payment_report.rb +59 -0
  12. data/examples/payment_reporttest.rb +49 -0
  13. data/examples/reminder.rb +63 -0
  14. data/examples/schedule_tutorial.rb +59 -0
  15. data/examples/schedule_tutorialtest.rb +52 -0
  16. data/lib/runt.rb +249 -0
  17. data/lib/runt/daterange.rb +74 -0
  18. data/lib/runt/dprecision.rb +150 -0
  19. data/lib/runt/expressionbuilder.rb +65 -0
  20. data/lib/runt/pdate.rb +165 -0
  21. data/lib/runt/schedule.rb +88 -0
  22. data/lib/runt/sugar.rb +171 -0
  23. data/lib/runt/temporalexpression.rb +795 -0
  24. data/lib/runt/version.rb +3 -0
  25. data/lib/runt19.rb +1 -0
  26. data/runt19.gemspec +17 -0
  27. data/setup.rb +1331 -0
  28. data/site/blue-robot3.css +132 -0
  29. data/site/dcl-small.gif +0 -0
  30. data/site/index.html +72 -0
  31. data/site/logohover.png +0 -0
  32. data/site/runt-logo.gif +0 -0
  33. data/site/runt-logo.psd +0 -0
  34. data/test/aftertetest.rb +31 -0
  35. data/test/baseexpressiontest.rb +110 -0
  36. data/test/beforetetest.rb +31 -0
  37. data/test/collectiontest.rb +63 -0
  38. data/test/combinedexpressionstest.rb +158 -0
  39. data/test/daterangetest.rb +89 -0
  40. data/test/dayintervaltetest.rb +37 -0
  41. data/test/difftest.rb +37 -0
  42. data/test/dimonthtest.rb +59 -0
  43. data/test/diweektest.rb +32 -0
  44. data/test/dprecisiontest.rb +58 -0
  45. data/test/everytetest.rb +36 -0
  46. data/test/expressionbuildertest.rb +64 -0
  47. data/test/icalendartest.rb +1104 -0
  48. data/test/intersecttest.rb +34 -0
  49. data/test/pdatetest.rb +147 -0
  50. data/test/redaytest.rb +40 -0
  51. data/test/remonthtest.rb +37 -0
  52. data/test/reweektest.rb +51 -0
  53. data/test/reyeartest.rb +99 -0
  54. data/test/rspectest.rb +25 -0
  55. data/test/runttest.rb +98 -0
  56. data/test/scheduletest.rb +148 -0
  57. data/test/spectest.rb +36 -0
  58. data/test/sugartest.rb +104 -0
  59. data/test/temporalexpressiontest.rb +76 -0
  60. data/test/uniontest.rb +36 -0
  61. data/test/wimonthtest.rb +54 -0
  62. data/test/yeartetest.rb +22 -0
  63. metadata +137 -0
@@ -0,0 +1,158 @@
1
+
2
+ #!/usr/bin/env ruby
3
+
4
+ require 'baseexpressiontest'
5
+
6
+ # Unit tests for composite temporal expressions
7
+ # Author:: Matthew Lipper
8
+
9
+ class CombinedExpressionTest < BaseExpressionTest
10
+
11
+ def test_dates_on_last_fri_or_first_tues
12
+ date_range = @date_20050101..@date_20051231
13
+ expr = DIMonth.new(Last, Friday) | DIMonth.new(First, Tuesday)
14
+ dates = expr.dates(date_range)
15
+ assert_equal 24, dates.size, "Expected 24 dates in 2005 which were either on the last Friday or first Tuesday of the month"
16
+ month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
17
+ dates.each do |d|
18
+ unless (d.wday == 2 and d.day < 8) or \
19
+ (d.wday == 5 and d.day > month_days[d.month-1] - 8)
20
+ # Fail
21
+ assert false, d.to_s
22
+ end
23
+ end
24
+ end
25
+
26
+ def test_january_except_from_7th_to_15th
27
+ date_range = @date_20050101..@date_20050131
28
+ dates = (REYear.new(1, 1, 1, 31) - REMonth.new(7, 15)).dates(date_range)
29
+ assert_equal 22, dates.size, "Expected 22 dates: 1/1-1/6, 1/16-1/31"
30
+ end
31
+
32
+ def test_work_day
33
+ # Should match for 9am to 5pm except for 12pm to 1pm
34
+ expr = REDay.new(9,0,17,0) - REDay.new(12,0,13,0)
35
+ assert expr.include?(@pdate_200405030906), "Expression #{expr.to_s} should include #{@pdate_200405030906.to_s}"
36
+ assert !expr.include?(@pdate_1975060512), "Expression #{expr.to_s} should not include #{@pdate_1975060512.to_s}"
37
+ end
38
+
39
+ def test_monday_tuesday_8am_to_9am
40
+ expr = REWeek.new(Mon,Fri) & REDay.new(8,0,9,0)
41
+ assert expr.include?(@pdate_200405040806), "Expression #{expr.to_s} should include #{@pdate_200405040806.to_s}"
42
+ assert !expr.include?(@pdate_200405010806), "Expression #{expr.to_s} should not include #{@pdate_200405010806.to_s}"
43
+ assert !expr.include?(@pdate_200405030906), "Expression #{expr.to_s} should not include #{@pdate_200405030906.to_s}"
44
+ end
45
+
46
+
47
+ def test_midnight_to_9am_or_tuesday
48
+ expr = REDay.new(0,0,9,0) | DIWeek.new(Tuesday)
49
+ assert expr.include?(@pdate_20071030), "Expression #{expr.to_s} should include #{@pdate_20071030.to_s}"
50
+ assert expr.include?(@pdate_2012050803), "Expression #{expr.to_s} should include #{@pdate_2012050803.to_s}"
51
+ assert !expr.include?(@pdate_20071116100030), "Expression #{expr.to_s} should not include #{@pdate_20071116100030.to_s}"
52
+ end
53
+
54
+ def test_wednesday_thru_saturday_6_to_12am
55
+ expr = REWeek.new(Wed, Sat) & REDay.new(6,0,12,00)
56
+ assert !expr.include?(@time_20070926000000), "Expression #{expr.to_s} should include #{@time_20070926000000.to_s}"
57
+ assert expr.include?(@time_20070927065959), "Expression #{expr.to_s} should include #{@time_20070927065959.to_s}"
58
+ assert !expr.include?(@time_20070928000000), "Expression #{expr.to_s} should include #{@time_20070928000000.to_s}"
59
+ assert expr.include?(@time_20070929110000), "Expression #{expr.to_s} should include #{@time_20070929110000.to_s}"
60
+ end
61
+
62
+ def test_memorial_day
63
+ # Monday through Friday, from 9am to 5pm
64
+ job = REWeek.new(Mon,Fri) & REDay.new(9,00,17,00)
65
+ # Memorial Day (U.S.)
66
+ memorial_day = REYear.new(5) & DIMonth.new(Last,Monday)
67
+ # May 29th, 2006
68
+ last_monday_in_may = @pdate_200605291012
69
+ # Before
70
+ assert job.include?(last_monday_in_may), "Expression #{job.to_s} should include #{last_monday_in_may.to_s}"
71
+ assert job.include?(@pdate_200605301400), "Expression #{job.to_s} should include #{@pdate_200605301400.to_s}"
72
+ # Add Diff expression
73
+ job_with_holiday = job - last_monday_in_may
74
+ assert !job_with_holiday.include?(last_monday_in_may), "Expression #{job_with_holiday.to_s} should not include #{last_monday_in_may.to_s}"
75
+ # Still have to work on Tuesday
76
+ assert job.include?(@pdate_200605301400), "Expression #{job.to_s} should include #{@pdate_200605301400.to_s}"
77
+ end
78
+
79
+ def test_summertime
80
+ #This is a hack.....
81
+ #In the U.S., Memorial Day begins the last Monday of May
82
+ #
83
+ #The month of May
84
+ may=REYear.new(5)
85
+ #Monday through Saturday
86
+ monday_to_saturday = REWeek.new(1,6)
87
+ #Last week of (any) month
88
+ last_week_in = WIMonth.new(Last_of)
89
+ #So, to say 'starting from the last Monday in May',
90
+ #we need to select just that last week of May begining with
91
+ #the Monday of that week
92
+ last_week_of_may = may & monday_to_saturday & last_week_in
93
+
94
+ #This is another hack similar to the above, except instead of selecting a range
95
+ #starting at the begining of the month, we need to select only the time period in
96
+ #September up until Labor Day.
97
+ #
98
+ #In the U.S., Labor Day is the first Monday in September
99
+ #
100
+ #The month of September
101
+ september=REYear.new(9)
102
+ #First week of (any) month
103
+ first_week_in = WIMonth.new(First)
104
+ entire_first_week_of_september = september & first_week_in
105
+ #To exclude everything in the first week which occurs on or after Monday.
106
+ first_week_of_september=entire_first_week_of_september - monday_to_saturday
107
+ #June through August
108
+ june_through_august=REYear.new(6, 1, 8)
109
+ assert june_through_august.include?(@pdate_20040704), "Expression #{june_through_august.to_s} should include #{@pdate_20040704.to_s}"
110
+ #Finally!
111
+ summer_time = last_week_of_may | first_week_of_september | june_through_august
112
+
113
+ #Will work, but will be incredibly slow:
114
+ # assert(summer_time.include?(PDate.min(2004,5,31,0,0)))
115
+ assert summer_time.include?(@pdate_20040531), "Expression #{summer_time.to_s} should include #{@pdate_20040704.to_s}"
116
+ assert summer_time.include?(@pdate_20040704), "Expression #{summer_time.to_s} should include #{@pdate_20040704.to_s}"
117
+ #also works...also slow:
118
+ # assert(!summer_time.include?(PDate.min(2004,9,6,0,0)))
119
+ assert !summer_time.include?(@pdate_2004090600), "Expression #{summer_time.to_s} should not include #{@pdate_2004090600.to_s}"
120
+
121
+ end
122
+ def test_nyc_parking_te
123
+
124
+ #Monday, Wednesday, Friday
125
+ mon_wed_fri = DIWeek.new(Mon) | \
126
+ DIWeek.new(Wed) | \
127
+ DIWeek.new(Fri)
128
+
129
+ assert mon_wed_fri.include?(@datetime_200403101915), "Expression #{mon_wed_fri.to_s} should include #{@datetime_200403101915.to_s}"
130
+ assert !mon_wed_fri.include?(@datetime_200403140900), "Expression #{mon_wed_fri.to_s} should not include #{@datetime_200403140900.to_s}"
131
+ # 8am to 11am
132
+ eight_to_eleven = REDay.new(8,00,11,00)
133
+ # => Mon,Wed,Fri - 8am to 11am
134
+ expr1 = mon_wed_fri & eight_to_eleven
135
+ # Tuesdays, Thursdays
136
+ tues_thurs = DIWeek.new(Tue) | DIWeek.new(Thu)
137
+ # 11:30am to 2pm
138
+ eleven_thirty_to_two = REDay.new(11,30,14,00)
139
+ assert eleven_thirty_to_two.include?(@datetime_200403081200), "Expression #{eleven_thirty_to_two.to_s} should include #{@datetime_200403081200.to_s}"
140
+ assert !eleven_thirty_to_two.include?(@datetime_200403110000), "Expression #{eleven_thirty_to_two.to_s} should not include #{@datetime_200403110000.to_s}"
141
+ # => Tues,Thurs - 11:30am to 2pm
142
+ expr2 = tues_thurs & eleven_thirty_to_two
143
+ #
144
+ # No parking: Mon Wed Fri, 8am - 11am
145
+ # Tu Thu, 11:30am - 2pm
146
+ parking_ticket = expr1 | expr2
147
+ assert parking_ticket.include?(@datetime_200403111215), "Expression #{parking_ticket.to_s} should include #{@datetime_200403111215.to_s}"
148
+ assert parking_ticket.include?(@datetime_200403100915), "Expression #{parking_ticket.to_s} should include #{@datetime_200403100915.to_s}"
149
+ assert parking_ticket.include?(@datetime_200403100800), "Expression #{parking_ticket.to_s} should include #{@datetime_200403100800.to_s}"
150
+ assert !parking_ticket.include?(@datetime_200403110115), "Expression #{parking_ticket.to_s} should not include #{@datetime_200403110115.to_s}"
151
+
152
+ # The preceeding example can be condensed to:
153
+ # e1 = (DIWeek.new(Mon) | DIWeek.new(Wed) | DIWeek.new(Fri)) & REDay.new(8,00,11,00)
154
+ # e2 = (DIWeek.new(Tue) | DIWeek.new(Thu)) & REDay.new(11,30,14,00)
155
+ # ticket = e1 | e2
156
+ end
157
+
158
+ end
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'runt'
5
+ require 'date'
6
+
7
+ # Unit tests for DateRange class
8
+ #
9
+ # Author:: Matthew Lipper
10
+ class DateRangeTest < Test::Unit::TestCase
11
+
12
+ include Runt
13
+
14
+ def test_sub_range
15
+ r_start = PDate.sec(2004,2,29,16,24,12)
16
+ r_end = PDate.sec(2004,3,2,4,22,58)
17
+ range = DateRange.new(r_start,r_end)
18
+ assert(range.min==r_start)
19
+ assert(range.max==r_end)
20
+ assert(range.include?(r_start+1))
21
+ assert(range.include?(r_end-1))
22
+ sub_range = DateRange.new((r_start+1),(r_end-1))
23
+ assert(range.include?(sub_range))
24
+ end
25
+
26
+ def test_date
27
+ r_start = PDate.min(1979,12,31,23,57)
28
+ r_end = PDate.min(1980,1,1,0,2)
29
+ range = DateRange.new(r_start,r_end)
30
+ assert(range.min==r_start)
31
+ assert(range.max==r_end)
32
+ assert(range.include?(r_start+1))
33
+ assert(range.include?(r_end-1))
34
+ sub_range = DateRange.new((r_start+1),(r_end-1))
35
+ assert(range.include?(sub_range))
36
+ end
37
+
38
+ def test_spaceship_operator
39
+ r_start = PDate.min(1984,8,31,22,00)
40
+ r_end = PDate.min(1984,9,15,0,2)
41
+ range = DateRange.new(r_start,r_end)
42
+ assert(-1==(range<=>(DateRange.new(r_start+2,r_end+5))))
43
+ assert(1==(range<=>(DateRange.new(r_start-24,r_end+5))))
44
+ assert(0==(range<=>(DateRange.new(r_start,r_end))))
45
+ end
46
+
47
+ def test_overlap
48
+ r_start = PDate.month(2010,12)
49
+ r_end = PDate.month(2011,12)
50
+ range = DateRange.new(r_start,r_end)
51
+ o_start = PDate.month(2010,11)
52
+ o_end = PDate.month(2012,2)
53
+ o_range = DateRange.new(o_start,o_end)
54
+ assert(range.overlap?(o_range))
55
+ assert(o_range.overlap?(range))
56
+ assert(o_range.overlap?(DateRange.new(r_start,o_end)))
57
+ assert(o_range.overlap?(DateRange.new(o_start,r_end)))
58
+
59
+ # September 18th - 19th, 2005, 8am - 10am
60
+ expr1=DateRange.new(PDate.day(2005,9,18),PDate.day(2005,9,19))
61
+ # September 19th - 20th, 2005, 9am - 11am
62
+ expr2=DateRange.new(PDate.day(2005,9,19),PDate.day(2005,9,20))
63
+
64
+ assert(expr1.overlap?(expr2))
65
+ end
66
+
67
+ def test_empty
68
+ r_start = PDate.hour(2004,2,10,0)
69
+ r_end = PDate.hour(2004,2,9,23)
70
+ empty_range = DateRange.new(r_start,r_end)
71
+ assert(empty_range.empty?)
72
+ assert(DateRange::EMPTY.empty?)
73
+ # start == end should be empty
74
+ assert DateRange.new(r_start,r_start).empty?, "Range should be empty when start == end"
75
+ end
76
+
77
+ def test_gap
78
+ r_start = PDate.day(2000,6,12)
79
+ r_end = PDate.day(2000,6,14)
80
+ range = DateRange.new(r_start,r_end)
81
+ g_start = PDate.day(2000,6,18)
82
+ g_end = PDate.day(2000,6,20)
83
+ g_range = DateRange.new(g_start,g_end)
84
+ the_gap=range.gap(g_range)
85
+ assert(the_gap.start_expr==(r_end+1))
86
+ assert(the_gap.end_expr==(g_start-1))
87
+ end
88
+
89
+ end
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'baseexpressiontest'
4
+
5
+ # Unit tests for DayIntervalTE class
6
+ # Author:: Matthew Lipper
7
+
8
+ class DayIntervalTETest < BaseExpressionTest
9
+
10
+
11
+ def test_every_8_days
12
+ date = @date_20040116
13
+ # Match every 8 days
14
+ expr = DayIntervalTE.new(date, 8)
15
+ assert expr.include?(date + 8), "Expression #{expr.to_s} should include #{(date + 8).to_s}"
16
+ assert expr.include?(date + 16), "Expression #{expr.to_s} should include #{(date + 16).to_s}"
17
+ assert expr.include?(date + 64), "Expression #{expr.to_s} should include #{(date + 64).to_s}"
18
+ assert !expr.include?(date + 4), "Expression #{expr.to_s} should not include #{(date + 4).to_s}"
19
+ # FIXME This test fails
20
+ #assert !expr.include?(date - 8), "Expression #{expr.to_s} should not include #{(date - 8).to_s}"
21
+ end
22
+
23
+ def test_every_2_days
24
+ date = @datetime_200709161007
25
+ expr = DayIntervalTE.new(date, 2)
26
+ assert expr.include?(date + 2), "Expression #{expr.to_s} should include #{(date + 2).to_s}"
27
+ assert expr.include?(date + 4), "Expression #{expr.to_s} should include #{(date + 4).to_s}"
28
+ assert !expr.include?(date + 3), "Expression #{expr.to_s} should not include #{(date + 3).to_s}"
29
+ end
30
+
31
+ def test_to_s
32
+ every_four_days = DayIntervalTE.new(Date.new(2006,2,26), 4)
33
+ assert_equal "every 4th day after #{Runt.format_date(Date.new(2006,2,26))}", every_four_days.to_s
34
+ end
35
+
36
+
37
+ end
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'baseexpressiontest'
4
+
5
+ # Unit tests for Diff class
6
+ # Author:: Matthew Lipper
7
+
8
+ class DiffTest < BaseExpressionTest
9
+
10
+ def setup
11
+ super
12
+ @diff = Diff.new(@stub1, @stub2)
13
+ @date = @pdate_20071008
14
+ end
15
+
16
+ def test_initialize
17
+ assert_same @stub1, @diff.expr1, "Expected #{@stub1} instance used to create expression. Instead got #{@diff.expr1}"
18
+ assert_same @stub2, @diff.expr2, "Expected #{@stub2} instance used to create expression. Instead got #{@diff.expr2}"
19
+ end
20
+
21
+ def test_to_s
22
+ assert_equal @stub1.to_s + ' except for ' + @stub2.to_s, @diff.to_s
23
+ end
24
+
25
+ def test_include
26
+ # Diff will match only if expr1 && !expr2
27
+ @stub1.match = false
28
+ @stub2.match = false
29
+ assert !@diff.include?(@date), "Diff instance should not include any dates"
30
+ @stub2.match = true
31
+ assert !@diff.include?(@date), "Diff instance should not include any dates"
32
+ @stub1.match = true
33
+ assert !@diff.include?(@date), "Diff instance should not include any dates"
34
+ @stub2.match = false
35
+ assert @diff.include?(@date), "Diff instance should include any dates"
36
+ end
37
+ end
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'baseexpressiontest'
4
+
5
+ # Unit tests for DIMonth class
6
+ # Author:: Matthew Lipper
7
+
8
+ class DIMonthTest < BaseExpressionTest
9
+ def setup
10
+ super
11
+ @date_range = @date_20050101..@date_20051231
12
+ end
13
+
14
+ ###
15
+ # Dates functionality & tests contributed by Emmett Shear
16
+ ###
17
+ def test_dates_mixin_first_tuesday
18
+ dates = DIMonth.new(First, Tuesday).dates(@date_range)
19
+ assert dates.size == 12
20
+ dates.each do |d|
21
+ assert @date_range.include?(d)
22
+ assert d.wday == 2 # tuesday
23
+ assert d.day < 8 # in the first week
24
+ end
25
+ end
26
+
27
+ def test_dates_mixin_last_friday
28
+ dates = DIMonth.new(Last, Friday).dates(@date_range)
29
+ assert dates.size == 12
30
+ month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
31
+ dates.each do |d|
32
+ assert @date_range.include?(d)
33
+ assert d.wday == 5 # friday
34
+ assert d.day > month_days[d.month-1] - 8 # last week
35
+ end
36
+ end
37
+
38
+ def test_third_friday_of_the_month
39
+ expr = DIMonth.new(Third,Friday)
40
+ assert expr.include?(@date_20040116), "Third Friday of the month should include #{@date_20040116.to_s}"
41
+ assert !expr.include?(@date_20040109), "Third Friday of the month should not include #{@date_20040109.to_s}"
42
+ end
43
+
44
+ def test_second_friday_of_the_month
45
+ expr = DIMonth.new(Second,Friday)
46
+ assert expr.include?(@date_20040109), "Second Friday of the month should include #{@date_20040109.to_s}"
47
+ assert !expr.include?(@date_20040116), "Second Friday of the month should not include #{@date_20040116.to_s}"
48
+ end
49
+
50
+ def test_last_sunday_of_the_month
51
+ expr = DIMonth.new(Last_of,Sunday)
52
+ assert expr.include?(@date_20040125), "Last Sunday of the month should include #{@date_20040125}"
53
+ end
54
+
55
+ def test_to_s
56
+ assert_equal 'last Sunday of the month', DIMonth.new(Last_of,Sunday).to_s
57
+ end
58
+
59
+ end
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'baseexpressiontest'
4
+
5
+ # Unit tests for DIWeek class
6
+ # Author:: Matthew Lipper
7
+
8
+ class DIWeekTest < BaseExpressionTest
9
+
10
+ def test_day_in_week_te
11
+ expr = DIWeek.new(Friday)
12
+ assert expr.include?(@date_20040109), "'Friday' should include #{@date_20040109} which is a Friday"
13
+ assert expr.include?(@date_20040116), "'Friday' should include #{@date_20040116} which is a Friday"
14
+ assert !expr.include?(@date_20040125), "'Friday' should not include #{@date_20040125} which is a Sunday"
15
+ end
16
+
17
+ def test_day_in_week_te_to_s
18
+ assert_equal 'Friday', DIWeek.new(Friday).to_s
19
+ end
20
+
21
+ def test_day_in_week_dates
22
+ expr = DIWeek.new(Sunday)
23
+ dates = expr.dates(@date_20050101..@date_20050131)
24
+ assert dates.size == 5, "There are five Sundays in January, 2005: found #{dates.size}"
25
+ assert dates.include?(@date_20050102), "Should include #{@date_20050102}"
26
+ assert dates.include?(@date_20050109), "Should include #{@date_20050109}"
27
+ assert dates.include?(@date_20050116), "Should include #{@date_20050116}"
28
+ assert dates.include?(@date_20050123), "Should include #{@date_20050123}"
29
+ assert dates.include?(@date_20050130), "Should include #{@date_20050130}"
30
+ end
31
+
32
+ end
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'runt'
5
+ require 'date'
6
+
7
+ # Unit tests for DPrecision class
8
+ #
9
+ # Author:: Matthew Lipper
10
+
11
+ class DPrecisionTest < Test::Unit::TestCase
12
+
13
+ include Runt
14
+
15
+ def test_comparable
16
+ assert(DPrecision::YEAR<DPrecision::MONTH, "DPrecision.year was not less than DPrecision.month")
17
+ assert(DPrecision::MONTH<DPrecision::WEEK, "DPrecision.month was not less than DPrecision.week")
18
+ assert(DPrecision::WEEK<DPrecision::DAY, "DPrecision.week was not less than DPrecision.day")
19
+ assert(DPrecision::DAY<DPrecision::HOUR, "DPrecision.day was not less than DPrecision.hour")
20
+ assert(DPrecision::HOUR<DPrecision::MIN, "DPrecision.hour was not less than DPrecision.min")
21
+ assert(DPrecision::MIN<DPrecision::SEC, "DPrecision.min was not less than DPrecision.sec")
22
+ assert(DPrecision::SEC<DPrecision::MILLI, "DPrecision.sec was not less than DPrecision.millisec")
23
+ end
24
+
25
+ def test_pseudo_singleton_instance
26
+ assert(DPrecision::YEAR.object_id==DPrecision::YEAR.object_id, "Object Id's not equal.")
27
+ assert(DPrecision::MONTH.object_id==DPrecision::MONTH.object_id, "Object Id's not equal.")
28
+ assert(DPrecision::WEEK.object_id==DPrecision::WEEK.object_id, "Object Id's not equal.")
29
+ assert(DPrecision::DAY.object_id==DPrecision::DAY.object_id, "Object Id's not equal.")
30
+ assert(DPrecision::HOUR.object_id==DPrecision::HOUR.object_id, "Object Id's not equal.")
31
+ assert(DPrecision::MIN.object_id==DPrecision::MIN.object_id, "Object Id's not equal.")
32
+ assert(DPrecision::SEC.object_id==DPrecision::SEC.object_id, "Object Id's not equal.")
33
+ assert(DPrecision::MILLI.object_id==DPrecision::MILLI.object_id, "Object Id's not equal.")
34
+ end
35
+
36
+ def test_to_precision
37
+ #February 29th, 2004
38
+ no_prec_date = PDate.civil(2004,2,29)
39
+ month_prec = PDate.month(2004,2,29)
40
+ assert(month_prec==DPrecision.to_p(no_prec_date,DPrecision::MONTH))
41
+ #11:59:59 am, February 29th, 2004
42
+ no_prec_datetime = PDate.civil(2004,2,29,23,59,59)
43
+ #puts "-->#{no_prec_datetime.date_precision}<--"
44
+ assert(month_prec==DPrecision.to_p(no_prec_datetime,DPrecision::MONTH))
45
+ end
46
+
47
+ def test_label
48
+ assert_equal(DPrecision::YEAR.label,"YEAR")
49
+ assert_equal(DPrecision::MONTH.label,"MONTH")
50
+ assert_equal(DPrecision::WEEK.label,"WEEK")
51
+ assert_equal(DPrecision::DAY.label,"DAY")
52
+ assert_equal(DPrecision::HOUR.label,"HOUR")
53
+ assert_equal(DPrecision::MIN.label,"MINUTE")
54
+ assert_equal(DPrecision::SEC.label,"SECOND")
55
+ assert_equal(DPrecision::MILLI.label,"MILLISECOND")
56
+ end
57
+
58
+ end