added diagonale validation, refactoring of prod code
refa: better test names and right namespaces
Made some stuff same abstraction
moved ext classes to subfolder