Pickup and delivery problem with time windows: Algorithms and test case generation