# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. require 'test_tools' require 'minitest/unit' class UtilsTest < MiniTest::Test include Qpid::Proton # Make sure Schedule puts tasks in proper order. def test_schedule_empty s = Schedule.new assert_empty s assert_nil s.next_tick assert_nil s.pop(nil) end def test_schedule_insert_pop s = Schedule.new [3,5,4].each { |i| s.insert(Time.at(i), i) } assert_equal Time.at(3), s.next_tick assert_nil s.pop(Time.at(2)) assert_equal [3,4], [s.pop(Time.at(4)), s.pop(Time.at(4))] refute_empty s assert_nil s.pop(Time.at(4.9)) assert_equal Time.at(5), s.next_tick assert_equal 5, s.pop(Time.at(5)) assert_empty s end # Make sure we sort by time and don't change order if same time def test_schedule_sort s = Schedule.new [4.0, 3, 5, 1, 4.1, 4.2 ].each { |n| s.insert(Time.at(n.to_i), n) } [1, 3, 4.0, 4.1, 4.2].each { |n| assert_equal n, s.pop(Time.at(4)) } refute_empty s # Not empty but nothing due until time 5 assert_equal Time.at(5), s.next_tick assert_nil s.pop(Time.at(4)) assert_equal 5, s.pop(Time.at(5)) end def test_schedule_clear s = Schedule.new [3, 5].each { |n| s.insert(Time.at(n.to_i), n) } refute_empty s s.clear assert_empty s end end