def test_efficiency(self): 'Ensure that linear search number of comparisons is correct.' personal_calendar = eventlib.load_file('data/calendar.txt') event_calendar = eventlib.load_file('data/events_a.txt') results = eventlib.load_file('data/results_a.txt') clashes_linear.counter.reset() self.assertEqual(clashes_linear.find_possibilities(personal_calendar, event_calendar), results) self.assertEqual(clashes_linear.counter.count, 4152)
def test_efficiency(self): 'Ensure that the number of comparisons is correct.' events_a = eventlib.load_file('data/events_a.txt') events_b = eventlib.load_file('data/events_b.txt') events_c = eventlib.load_file('data/events_c.txt') merged = eventlib.load_file('data/merged_abc.txt') merge_heap_nway.counter.reset() self.assertEqual(merge_heap_nway.merge_calendars([events_a, events_b, events_c]), merged) self.assertEqual(merge_heap_nway.counter.count, 559)
def test_bisection(self): 'Ensure that the bisection algorithm is working correctly' event_calendar = eventlib.load_file('data/events_b.txt') for i in xrange(len(event_calendar)): offset = clashes_binary.bisect_left( event_calendar, event_calendar[i].start_timestamp) self.assertEqual(offset, i)
# --[ WRITE CODE HERE ]--> # Collect all events from the event_calendar that don't clash # with any events in the personal_calendar. # <--[ WRITE CODE HERE ]-- # The command line interface. Do not modify! if __name__ == "__main__": if len(sys.argv) < 2: print >> sys.stderr, "You must provide at least two calendars as arguments!" else: calendars = [] # Load all calendars as specified by the command line: for path in sys.argv[1:]: calendars.append(eventlib.load_file(path)) # The first calendar is the personal calendar: personal_calendar = calendars[0] # The remaining calendars are the event calendars: event_calendars = calendars[1:] # Find all possible events which don't clash with events in the personal # calendar: start = time.clock() possible = [] for event_calendar in event_calendars: possible += find_possibilities(personal_calendar, event_calendar) end = time.clock()
# Firstly you need to heapify the items in heap. # While the heap isn't empty, take the top item and append it to merged. # Increment the offset by 1 and update the heap item. Then, reposition the # item in the heap by calling siftdown. # <--[ WRITE CODE HERE ]-- return merged if __name__ == "__main__": if len(sys.argv) < 2: print >> sys.stderr, "You must provide at least two calendars as arguments!" else: calendars = [] for path in sys.argv[1:]: events = eventlib.load_file(path) if len(events) > 0: calendars.append(events) start = time.clock() merged = merge_calendars(calendars) end = time.clock() print >> sys.stderr, end - start print >> sys.stderr, counter eventlib.save(sys.stdout, merged)