Added a bunch of test cases.
Used Lombok's new support for @NonNull on constructor parameters.