On Fri, 19 Oct 2007 21:14:00 +0900, Ruby Quiz wrote:

> The three rules of Ruby Quiz:
> 
> 1.  Please do not post any solutions or spoiler discussion for this quiz
> until 48 hours have passed from the time on this message.
> 
> 2.  Support Ruby Quiz by submitting ideas as often as you can:
> 
> http://www.rubyquiz.com/
> 
> 3.  Enjoy!
> 
> Suggestion:  A [QUIZ] in the subject of emails about the problem helps
> everyone on Ruby Talk follow the discussion.  Please reply to the
> original quiz message, if you can.
> 
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
=-=-=-=-=
> 
> by Brian Candler
> 
> Write a Ruby class which can tell you whether the current time (or any
> given time) is within a particular "time window". Time windows are
> defined by strings in the following format:
> 
> 	#    0700-0900                     # every day between these 
times #   
> 	Sat Sun                       # all day Sat and Sun, no other 
times #  
> 	 Sat Sun 0700-0900             # 0700-0900 on Sat and Sun only 
#   
> 	Mon-Fri 0700-0900             # 0700-0900 on Monday to Friday 
only #   
> 	Mon-Fri 0700-0900; Sat Sun    # ditto plus all day Sat and Sun 
#   
> 	Fri-Mon 0700-0900             # 0700-0900 on Fri Sat Sun Mon #    
Sat
> 	0700-0800; Sun 0800-0900  # 0700-0800 on Sat, plus 0800-0900 on 
Sun
> 
> Time ranges should exclude the upper bound, i.e. 0700-0900 is 07:00:00
> to 08:59:59. An empty time window means "all times everyday". Here are
> some test cases to make it clearer:
> 


I have rewritten the test cases to give more informative messages:

  class TestTimeWindow < Test::Unit::TestCase
    def test_window_1
      s = "Sat-Sun; Mon Wed 0700-0900; Thu 0700-0900 1000-1200"
      w = TimeWindow.new(s)
      
      assert ! w.include?(Time.mktime(2007,9,25,8,0,0)),   "#{s.inspect} should not include Tue 8am"
      assert   w.include?(Time.mktime(2007,9,26,8,0,0)),   "#{s.inspect} should include Wed 8am"
      assert ! w.include?(Time.mktime(2007,9,26,11,0,0)),  "#{s.inspect} should not include Wed 11am"
      assert ! w.include?(Time.mktime(2007,9,27,6,59,59)), "#{s.inspect} should not include Thurs 6:59am"
      assert   w.include?(Time.mktime(2007,9,27,7,0,0)),   "#{s.inspect} should include Thurs 7am"
      assert   w.include?(Time.mktime(2007,9,27,8,59,59)), "#{s.inspect} should include Thurs 8:59am"
      assert ! w.include?(Time.mktime(2007,9,27,9,0,0)),   "#{s.inspect} should not include Thurs 9am"
      assert   w.include?(Time.mktime(2007,9,27,11,0,0)),  "#{s.inspect} should include Thurs 11am"
      assert   w.include?(Time.mktime(2007,9,29,11,0,0)),  "#{s.inspect} should include Sat 11am"
      assert   w.include?(Time.mktime(2007,9,29,0,0,0)),   "#{s.inspect} should include Sat midnight"
      assert   w.include?(Time.mktime(2007,9,29,23,59,59)),
                                    "#{s.inspect} should include Saturday one minute before midnight"
    end
    
    def test_window_2
      s = "Fri-Mon"
      w = TimeWindow.new(s)
      assert ! w.include?(Time.mktime(2007,9,27)), "#{s.inspect} should not include Thurs"
      assert   w.include?(Time.mktime(2007,9,28)), "#{s.inspect} should include Fri"
      assert   w.include?(Time.mktime(2007,9,29)), "#{s.inspect} should include Sat"
      assert   w.include?(Time.mktime(2007,9,30)), "#{s.inspect} should include Sun"
      assert   w.include?(Time.mktime(2007,10,1)), "#{s.inspect} should include Mon"
      assert ! w.include?(Time.mktime(2007,10,2)), "#{s.inspect} should not include Tues"
    end
    
    def test_window_nil
      w = TimeWindow.new("")
      assert w.include?(Time.mktime(2007,9,25,1,2,3)),"Empty string should include all times"
    end
  end




-- 
Ken Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/