Scott,
This code is really solid. You mentioned you felt like you had trouble but you look good in your use of if/elif for control flow and your nested for loops for testing. The one concern I have is with your assert statement here. What is happening with ack_error when you use the comma? What exactly is printed out when the assert statement fails? Look around online and see what happens to expressions after the comma in assert statements. I suspect that what is happening is not what you intended.