add unit tests make the code more readable make it more robust to various error conditions report errors and performance metrics appropriately Co-authored-by: tbjump jumpsiegel