Initial solution, library source and unit tests