Probar en la pista de C++

Aprende a probar tus ejercicios de C++ en Exercism


Cada ejercicio proporciona los tests unitarios y una receta de compilación con CMake. Tú aportas la implementación. Cada archivo de test está pensado para enlazarse con tu implementación y generar un ejecutable de consola que ejecuta los tests. Al ejecutar el ejecutable de tests, se imprime un mensaje por cada test que falla y se informa de un código de salida distinto de cero cuando los tests fallan.

Nota: Tu código se somete a los tests cada vez que compilas tu proyecto. Si tu código no pasa uno o varios tests pero es código C++ válido, se compilará igualmente.

Trabajar cada ejercicio es un proceso que consiste en:

  • Crear la compilación inicial con CMake
  • Para cada test unitario:
    • Corregir los errores de compilación para que el test falle.
    • Implementar lo justo para que el test pase.
    • Refactorizar tu implementación para mejorar la legibilidad, reducir la duplicación, etc.
    • Descomentar el siguiente test

Crear la compilación inicial con CMake

Cada ejercicio incluye un archivo CMakeLists.txt junto con los tests unitarios. Contiene la receta de CMake ya preparada que se encarga de la compilación por ti. No deberías necesitar editar este archivo. La receta proporcionada da por supuesto que tu implementación existe como un archivo de cabecera y un archivo de código fuente con el nombre del ejercicio.

Por ejemplo, el ejercicio bob espera una implementación en bob.h y bob.cpp. Para los ejercicios con guiones en el nombre, se da por supuesto que los archivos de código fuente usan guiones bajos, así que word-count espera word_count.h y word_count.cpp. Puede que decidas que tu implementación es lo bastante sencilla como para vivir enteramente en el archivo de cabecera, en cuyo caso puedes omitir el archivo cpp.

Crea los archivos de tu implementación inicial antes de ejecutar CMake. Si no tienes los archivos bob.h y bob.cpp cuando ejecutes CMake para el ejercicio bob, CMake generará un error indicando que no encuentra los archivos. Estos archivos pueden estar vacíos, pero deben existir.

Con esta receta, CMake puede generar un proyecto adecuado para tu entorno ejecutando cmake -G con un generador adecuado y la ubicación del directorio del ejercicio. CMake generará un script de compilación apropiado para tu sistema operativo. Para mantener esos archivos generados separados del código fuente de tu ejercicio, es habitual crear un directorio llamado build que contenga estos archivos de compilación generados, además del código compilado. Así mantendrás la carpeta de tu ejercicio ordenada y despejada.

Una vez que CMake ha creado el entorno de compilación, puedes compilar tu código con el comando adecuado para tu entorno:

  • Linux con make: make
  • Windows con Visual Studio: selecciona Build / Build Solution en el menú.
  • MacOS con Xcode: selecciona Build en la barra de herramientas
  • MacOS con «Unix Makefile»: make si usas la aplicación CLI de Exercism

A continuación se muestran ejemplos de cómo ejecutar CMake en distintos entornos.

Linux con Make

El nombre del generador para CMake es Unix Makefiles. Suponiendo que el ejercicio actual es bob y estamos en la carpeta del ejercicio:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

Este ejemplo muestra cómo crear archivos vacíos para la implementación antes de ejecutar CMake.

Simplemente escribe make en el directorio de compilación para compilar los tests. Esto debería generar errores de compilación. Una vez corregidos los errores, make compilará y ejecutará los tests.

Windows con Visual Studio

Visual Studio tiene soporte nativo para proyectos CMake, así que no deberías necesitar instalar CMake por separado ni ejecutarlo fuera de Visual Studio. Sigue esta guía para configurar el proyecto CMake en Visual Studio.

MacOS con Xcode

El nombre del generador para CMake es Xcode. Suponiendo que el ejercicio actual es bob y estamos en la carpeta del ejercicio:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..

Este ejemplo genera los archivos de XCode para que puedas abrir el proyecto en XCode. Con el proyecto abierto en XCode, puede que necesites añadir otro target. Para un nuevo target, ve a File -> New -> Target en el menú, OS X \ Application \ Command Line Tool -> Next, selecciona C++ como lenguaje y proporciona un nombre para el target. Ejecuta el código usando el target.

Si tu terminal muestra un error Xcode x.x not supported, es muy probable que Xcode no esté instalado en tu máquina o que tu versión esté desactualizada. Descarga e instala Xcode desde el App Store o desde este enlace. Los errores similares a The CXX compiler identification is unknown probablemente se resuelvan siguiendo las instrucciones para instalar GCC o añadiendo otro target en Xcode como se explica en el párrafo anterior.

MacOS con Make cuando usas la CLI de Exercism

Este ejemplo está pensado especialmente para quienes quieren usar la aplicación CLI de Exercism para configurar, ejecutar los tests y enviar sus ejercicios de C++.

El nombre del generador para CMake es Unix Makefiles. Suponiendo que el ejercicio actual es bob y estamos en la carpeta del ejercicio:

$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test

En este ejemplo, sí creamos archivos vacíos para la implementación antes de ejecutar CMake, pero no creamos un directorio de compilación vacío. Esto se debe a que la CLI de Exercism usa el archivo .exercism/metadata.json del directorio raíz para analizar los casos de test.

Simplemente escribe exercism test en el directorio raíz para compilar los tests. Esto debería generar errores de compilación. Una vez corregidos los errores, ejecutar exercism test de nuevo compilará y ejecutará los tests usando la CLI de Exercism.