add benchmark and tests