Segunda Code Kata del Aula de Software Libre
ACTUALIZACIÓN (26/3/15): Por falta de asistentes se suspende la actividad.
Volvemos a programar un nuevo Code Kata para el próximo jueves 26 de marzo de 16 a 18 horas, en el aula B1 del Ramón y Cajal. En esta ocasión el problema se realizará siguiendo la metodología TDD. El problema es el siguiente:
Problema: Calculadora
- Crear una calculadora (Calculator) que tenga un sólo método «int Add(string numbers)»
- El método puede recibir en la cadena numbers 0, 1 o 2 números separados por coma y devolverá su suma. Si la cadena está vacía se devuelve cero. Ejemplos válidos: «», «1» y «1,2».
- Empezar con el caso más simple de una cadena vacía, luego 1 número y luego 2.
- No te líes, busca la solución más simple posible. Lo importante es pensar en las pruebas.
- Recuerda refactorizar el código después de pasar cada test (tabular bien, poner nombres descriptivos, quitar código redundante, etc.)
- Permitir al método sumar una indeterminada cantidad de números.
- Permitir sumar números separados por lineas (\n), además de por comas:
- Ejemplo válido: «1\n2,3» debe dar 6
- Ejemplo no válido: «1,\n». Los ejemplos no válidos no se prueban, solo se indica como aclaración.
- Permitir otros delimitadores
- Para cambiar el delimitador, la primera línea de la cadena será similar a esta: «//[delimitador]\n[números…]». Ejemplo: «//;\n1;2» debería dar 3.
- El cambio de delimitador es opcional, el resto de casos debería seguir funcionando.
- Si se pasa un número negativo se debe lanzar una excepción: «No se permiten números negativos: [números]». Se debe indicar el número. Si se pasan varios números negativos, se deben mostrar todos en la excepción.
Los siguientes tres casos son avanzados. Si has tardado 30 minutos o menos en solucionar los anteriores, puedes continuar. - Números mayores de 1000 se ignoran: «1001,2» debe dar 3.
- Se permiten delimitadores de cualquier longitud. Ejemplo: «//[***]\n1***2***3» debe dar 6.
- Se permiten múltiples delimitadores. Ejemplo: “//[***]\n1***2***3” debe dar 6. Se permiten múltiples delimitadores de cualquier longitud.
Se puede usar cualquier lenguaje. Tenéis varios frameworks para desarrollos con pruebas:
- C++: https://code.google.com/p/googletest/
- PHP: https://phpunit.de/
- Python: http://pyunit.sourceforge.net/
- Java: http://junit.org/
- Ruby: http://test-unit.github.io/