Implement Gruul, with tests