workpattern 0.3.6 → 0.4.0
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.
- checksums.yaml +13 -5
- data/.travis.yml +4 -1
- data/CHANGELOG +5 -0
- data/lib/workpattern.rb +0 -2
- data/lib/workpattern/version.rb +1 -3
- data/lib/workpattern/week.rb +307 -311
- data/lib/workpattern/workpattern.rb +7 -2
- data/test/test_week.rb +95 -23
- metadata +8 -12
- data/lib/workpattern/day.rb +0 -343
- data/lib/workpattern/hour.rb +0 -206
- data/test/test_day.rb +0 -558
- data/test/test_hour.rb +0 -396
data/lib/workpattern/hour.rb
DELETED
@@ -1,206 +0,0 @@
|
|
1
|
-
module Workpattern
|
2
|
-
|
3
|
-
# Represents the 60 minutes of an hour using an <tt>Integer</tt>
|
4
|
-
#
|
5
|
-
# @since 0.2.0
|
6
|
-
#
|
7
|
-
module Hour
|
8
|
-
|
9
|
-
# Returns the total working minutes in the hour
|
10
|
-
#
|
11
|
-
# @return [Integer] working minutes in the hour
|
12
|
-
#
|
13
|
-
def wp_total
|
14
|
-
return wp_minutes(0,59)
|
15
|
-
end
|
16
|
-
|
17
|
-
# Sets the minutes to either working (type=1) or resting (type=0)
|
18
|
-
#
|
19
|
-
# @param [Integer] start minute at start of range
|
20
|
-
# @param [Integer] finish minute at end of range
|
21
|
-
# @param [Integer] type defines whether working (1) or resting (0)
|
22
|
-
#
|
23
|
-
def wp_workpattern(start,finish,type=1)
|
24
|
-
return wp_working(start,finish) if type==1
|
25
|
-
return wp_resting(start,finish) if type==0
|
26
|
-
end
|
27
|
-
|
28
|
-
# Returns the first working minute in the hour or 60 if there are no working minutes
|
29
|
-
#
|
30
|
-
# @return [Integer] first working minute or 60 if none found
|
31
|
-
#
|
32
|
-
def wp_first
|
33
|
-
0.upto(59) {|minute| return minute if self.wp_minutes(minute,minute)==1}
|
34
|
-
return nil
|
35
|
-
end
|
36
|
-
|
37
|
-
# Returns the last working minute in the hour or nil if there are no working minutes
|
38
|
-
#
|
39
|
-
# @return [Integer] last working minute or nil if none found
|
40
|
-
#
|
41
|
-
def wp_last
|
42
|
-
59.downto(0) {|minute| return minute if self.wp_minutes(minute,minute)==1}
|
43
|
-
return nil
|
44
|
-
end
|
45
|
-
|
46
|
-
# Returns true if the given minute is working and false if it isn't
|
47
|
-
#
|
48
|
-
# @param [Integer] start is the minute being tested
|
49
|
-
# @return [Boolean] true if minute is working, otherwise false
|
50
|
-
#
|
51
|
-
def wp_working?(start)
|
52
|
-
return true if wp_minutes(start,start)==1
|
53
|
-
return false
|
54
|
-
end
|
55
|
-
|
56
|
-
# Returns the total number of minutes between and including two minutes
|
57
|
-
#
|
58
|
-
# @param [Integer] start first minute in range
|
59
|
-
# @param [Integer] finish last minute in range
|
60
|
-
# @return [Integer] number of minutes from <tt>start</tt> to <tt>finish</tt> inclusive
|
61
|
-
#
|
62
|
-
def wp_minutes(start,finish)
|
63
|
-
return (self & wp_mask(start,finish)).to_s(2).count('1')
|
64
|
-
end
|
65
|
-
|
66
|
-
# Returns the DateTime and remainding minutes when adding a duration to a minute in the hour.
|
67
|
-
# A negative duration will subtract the minutes.
|
68
|
-
#
|
69
|
-
# @param [DateTime] time is the full date but only the minute element is used
|
70
|
-
# @param [Integer] duration is the number of minutes to add and can be negative (subtraction)
|
71
|
-
# @param [Boolean] next_hour used in subtraction to specify the starting point as midnight (00:00 the next day)
|
72
|
-
# @return [DateTime,Integer,Boolean] The <tt>DateTime</tt> calculated along with remaining minutes and a flag indicating if starting point is next hour
|
73
|
-
#
|
74
|
-
def wp_calc(time,duration,next_hour=false)
|
75
|
-
return wp_subtract(time,duration, next_hour) if duration < 0
|
76
|
-
return wp_add(time,duration) if duration > 0
|
77
|
-
return time,duration
|
78
|
-
end
|
79
|
-
|
80
|
-
# Returns the number of minutes between two minutes
|
81
|
-
# @param [Integer] start first minute in range
|
82
|
-
# @param [Integer] finish last minute in range
|
83
|
-
# @return [Integer] number of working minutes in the range
|
84
|
-
#
|
85
|
-
def wp_diff(start,finish)
|
86
|
-
start,finish=finish,start if start > finish
|
87
|
-
return 0 if start==finish
|
88
|
-
return (self & wp_mask(start,finish-1)).to_s(2).count('1')
|
89
|
-
end
|
90
|
-
|
91
|
-
private
|
92
|
-
|
93
|
-
# Sets a working pattern
|
94
|
-
#
|
95
|
-
# @param [Integer] start is first minute in the range
|
96
|
-
# @param [Integer] finish is last minute in the range
|
97
|
-
#
|
98
|
-
def wp_working(start,finish)
|
99
|
-
return self | wp_mask(start,finish)
|
100
|
-
end
|
101
|
-
|
102
|
-
# sets a resting pattern
|
103
|
-
#
|
104
|
-
# @param [Integer] start is first minute in the range
|
105
|
-
# @param [Integer] finish is last minute in the range
|
106
|
-
#
|
107
|
-
def wp_resting(start,finish)
|
108
|
-
return self & ((2**60-1)-wp_mask(start,finish))
|
109
|
-
end
|
110
|
-
|
111
|
-
# Creates a bit mask of 1's over the specified range
|
112
|
-
#
|
113
|
-
# @param [Integer] start is first minute in the range
|
114
|
-
# @param [Integer] finish is the last minute in the range
|
115
|
-
#
|
116
|
-
def wp_mask(start,finish)
|
117
|
-
return ((2**(finish+1)-1)-(2**start-1))
|
118
|
-
end
|
119
|
-
|
120
|
-
# Handles the addition of minutes to a time
|
121
|
-
#
|
122
|
-
# @param [DateTime] time is the full date but only the minute element is used
|
123
|
-
# @param [Integer] duration is the number of minutes to add and can be negative (subtraction)
|
124
|
-
# @return [DateTime, Integer] The resulting DateTime and any remaining minutes
|
125
|
-
#
|
126
|
-
def wp_add(time,duration)
|
127
|
-
start = time.min
|
128
|
-
available_minutes=wp_minutes(start,59)
|
129
|
-
|
130
|
-
if not_enough_minutes duration, available_minutes
|
131
|
-
result_date = time + HOUR - (MINUTE*start)
|
132
|
-
result_remainder = duration-available_minutes
|
133
|
-
elsif exact_amount_of_minutes(start,duration)
|
134
|
-
result_date = time + (MINUTE*duration)
|
135
|
-
result_remainder = 0
|
136
|
-
else # more than enough minutes
|
137
|
-
step = start + duration
|
138
|
-
duration-=wp_minutes(start,step)
|
139
|
-
until (duration==0)
|
140
|
-
step+=1
|
141
|
-
duration-=wp_minutes(step,step)
|
142
|
-
end
|
143
|
-
step+=1
|
144
|
-
result_date = time - (MINUTE*time.min) + (MINUTE*step)
|
145
|
-
result_remainder = 0
|
146
|
-
end
|
147
|
-
return result_date, result_remainder
|
148
|
-
end
|
149
|
-
|
150
|
-
# Handles the subtraction of minutes from a time.
|
151
|
-
# @param [DateTime] time is the full date but only the minute element is used
|
152
|
-
# @param [Integer] duration is the number of minutes to add and can be negative (subtraction)
|
153
|
-
# @param [Boolean] next_hour indicates if the 59th second is the first one to be included
|
154
|
-
# @return [DateTime, Integer] The resulting DateTime and any remaining minutes
|
155
|
-
#
|
156
|
-
def wp_subtract(time,duration,next_hour)
|
157
|
-
if next_hour
|
158
|
-
duration += 1 if wp_working?(59)
|
159
|
-
time = time + (MINUTE * 59)
|
160
|
-
return wp_calc(time,duration)
|
161
|
-
else
|
162
|
-
start=time.min
|
163
|
-
start > 0 ? available_minutes = wp_minutes(0,start-1) : available_minutes=0
|
164
|
-
end
|
165
|
-
|
166
|
-
if not_enough_minutes duration, available_minutes
|
167
|
-
result_date = time - (MINUTE * start)
|
168
|
-
result_remainder = duration + available_minutes
|
169
|
-
elsif duration.abs == available_minutes
|
170
|
-
result_date = time - (MINUTE * (start - wp_first))
|
171
|
-
result_remainder = 0
|
172
|
-
else
|
173
|
-
step = start + duration
|
174
|
-
duration += wp_minutes(step, start - 1)
|
175
|
-
until (duration == 0)
|
176
|
-
step -= 1
|
177
|
-
duration += wp_minutes(step,step)
|
178
|
-
end
|
179
|
-
result_date = time - (MINUTE * (start - step))
|
180
|
-
result_remainder = 0
|
181
|
-
end
|
182
|
-
return result_date, result_remainder
|
183
|
-
|
184
|
-
end
|
185
|
-
|
186
|
-
private
|
187
|
-
|
188
|
-
|
189
|
-
def not_enough_minutes(duration,available_minutes)
|
190
|
-
return true if (duration.abs-available_minutes)>0
|
191
|
-
return false
|
192
|
-
end
|
193
|
-
|
194
|
-
def exact_amount_of_minutes(start,duration)
|
195
|
-
return true if wp_minutes(start,start+duration-1)==duration
|
196
|
-
false
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
# Hours are represented by a bitwise <tt>Integer</tt> class so the code is mixed in to that class
|
202
|
-
# @ since 0.3.0
|
203
|
-
#
|
204
|
-
class Integer
|
205
|
-
include Workpattern::Hour
|
206
|
-
end
|
data/test/test_day.rb
DELETED
@@ -1,558 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
-
|
3
|
-
class TestDay < MiniTest::Unit::TestCase #:nodoc:
|
4
|
-
|
5
|
-
def setup
|
6
|
-
@working_day = Workpattern::Day.new(1)
|
7
|
-
@resting_day = Workpattern::Day.new(0)
|
8
|
-
@pattern_day = Workpattern::Day.new(1)
|
9
|
-
@pattern_day.workpattern(clock(0,0),clock(8,33),0)
|
10
|
-
@pattern_day.workpattern(clock(12,0),clock(12,21),0)
|
11
|
-
@pattern_day.workpattern(clock(12,30),clock(12,59),0)
|
12
|
-
@pattern_day.workpattern(clock(17,0),clock(22,59),0)
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_must_create_a_working_day
|
16
|
-
assert_equal 1440, @working_day.total,"24 hour working total minutes"
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_must_ceate_a_resting_day
|
20
|
-
assert_equal 0, @resting_day.total,"24 hour resting total minutes"
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_must_set_patterns_correctly
|
24
|
-
mins=[0,0,0,0,0,0,0,0,26,60,60,60,8,60,60,60,60,0,0,0,0,0,0,60]
|
25
|
-
mins.each_index {|index|
|
26
|
-
assert_equal mins[index],@pattern_day.values[index].wp_total,"#{index} hour should be #{mins[index]} minutes"
|
27
|
-
}
|
28
|
-
assert_equal 514, @pattern_day.total, "total working minutes"
|
29
|
-
assert_equal 8, @pattern_day.first_hour, "first hour of the day"
|
30
|
-
assert_equal 34, @pattern_day.first_min, "first minute of the day"
|
31
|
-
assert_equal 23, @pattern_day.last_hour, "last hour of the day"
|
32
|
-
assert_equal 59, @pattern_day.last_min, "last minute of the day"
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_must_duplicate_a_working_day
|
36
|
-
dup_day = @working_day.duplicate
|
37
|
-
assert_equal 1440, dup_day.total
|
38
|
-
assert_equal 0, dup_day.first_hour
|
39
|
-
assert_equal 0, dup_day.first_min
|
40
|
-
assert_equal 23, dup_day.last_hour
|
41
|
-
assert_equal 59, dup_day.last_min
|
42
|
-
hour=Workpattern::WORKING_HOUR
|
43
|
-
dup_day.values.each {|item|
|
44
|
-
assert_equal hour, item
|
45
|
-
}
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_must_duplicate_a_resting_day
|
49
|
-
dup_day = @resting_day.duplicate
|
50
|
-
assert_equal 0, dup_day.total
|
51
|
-
assert_nil dup_day.first_hour
|
52
|
-
assert_nil dup_day.first_min
|
53
|
-
assert_nil dup_day.last_hour
|
54
|
-
assert_nil dup_day.last_min
|
55
|
-
hour=Workpattern::RESTING_HOUR
|
56
|
-
dup_day.values.each {|item|
|
57
|
-
assert_equal hour, item
|
58
|
-
}
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_must_duplicate_a_patterned_day
|
62
|
-
dup_day = @pattern_day.duplicate
|
63
|
-
|
64
|
-
mins=[0,0,0,0,0,0,0,0,26,60,60,60,8,60,60,60,60,0,0,0,0,0,0,60]
|
65
|
-
mins.each_index {|index|
|
66
|
-
assert_equal mins[index],dup_day.values[index].wp_total,"#{index} hour should be #{mins[index]} minutes"
|
67
|
-
}
|
68
|
-
|
69
|
-
assert_equal 514, dup_day.total, "total working minutes"
|
70
|
-
assert_equal 8, dup_day.first_hour, "first hour of the day"
|
71
|
-
assert_equal 34, dup_day.first_min, "first minute of the day"
|
72
|
-
assert_equal 23, dup_day.last_hour, "last hour of the day"
|
73
|
-
assert_equal 59, dup_day.last_min, "last minute of the day"
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_must_add_more_than_available_minutes_to_a_working_day
|
78
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
79
|
-
result, remainder=@working_day.calc(start_date,946)
|
80
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
81
|
-
assert_equal 1,remainder
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_must_add_less_than_available_minutes_to_a_working_day
|
85
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
86
|
-
result, remainder=@working_day.calc(start_date,944)
|
87
|
-
assert_equal DateTime.new(2013,1,1,23,59), result
|
88
|
-
assert_equal 0,remainder
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_must_add_exactly_the_available_minutes_to_a_working_day
|
92
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
93
|
-
result, remainder=@working_day.calc(start_date,945)
|
94
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
95
|
-
assert_equal 0,remainder
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_must_add_zero_minutes_to_a_working_day
|
99
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
100
|
-
result, remainder=@working_day.calc(start_date,0)
|
101
|
-
assert_equal start_date, result
|
102
|
-
assert_equal 0,remainder
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_must_add_1_minute_to_0_in_working_day
|
106
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
107
|
-
result, remainder=@working_day.calc(start_date,1)
|
108
|
-
assert_equal DateTime.new(2013,1,1,0,1), result
|
109
|
-
assert_equal 0,remainder
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_must_add_1_hour_to_0_in_working_day
|
113
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
114
|
-
result, remainder=@working_day.calc(start_date,60)
|
115
|
-
assert_equal DateTime.new(2013,1,1,1,0), result
|
116
|
-
assert_equal 0,remainder
|
117
|
-
end
|
118
|
-
|
119
|
-
def test_must_add_1_hour_1_minute_to_0_in_working_day
|
120
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
121
|
-
result, remainder=@working_day.calc(start_date,61)
|
122
|
-
assert_equal DateTime.new(2013,1,1,1,1), result
|
123
|
-
assert_equal 0,remainder
|
124
|
-
end
|
125
|
-
|
126
|
-
def test_must_add_1_day_to_0_in_working_day
|
127
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
128
|
-
result, remainder=@working_day.calc(start_date,1440)
|
129
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
130
|
-
assert_equal 0,remainder
|
131
|
-
end
|
132
|
-
|
133
|
-
def test_must_add_1_day_1_minute_to_0_in_working_day
|
134
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
135
|
-
result, remainder=@working_day.calc(start_date,1441)
|
136
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
137
|
-
assert_equal 1,remainder
|
138
|
-
end
|
139
|
-
|
140
|
-
def test_must_add_more_than_available_minutes_to_a_resting_day
|
141
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
142
|
-
result, remainder=@resting_day.calc(start_date,946)
|
143
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
144
|
-
assert_equal 946,remainder
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_must_add_less_than_available_minutes_to_a_resting_day
|
148
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
149
|
-
result, remainder=@resting_day.calc(start_date,944)
|
150
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
151
|
-
assert_equal 944,remainder
|
152
|
-
end
|
153
|
-
|
154
|
-
def test_must_add_exactly_the_available_minutes_to_a_resting_day
|
155
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
156
|
-
result, remainder=@resting_day.calc(start_date,945)
|
157
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
158
|
-
assert_equal 945,remainder
|
159
|
-
end
|
160
|
-
|
161
|
-
def test_must_add_zero_minutes_to_a_resting_day
|
162
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
163
|
-
result, remainder=@resting_day.calc(start_date,0)
|
164
|
-
assert_equal start_date, result
|
165
|
-
assert_equal 0,remainder
|
166
|
-
end
|
167
|
-
|
168
|
-
def test_must_add_1_minute_to_0_in_resting_day
|
169
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
170
|
-
result, remainder=@resting_day.calc(start_date,1)
|
171
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
172
|
-
assert_equal 1,remainder
|
173
|
-
end
|
174
|
-
|
175
|
-
def test_must_add_1_hour_to_0_in_resting_day
|
176
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
177
|
-
result, remainder=@resting_day.calc(start_date,60)
|
178
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
179
|
-
assert_equal 60,remainder
|
180
|
-
end
|
181
|
-
|
182
|
-
def test_must_add_1_hour_1_minute_to_0_in_resting_day
|
183
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
184
|
-
result, remainder=@resting_day.calc(start_date,61)
|
185
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
186
|
-
assert_equal 61,remainder
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_must_add_1_day_to_0_in_resting_day
|
190
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
191
|
-
result, remainder=@resting_day.calc(start_date,1440)
|
192
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
193
|
-
assert_equal 1440,remainder
|
194
|
-
end
|
195
|
-
|
196
|
-
def test_must_add_1_day_1_minute_to_0_in_resting_day
|
197
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
198
|
-
result, remainder=@resting_day.calc(start_date,1441)
|
199
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
200
|
-
assert_equal 1441,remainder
|
201
|
-
end
|
202
|
-
|
203
|
-
def test_must_add_more_than_available_minutes_to_a_pattern_day
|
204
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
205
|
-
result, remainder=@pattern_day.calc(start_date,515)
|
206
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
207
|
-
assert_equal 1,remainder
|
208
|
-
end
|
209
|
-
|
210
|
-
def test_must_add_less_than_available_minutes_to_a_pattern_day
|
211
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
212
|
-
result, remainder=@pattern_day.calc(start_date,513)
|
213
|
-
assert_equal DateTime.new(2013,1,1,23,59), result
|
214
|
-
assert_equal 0,remainder
|
215
|
-
end
|
216
|
-
|
217
|
-
def test_must_add_exactly_the_available_minutes_to_a_pattern_day
|
218
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
219
|
-
result, remainder=@pattern_day.calc(start_date,514)
|
220
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
221
|
-
assert_equal 0,remainder
|
222
|
-
end
|
223
|
-
|
224
|
-
def test_must_add_zero_minutes_to_a_pattern_day
|
225
|
-
start_date=DateTime.new(2013,1,1,8,15)
|
226
|
-
result, remainder=@pattern_day.calc(start_date,0)
|
227
|
-
assert_equal start_date, result
|
228
|
-
assert_equal 0,remainder
|
229
|
-
end
|
230
|
-
|
231
|
-
def test_must_add_1_minute_to_0_in_pattern_day
|
232
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
233
|
-
result, remainder=@pattern_day.calc(start_date,1)
|
234
|
-
assert_equal DateTime.new(2013,1,1,8,35), result
|
235
|
-
assert_equal 0,remainder
|
236
|
-
end
|
237
|
-
|
238
|
-
def test_must_add_1_hour_to_0_in_pattern_day
|
239
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
240
|
-
result, remainder=@pattern_day.calc(start_date,60)
|
241
|
-
assert_equal DateTime.new(2013,1,1,9,34), result
|
242
|
-
assert_equal 0,remainder
|
243
|
-
end
|
244
|
-
|
245
|
-
def test_must_add_1_hour_1_minute_to_0_in_pattern_day
|
246
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
247
|
-
result, remainder=@pattern_day.calc(start_date,61)
|
248
|
-
assert_equal DateTime.new(2013,1,1,9,35), result
|
249
|
-
assert_equal 0,remainder
|
250
|
-
end
|
251
|
-
|
252
|
-
def test_must_add_1_day_to_0_in_pattern_day
|
253
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
254
|
-
result, remainder=@pattern_day.calc(start_date,1440)
|
255
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
256
|
-
assert_equal 926,remainder
|
257
|
-
end
|
258
|
-
|
259
|
-
def test_must_add_1_day_1_minute_to_0_in_pattern_day
|
260
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
261
|
-
result, remainder=@pattern_day.calc(start_date,1441)
|
262
|
-
assert_equal DateTime.new(2013,1,2,0,0), result
|
263
|
-
assert_equal 927,remainder
|
264
|
-
end
|
265
|
-
|
266
|
-
def test_must_subtract_more_than_available_minutes_in_working_day
|
267
|
-
start_date=DateTime.new(2013,1,1,12,23)
|
268
|
-
result, remainder, midnight=@working_day.calc(start_date,-744)
|
269
|
-
assert_equal DateTime.new(2012,12,31,0,0), result
|
270
|
-
assert_equal -1,remainder
|
271
|
-
assert midnight
|
272
|
-
end
|
273
|
-
|
274
|
-
def test_must_subtract_less_than_available_minutes_in_working_day
|
275
|
-
start_date=DateTime.new(2013,1,1,12,23)
|
276
|
-
result, remainder, midnight=@working_day.calc(start_date,-742)
|
277
|
-
assert_equal DateTime.new(2013,1,1,0,1), result
|
278
|
-
assert_equal 0,remainder
|
279
|
-
refute midnight
|
280
|
-
end
|
281
|
-
|
282
|
-
def test_must_subtract_available_minutes_in_working_day
|
283
|
-
start_date=DateTime.new(2013,1,1,12,23)
|
284
|
-
result, remainder, midnight=@working_day.calc(start_date,-743)
|
285
|
-
assert_equal DateTime.new(2013,1,1,0,0), result
|
286
|
-
assert_equal 0,remainder
|
287
|
-
refute midnight
|
288
|
-
end
|
289
|
-
|
290
|
-
def test_must_subtract_1_minute_from_start_of_working_day
|
291
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
292
|
-
result, remainder, midnight=@working_day.calc(start_date,-1)
|
293
|
-
assert_equal DateTime.new(2012,12,31,0,0), result
|
294
|
-
assert_equal -1,remainder
|
295
|
-
assert midnight
|
296
|
-
end
|
297
|
-
|
298
|
-
def test_must_subtract_1_minute_from_start_of_next_working_day
|
299
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
300
|
-
result, remainder, midnight=@working_day.calc(start_date,-1,true)
|
301
|
-
assert_equal DateTime.new(2013,1,1,23,59), result
|
302
|
-
assert_equal 0,remainder
|
303
|
-
refute midnight
|
304
|
-
end
|
305
|
-
|
306
|
-
def test_must_subtract_1_day_from_start_of_next_working_day
|
307
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
308
|
-
result, remainder, midnight=@working_day.calc(start_date,-1440,true)
|
309
|
-
assert_equal DateTime.new(2013,1,1,0,0), result
|
310
|
-
assert_equal 0,remainder
|
311
|
-
refute midnight
|
312
|
-
end
|
313
|
-
|
314
|
-
def test_must_subtract_1_from_zero_minutes_from_resting_day
|
315
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
316
|
-
result, remainder, midnight=@resting_day.calc(start_date,-1,true)
|
317
|
-
assert_equal DateTime.new(2012,12,31,0,0), result
|
318
|
-
assert_equal -1,remainder
|
319
|
-
assert midnight
|
320
|
-
end
|
321
|
-
|
322
|
-
def test_must_subtract_1_from_resting_day
|
323
|
-
start_date=DateTime.new(2013,1,1,4,13)
|
324
|
-
result, remainder, midnight=@resting_day.calc(start_date,-1,true)
|
325
|
-
assert_equal DateTime.new(2012,12,31,0,0), result
|
326
|
-
assert_equal -1,remainder
|
327
|
-
assert midnight
|
328
|
-
end
|
329
|
-
|
330
|
-
def test_must_subtract_1_from_zero_minutes_from_resting_day
|
331
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
332
|
-
result, remainder, midnight=@resting_day.calc(start_date,-1,false)
|
333
|
-
assert_equal DateTime.new(2012,12,31,0,0), result
|
334
|
-
assert_equal -1,remainder
|
335
|
-
assert midnight
|
336
|
-
end
|
337
|
-
|
338
|
-
def test_must_subtract_1_from_somewhere_in_resting_day
|
339
|
-
start_date=DateTime.new(2013,1,1,4,13)
|
340
|
-
result, remainder, midnight=@resting_day.calc(start_date,-1,false)
|
341
|
-
assert_equal DateTime.new(2012,12,31,0,0), result
|
342
|
-
assert_equal -1,remainder
|
343
|
-
assert midnight
|
344
|
-
end
|
345
|
-
|
346
|
-
def test_must_subtract_more_than_available_minutes_in_patterned_day
|
347
|
-
start_date=DateTime.new(2013,1,1,12,23)
|
348
|
-
result, remainder, midnight=@pattern_day.calc(start_date,-208)
|
349
|
-
assert_equal DateTime.new(2012,12,31,0,0), result
|
350
|
-
assert_equal -1,remainder
|
351
|
-
assert midnight
|
352
|
-
end
|
353
|
-
|
354
|
-
def test_must_subtract_less_than_available_minutes_in_patterned_day
|
355
|
-
start_date=DateTime.new(2013,1,1,12,23)
|
356
|
-
result, remainder, midnight=@pattern_day.calc(start_date,-206)
|
357
|
-
assert_equal DateTime.new(2013,1,1,8,35), result
|
358
|
-
assert_equal 0,remainder
|
359
|
-
refute midnight
|
360
|
-
end
|
361
|
-
|
362
|
-
def test_must_subtract_available_minutes_in_patterned_day
|
363
|
-
start_date=DateTime.new(2013,1,1,12,23)
|
364
|
-
result, remainder, midnight=@pattern_day.calc(start_date,-207)
|
365
|
-
assert_equal DateTime.new(2013,1,1,8,34), result
|
366
|
-
assert_equal 0,remainder
|
367
|
-
refute midnight
|
368
|
-
end
|
369
|
-
|
370
|
-
def test_must_subtract_1_minute_from_start_of_patterned_day
|
371
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
372
|
-
result, remainder, midnight=@pattern_day.calc(start_date,-1)
|
373
|
-
assert_equal DateTime.new(2012,12,31,0,0), result
|
374
|
-
assert_equal -1,remainder
|
375
|
-
assert midnight
|
376
|
-
end
|
377
|
-
|
378
|
-
def test_must_subtract_1_minute_from_start_of_next_patterned_day
|
379
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
380
|
-
result, remainder, midnight=@pattern_day.calc(start_date,-1,true)
|
381
|
-
assert_equal DateTime.new(2013,1,1,23,59), result
|
382
|
-
assert_equal 0,remainder
|
383
|
-
refute midnight
|
384
|
-
end
|
385
|
-
|
386
|
-
def test_must_subtract_1_day_from_start_of_next_patterned_day
|
387
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
388
|
-
result, remainder, midnight=@pattern_day.calc(start_date,-514,true)
|
389
|
-
assert_equal DateTime.new(2013,1,1,8,34), result
|
390
|
-
assert_equal 0,remainder
|
391
|
-
refute midnight
|
392
|
-
end
|
393
|
-
|
394
|
-
def test_must_return_0_difference_between_same_time_in_working_day
|
395
|
-
start_date=DateTime.new(2013,1,1,8,32)
|
396
|
-
difference,result_date=@working_day.diff(start_date,start_date)
|
397
|
-
assert_equal 0, difference
|
398
|
-
assert_equal start_date, result_date
|
399
|
-
end
|
400
|
-
|
401
|
-
def test_must_return_difference_to_end_of_day_using_different_days_in_working_day
|
402
|
-
start_date=DateTime.new(2013,1,1,23,30)
|
403
|
-
finish_date=DateTime.new(2013,1,2,8,1)
|
404
|
-
difference,result_date=@working_day.diff(start_date,finish_date)
|
405
|
-
assert_equal 30, difference
|
406
|
-
assert_equal DateTime.new(2013,1,2,0,0), result_date
|
407
|
-
end
|
408
|
-
|
409
|
-
def test_must_return_difference_to_from_start_of_day_to_end_of_day_using_different_days_in_working_day
|
410
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
411
|
-
finish_date=DateTime.new(2013,1,2,8,1)
|
412
|
-
difference,result_date=@working_day.diff(start_date,finish_date)
|
413
|
-
assert_equal 1440, difference
|
414
|
-
assert_equal DateTime.new(2013,1,2,0,0), result_date
|
415
|
-
end
|
416
|
-
|
417
|
-
def test_must_return_difference_from_start_of_day_in_working_day
|
418
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
419
|
-
finish_date=DateTime.new(2013,1,1,3,1)
|
420
|
-
difference,result_date=@working_day.diff(start_date,finish_date)
|
421
|
-
assert_equal 181, difference
|
422
|
-
assert_equal finish_date, result_date
|
423
|
-
end
|
424
|
-
|
425
|
-
def test_must_return_difference_between_two_times_in_working_day
|
426
|
-
start_date=DateTime.new(2013,1,1,2,11)
|
427
|
-
finish_date=DateTime.new(2013,1,1,9,15)
|
428
|
-
difference,result_date=@working_day.diff(start_date,finish_date)
|
429
|
-
assert_equal 424, difference
|
430
|
-
assert_equal finish_date, result_date
|
431
|
-
end
|
432
|
-
|
433
|
-
def test_must_return_0_difference_between_same_time_in_resting_day
|
434
|
-
start_date=DateTime.new(2013,1,1,8,32)
|
435
|
-
difference,result_date=@resting_day.diff(start_date,start_date)
|
436
|
-
assert_equal 0, difference
|
437
|
-
assert_equal start_date, result_date
|
438
|
-
end
|
439
|
-
|
440
|
-
def test_must_return_difference_to_end_of_day_using_different_days_in_resting_day
|
441
|
-
start_date=DateTime.new(2013,1,1,23,30)
|
442
|
-
finish_date=DateTime.new(2013,1,2,8,1)
|
443
|
-
difference,result_date=@resting_day.diff(start_date,finish_date)
|
444
|
-
assert_equal 0, difference
|
445
|
-
assert_equal DateTime.new(2013,1,2,0,0), result_date
|
446
|
-
end
|
447
|
-
|
448
|
-
def test_must_return_difference_to_from_start_of_day_to_end_of_day_using_different_days_in_resting_day
|
449
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
450
|
-
finish_date=DateTime.new(2013,1,2,8,1)
|
451
|
-
difference,result_date=@resting_day.diff(start_date,finish_date)
|
452
|
-
assert_equal 0, difference
|
453
|
-
assert_equal DateTime.new(2013,1,2,0,0), result_date
|
454
|
-
end
|
455
|
-
|
456
|
-
def test_must_return_difference_from_start_of_day_in_resting_day
|
457
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
458
|
-
finish_date=DateTime.new(2013,1,1,3,1)
|
459
|
-
difference,result_date=@resting_day.diff(start_date,finish_date)
|
460
|
-
assert_equal 0, difference
|
461
|
-
assert_equal finish_date, result_date
|
462
|
-
end
|
463
|
-
|
464
|
-
def test_must_return_difference_between_two_times_in_resting_day
|
465
|
-
start_date=DateTime.new(2013,1,1,2,11)
|
466
|
-
finish_date=DateTime.new(2013,1,1,9,15)
|
467
|
-
difference,result_date=@resting_day.diff(start_date,finish_date)
|
468
|
-
assert_equal 0, difference
|
469
|
-
assert_equal finish_date, result_date
|
470
|
-
end
|
471
|
-
|
472
|
-
####
|
473
|
-
|
474
|
-
def test_must_return_0_difference_between_same_working_time_in_patterned_day
|
475
|
-
start_date=DateTime.new(2013,1,1,8,34)
|
476
|
-
difference,result_date=@pattern_day.diff(start_date,start_date)
|
477
|
-
assert_equal 0, difference
|
478
|
-
assert_equal start_date, result_date
|
479
|
-
end
|
480
|
-
|
481
|
-
def test_must_return_0_difference_between_same_resting_time_in_patterned_day
|
482
|
-
start_date=DateTime.new(2013,1,1,8,32)
|
483
|
-
difference,result_date=@pattern_day.diff(start_date,start_date)
|
484
|
-
assert_equal 0, difference
|
485
|
-
assert_equal start_date, result_date
|
486
|
-
end
|
487
|
-
|
488
|
-
def test_must_return_difference_to_end_of_day_from_working_time_using_different_days_in_patterned_day
|
489
|
-
start_date=DateTime.new(2013,1,1,12,23)
|
490
|
-
finish_date=DateTime.new(2013,1,2,8,1)
|
491
|
-
difference,result_date=@pattern_day.diff(start_date,finish_date)
|
492
|
-
assert_equal 307, difference
|
493
|
-
assert_equal DateTime.new(2013,1,2,0,0), result_date
|
494
|
-
end
|
495
|
-
|
496
|
-
def test_must_return_difference_to_end_of_day_from_resting_time_using_different_days_in_patterned_day
|
497
|
-
start_date=DateTime.new(2013,1,1,12,10)
|
498
|
-
finish_date=DateTime.new(2013,1,2,8,1)
|
499
|
-
difference,result_date=@pattern_day.diff(start_date,finish_date)
|
500
|
-
assert_equal 308, difference
|
501
|
-
assert_equal DateTime.new(2013,1,2,0,0), result_date
|
502
|
-
end
|
503
|
-
|
504
|
-
def test_must_return_difference_to_from_start_of_day_to_end_of_day_using_different_days_in_pattern_day
|
505
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
506
|
-
finish_date=DateTime.new(2013,1,2,8,1)
|
507
|
-
difference,result_date=@pattern_day.diff(start_date,finish_date)
|
508
|
-
assert_equal 514, difference
|
509
|
-
assert_equal DateTime.new(2013,1,2,0,0), result_date
|
510
|
-
end
|
511
|
-
|
512
|
-
def test_must_return_difference_from_start_of_day_in_pattern_day
|
513
|
-
start_date=DateTime.new(2013,1,1,0,0)
|
514
|
-
finish_date=DateTime.new(2013,1,1,11,1)
|
515
|
-
difference,result_date=@pattern_day.diff(start_date,finish_date)
|
516
|
-
assert_equal 147, difference
|
517
|
-
assert_equal finish_date, result_date
|
518
|
-
end
|
519
|
-
|
520
|
-
def test_must_return_difference_between_two_working_times_in_pattern_day
|
521
|
-
start_date=DateTime.new(2013,1,1,8,45)
|
522
|
-
finish_date=DateTime.new(2013,1,1,12,26)
|
523
|
-
difference,result_date=@pattern_day.diff(start_date,finish_date)
|
524
|
-
assert_equal 199, difference
|
525
|
-
assert_equal finish_date, result_date
|
526
|
-
end
|
527
|
-
|
528
|
-
def test_must_return_difference_between_two_resting_times_in_pattern_day
|
529
|
-
start_date=DateTime.new(2013,1,1,8,20)
|
530
|
-
finish_date=DateTime.new(2013,1,1,12,40)
|
531
|
-
difference,result_date=@pattern_day.diff(start_date,finish_date)
|
532
|
-
assert_equal 214, difference
|
533
|
-
assert_equal finish_date, result_date
|
534
|
-
end
|
535
|
-
|
536
|
-
def test_must_return_difference_between_working_and_resting_times_in_pattern_day
|
537
|
-
start_date=DateTime.new(2013,1,1,8,45)
|
538
|
-
finish_date=DateTime.new(2013,1,1,12,40)
|
539
|
-
difference,result_date=@pattern_day.diff(start_date,finish_date)
|
540
|
-
assert_equal 203, difference
|
541
|
-
assert_equal finish_date, result_date
|
542
|
-
end
|
543
|
-
|
544
|
-
def test_must_return_difference_between_resting_and_working_times_in_pattern_day
|
545
|
-
start_date=DateTime.new(2013,1,1,12,15)
|
546
|
-
finish_date=DateTime.new(2013,1,1,23,30)
|
547
|
-
difference,result_date=@pattern_day.diff(start_date,finish_date)
|
548
|
-
assert_equal 278, difference
|
549
|
-
assert_equal finish_date, result_date
|
550
|
-
end
|
551
|
-
|
552
|
-
private
|
553
|
-
|
554
|
-
def clock(hour,min)
|
555
|
-
return Workpattern.clock(hour,min)
|
556
|
-
end
|
557
|
-
end
|
558
|
-
|