add fully tests and documentation