Solved a bug in documentarion (about vectors)
[unitarium4c:unitarium4c.git] / doc / guide-es.tex
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % Unitarium4C Guide 0.2, 2010-11-21                            %
3 % Written by Andreu Correa Casablanca <castarco@gmail.com>     %
4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5
6 \documentclass[a4paper,12pt,twoside]{article}
7 %\documentclass[a4paper,10pt]{scrartcl}
8
9 \usepackage{textcomp}
10 \usepackage{listings}
11 \usepackage[usenames,dvipsnames]{color}
12
13 \definecolor{listinggray}{gray}{0.1}
14 \definecolor{lbcolor}{rgb}{0.95,0.95,0.95}
15 \lstset{
16         language=C,
17         backgroundcolor=\color{lbcolor},
18         keywordstyle=\bfseries\ttfamily\color[rgb]{1,0.7,0},
19         identifierstyle=\ttfamily,
20         commentstyle=\color[rgb]{0.133,0.545,0.133},
21         stringstyle=\scriptsize\ttfamily\color[rgb]{0.627,0.126,0.941},
22         showstringspaces=false,
23         basicstyle=\scriptsize\color[rgb]{0.1,0.1,0.1},
24         numberstyle=\scriptsize\color[rgb]{0,0.4,0},
25         numbers=left,
26         stepnumber=1,
27         numbersep=10pt,
28         tabsize=4,
29         breaklines=true,
30         prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}},
31         breakatwhitespace=false,
32         aboveskip={0\baselineskip},
33     columns=fixed,
34     upquote=true,
35     extendedchars=true,
36     frame=single,
37 % backgroundcolor=\color{lbcolor},
38 }
39
40 \usepackage[anchorcolor=green]{hyperref}
41
42 \usepackage[utf8x]{inputenc}
43 \usepackage{graphics}
44 \usepackage{epsfig}
45
46 \usepackage{anysize}
47
48 \marginsize{2cm}{2cm}{2cm}{2cm}
49
50 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
51 %% ccBeamer 0.1, 2007-07-02                                   %%
52 %% Written by Sebastian Pipping <webmaster@hartwork.org>      %%
53 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
54
55 %% Images
56 \newcommand{\CcImageBy}[1]{%
57         \includegraphics[scale=#1]{cc_images/cc_by_30.pdf}%
58 }
59 \newcommand{\CcImageCc}[1]{%
60         \includegraphics[scale=#1]{cc_images/cc_cc_30.pdf}%
61 }
62 \newcommand{\CcImageDevNations}[1]{%
63         \includegraphics[scale=#1]{cc_images/cc_dev_nations_30.pdf}%
64 }
65 \newcommand{\CcImageNc}[1]{%
66         \includegraphics[scale=#1]{cc_images/cc_nc_30.pdf}%
67 }
68 \newcommand{\CcImageNd}[1]{%
69         \includegraphics[scale=#1]{cc_images/cc_nd_30.pdf}%
70 }
71 \newcommand{\CcImagePd}[1]{%
72         \includegraphics[scale=#1]{cc_images/cc_pd_30.pdf}%
73 }
74 \newcommand{\CcImageSa}[1]{%
75         \includegraphics[scale=#1]{cc_images/cc_sa_30.pdf}%
76 }
77 \newcommand{\CcImageSampling}[1]{%
78         \includegraphics[scale=#1]{cc_images/cc_sampling_30.pdf}%
79 }
80 \newcommand{\CcImageSamplingPlus}[1]{%
81         \includegraphics[scale=#1]{cc_images/cc_sampling_plus_30.pdf}%
82 }
83
84
85 %% Groups
86 \newcommand{\CcGroupBy}[1]{% zoom
87         \CcImageBy{#1}%
88 }
89 \newcommand{\CcGroupByNc}[2]{% zoom, gap
90         \CcImageBy{#1}\hspace*{#2}\CcImageNc{#1}%
91 }
92 \newcommand{\CcGroupByNcNd}[2]{% zoom, gap
93         \CcImageBy{#1}\hspace*{#2}\CcImageNc{#1}\hspace*{#2}\CcImageNd{#1}%
94 }
95 \newcommand{\CcGroupByNcSa}[2]{% zoom, gap
96         \CcImageBy{#1}\hspace*{#2}\CcImageNc{#1}\hspace*{#2}\CcImageSa{#1}%
97 }
98 \newcommand{\CcGroupByNd}[2]{% zoom, gap
99         \CcImageBy{#1}\hspace*{#2}\CcImageNd{#1}%
100 }
101 \newcommand{\CcGroupBySa}[2]{% zoom, gap
102         \CcImageBy{#1}\hspace*{#2}\CcImageSa{#1}%
103 }
104 \newcommand{\CcGroupDevNations}[1]{% zoom
105         \CcImageDevNations{#1}%
106 }
107 \newcommand{\CcGroupNcSampling}[2]{% zoom, gap
108         \CcImageNc{#1}\hspace*{#2}\CcImageSampling{#1}%
109 }
110 \newcommand{\CcGroupPd}[1]{% zoom
111         \CcImagePd{#1}%
112 }
113 \newcommand{\CcGroupSampling}[1]{% zoom
114         \CcImageSampling{#1}%
115 }
116 \newcommand{\CcGroupSamplingPlus}[1]{% zoom
117         \CcImageSamplingPlus{#1}%
118 }
119
120 %% Text
121 \newcommand{\CcLongnameBy}{Attribution}
122 \newcommand{\CcLongnameByNc}{Attribution-NonCommercial}
123 \newcommand{\CcLongnameByNcNd}{Attribution-NoDerivs}
124 \newcommand{\CcLongnameByNcSa}{Attribution-NonCommercial-ShareAlike}
125 \newcommand{\CcLongnameByNd}{Attribution-NoDerivs}
126 \newcommand{\CcLongnameBySa}{Attribution-ShareAlike}
127
128 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
129 % End of work of Sebastian Pipping                             %
130 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
131
132 \newcommand{\CcNote}[1]{% longname
133 \begin{center}
134         Este texto está licenciado bajo la \\ \textit{Licencia Creative Commons #1 3.0}.%
135 \end{center}
136 }
137
138 \title{Guía de Unitarium4C v0.3.4}
139 \author{Andreu Correa Casablanca}
140 \date{08 de Diciembre, 2010}
141
142 \pdfinfo{%
143   /Title    (Guía de Unitarium4C v0.3.4)
144   /Author   (Andreu Correa Casablanca)
145   /Creator  (Andreu Correa Casablanca)
146   /Producer (Viricmind.org)
147   /Subject  (Unit Testing)
148   /Keywords (unitarium4c, unittestig, C, C/C++)
149 }
150
151 \hypersetup{%
152   pdfborder={0 0 0},
153   unicode=true,
154   urlcolor=green,
155 }
156
157 \begin{document}
158 \maketitle
159 \thispagestyle{empty}
160
161 \newpage
162
163 $$ $$
164
165 \vfill
166 \begin{center}
167 Este texto ha sido escrito por Andreu Correa Casablanca \texttt{<castarco@gmail.com>}
168 en un entorno \textit{GNU/Linux} gracias a \textit{Kile}
169 y \LaTeXe .
170 \end{center}
171
172 \begin{center}
173         \CcGroupBySa{1.}{0.95ex}
174 \end{center}
175 \CcNote{Attribution-ShareAlike}
176
177 \thispagestyle{empty}
178
179 \newpage
180
181 \tableofcontents
182 \pagenumbering{roman}
183
184 \newpage
185 \pagenumbering{arabic}
186
187 \section{Introducción}
188
189 Unitarium4C es una biblioteca escrita en lenguaje C con el objetivo de facilitar la creación
190 de tests unitarios de forma sencilla en dicho lenguaje (bajo la licencia .
191
192 Esta biblioteca nació en el contexto de una práctica
193 de la asignatura de cálculo numérico en la Universidad de Barcelona y uno de los principales objetivos del
194 proyecto es que sea útil especialmente para el desarrollo de software científico o ingenieril.
195
196 Actualmente la librería soporta números enteros, en punto flotante, complejos, vectores y matrices
197 (con enteros, números de punto flotante y complejos) y cadenas de texto. Las funciones de
198 comparación permiten usar un factor de tolerancia, lo que puede resultar muy útil ya que en muchos
199 casos los resultados de ciertos cálculos no pueden ser exactos.
200
201 Unitarium4C se ha creado con la intención de que sea fácilmente extensible, para ello se ha
202 buscado crear un código lo suficientemente limpio, claro y autoexplicativo. Aunque el lenguaje
203 C está diseñado para ser usado dentro del paradigma de la programación estructurada (y poco más),
204 Unitarium4C está pensada siguiendo el paradigma de orientación a objetos con algunos trazos de
205 programación funcional.
206
207 En la última versión (0.3.4) de Unitarium4C se introdujeron nuevas macros que permiten fabricar
208 funciones \textit{assert} en muy pocos pasos y de forma sencilla, intentando evitar las tareas
209 repetitivas.
210
211 \newpage
212
213 \section{Instalación}
214
215 Aunque por el momento no han sido creados paquetes instalables para ningún sistema operativo,
216 la instalación de Unitarium4C es bastante sencilla. El proyecto no cuenta con página web propia,
217 pero el repositorio de código está alojado en \href{http://www.gitorious.org}{www.gitorious.org}.
218
219 \newcounter{qcounter}
220 \begin{list}{\arabic{qcounter}·}{\usecounter{qcounter}}
221  \item En primer lugar descargaremos la versión 0.3.4 de Unitarium4c desde la dirección:
222   \begin{center}
223     \url{http://gitorious.org/unitarium4c/unitarium4c/archive-tarball/v0.3.4}
224   \end{center}
225   o bién podemos descargar la última versión del repositorio (aunque lo desaconsejamos porque
226   todavía no se ha estabilizado suficientemente la nomenclatura) usando el siguiente comando:
227   \begin{center}
228     \texttt{git clone git://gitorious.org/unitarium4c/unitarium4c.git unitarium4c}
229   \end{center}
230   para ello deberéis tener instalado en vuestro sistema el programa
231   Git\footnote{Creado por Linus Torvalds, podéis encontrarlo en \url{http://git-scm.com/}, aunque
232   la mayoría de distribuciones GNU/Linux lo incluyen en sus repositorios. En Debian y Ubuntu
233   lo podéis instalar con el comando \texttt{apt-get install git}.}.
234  \item En segundo lugar desempaquetamos el fichero y entramos en el directorio recien creado
235   (en caso que hayáis descargado el código con Git no tendréis que desempaquetar, lo que resulta
236   obvio). Podréis ver varios archivos (textos de licencia, changelogs y poco más) y dos directorios
237   (\textit{src} y \textit{doc}). En el directorio \textit{doc} encontraréis este mismo manual,
238   mientras que en \textit{src} es donde está la parte interesante.
239  \item Entramos en \textit{src}, y solo tenemos que ejecutar como superusuario la orden
240   \begin{center}
241   \texttt{make install}
242   \end{center}
243   la instalación ha sido completada :D .
244 \end{list}
245
246 Ahora los archivos de cabecera y las bibliotecas (estática y dinámica) ya son accesibles a
247 cualquier programa que queráis escribir con ellas. Es interesante que veáis el código de
248 ejemplo que hay en \textit{example.c}, es bastante largo y a priori puede parecer complicado,
249 pero la clave está en que cada una de las funciones es un test diseñado para verificar el buen
250 funcionamiento de Unitarium4C, si analizáis la función \texttt{main} veréis que el proceso
251 se reduce a crear funciones con \textit{asserts} e "instalarlas" como tests en la función
252 \texttt{main}.
253
254 Para compilar el programa de ejemplo solo tendréis que teclear \texttt{make example},
255 una vez hecho ésto, con teclear \texttt{./example} en la línea de comandos éste se
256 ejecutará. Aparecera una lista en la que algunos términos aparecerán como \texttt{OK}
257 y otros como \texttt{FAILED}, esto se ha hecho deliberadamente para comprobar que
258 los asserts fallan cuando tienen que hacerlo y no fallan cuando no tienen que hacerlo.
259 En particular, en ésta versión debería haber 58 fallos (y 58 aciertos), alternados en
260 grupos de 2. Si no es así es que algo extraño ha sucedido.
261
262 \newpage
263
264 \section{Cómo crear tests unitarios}
265
266 Crear tests unitarios con Unitarium4C es muy sencillo. Básicamente, lo único que se tiene
267 que hacer es crear una función (que será el test), y en ella hacer las comprovaciones
268 pertinentes con las funciones \textit{assert}. Una vez hecho ésto, se instalará el test
269 en la función principal del programa. He aquí un ejemplo: \\
270
271 \begin{lstlisting}[language=C]
272 // Test sobre valores booleanos
273 void Boolean_Tests () {
274         assert_true(0);
275         assert_false(1);
276         
277         assert_true(1);
278         assert_false(0);
279 }
280
281 // Test sobre igualdades entre enteros
282 void Int_Tests () {
283         int a, b;
284         
285         do {
286                 a = rand ();
287                 b = rand ();
288         } while (a == b);
289
290         assert_eq_int (a, b);
291         assert_eq_int (b, a);
292         
293         assert_eq_int (a, a);
294         assert_eq_int (b, b);
295 }
296
297 // Funcion principal
298 int main (int argc, char **argv) {
299         // Annadimos los tests que queremos ejecutar    
300         add_test (Boolean_Tests, "Boolean Test");
301         add_test (Int_Tests, "Int Test");
302         
303         // Ejecutamos los tests
304         exec_tests ();
305         
306         // Mostramos los resultados (en la linea de comandos)
307         show_results (argc, argv);
308         
309         // Liberamos recuros
310         clear_tests ();
311         
312         // Finalizamos el programa
313         return 0;
314 }
315 \end{lstlisting}
316
317 Para ver qué funciones \textit{assert} incorpora Unitarium4C podéis ir al apéndice
318 \ref{app:assert_table}. También podéis ver las convenciones de nomenclatura en el
319 apéndice \ref{app:nomenclature_table}. Las otras funciones importantes son \texttt{add\_test},
320 \texttt{exec\_tests}, \texttt{show\_results} y \texttt{clear\_tests}, que están autoexplicadas
321 en este ejemplo.
322
323 \newpage
324
325 \section{Cómo extender Unitarium4C}
326
327 Dado que todavía no se ha estandarizado ni estabilizado suficientemente la nomenclatura
328 y estructura interna de la biblioteca, esta sección permanecerá vacía. Ya hay métodos,
329 pero todos ellos son provisionales (por ello no las comentamos en el manual oficial).
330
331 En caso de querer extender la librería siempre puedes contactar con el creador de
332 Unitarium4C o bucear un poco en el código. Además, cualquier contribución será bienvenida.
333
334 \newpage
335
336 \appendix
337 \section*{Apéndices}
338 \section{Tabla de funciones assert}\label{app:assert_table}
339
340 \subsection{Valores booleanos}
341 Por el momento sólo hay 2 funciones \textit{assert} para valores lógicos. Se considera
342 como cierto cualquier valor entero diferente a $0$, y falso el valor $0$.
343
344 \begin{itemize}
345  \item \texttt{assert\_true (int boolean\_value)} : \\
346  Indicará que ha habido un error en caso que \texttt{boolean\_value} sea $0$.
347
348  \item \texttt{assert\_false (int boolean\_value)} : \\
349  Indicará que ha habido un error en caso que \texttt{boolean\_value} no sea $0$.
350 \end{itemize}
351
352 \subsection{Valores numéricos}
353 Unitarium4C dispone de diversas funciones \textit{assert} que permiten comparar ciertos
354 valores numéricos, incluyendo la posibilidad de ajustar la tolerancia de la comparación.
355
356 \begin{itemize}
357  \item \texttt{assert\_eq\_int (int a, int b)} : \\
358  Sirve para comparar valores enteros (tipo \textit{int}).
359  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
360
361  \item \texttt{assert\_eq\_int\_wtol (int a, int b, int tol)} : \\
362  Sirve para comparar valores enteros (tipo \textit{int}, con una cierta tolerancia).
363  Indicará que ha habido un error en caso que \texttt{a} difiera de \texttt{b} en
364  una cantidad mayor al valor absoluto de \texttt{tol}.
365
366  \item \texttt{assert\_eq\_flt (float a, float b)} : \\
367  Sirve para comparar valores racionales (tipo \textit{float}).
368  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
369
370  \item \texttt{assert\_eq\_flt\_wtol (float a, float b, float tol)} : \\
371  Sirve para comparar valores racionales (tipo \textit{float}, con una cierta tolerancia).
372  Indicará que ha habido un error en caso que \texttt{a} difiera de \texttt{b} en
373  una cantidad mayor al valor absoluto de \texttt{tol}.
374
375  \item \texttt{assert\_eq\_dbl (double a, double b)} : \\
376  Sirve para comparar valores racionales (tipo \textit{double}).
377  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
378
379  \item \texttt{assert\_eq\_dbl\_wtol (double a, double b, double tol)} : \\
380  Sirve para comparar valores racionales (tipo \textit{double}, con una cierta tolerancia).
381  Indicará que ha habido un error en caso que \texttt{a} difiera de \texttt{b} en
382  una cantidad mayor al valor absoluto de \texttt{tol}.
383
384  \item \texttt{assert\_eq\_complex\_flt (complex float a, complex float b)} : \\
385  Sirve para comparar valores complejos (tipo \textit{complex float}).
386  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
387
388  \item \texttt{assert\_eq\_complex\_flt\_wtol \\ (complex float a, complex float b, complex float tol)} : \\
389  Sirve para comparar valores complejos (tipo \textit{complex float}, con una cierta tolerancia).
390  Indicará que ha habido un error en caso que \texttt{a} difiera de \texttt{b} en
391  una cantidad mayor al valor absoluto de \texttt{tol}.
392
393  \item \texttt{assert\_eq\_complex\_dbl (complex double a, complex double b)} : \\
394  Sirve para comparar valores complejos (tipo \textit{complex double}).
395  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
396
397  \item \texttt{assert\_eq\_complex\_dbl\_wtol \\ (complex double a, complex double b, complex double tol)} : \\
398  Sirve para comparar valores complex (tipo \textit{complex double}, con una cierta tolerancia).
399  Indicará que ha habido un error en caso que \texttt{a} difiera de \texttt{b} en
400  una cantidad mayor al valor absoluto de \texttt{tol}.
401 \end{itemize}
402
403 \subsection{Vectores}
404
405 Unitarium4C dispone de diversas funciones \textit{assert} que permiten comparar ciertos
406 tipos de vector, incluyendo la posibilidad de ajustar la tolerancia de la comparación.
407
408 \begin{itemize}
409  \item \texttt{assert\_eq\_int\_vector (int *a, int *b, int n)} : \\
410  Sirve para comparar vectores de números enteros (tipo \textit{int*}).
411  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
412
413  \item \texttt{assert\_eq\_int\_vector\_wtol (int *a, int *b, int n, int tol)} : \\
414  Sirve para comparar vectores de números enteros (tipo \textit{int*}, con una cierta tolerancia).
415  Indicará que ha habido un error en caso que la distancia (con la norma del supremo) entre
416  \texttt{a} y \texttt{b} sea mayor al valor absoluto de \texttt{tol}.
417
418  \item \texttt{assert\_eq\_flt\_vector (float *a, float *b, int n)} : \\
419  Sirve para comparar vectores de números racionales (tipo \textit{float*}).
420  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
421
422  \item \texttt{assert\_eq\_flt\_vector\_wtol (float *a, float *b, int n, float tol)} : \\
423  Sirve para comparar vectores de números racionales (tipo \textit{float*}, con una cierta tolerancia).
424  Indicará que ha habido un error en caso que la distancia (con la norma del supremo) entre
425  \texttt{a} y \texttt{b} sea mayor al valor absoluto de \texttt{tol}.
426
427  \item \texttt{assert\_eq\_dbl\_vector (double *a, double *b, int n)} : \\
428  Sirve para comparar vectores de números racionales (tipo \textit{double*}).
429  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
430
431  \item \texttt{assert\_eq\_dbl\_vector\_wtol (double *a, double *b, int n, double tol)} : \\
432  Sirve para comparar vectores de números racionales (tipo \textit{double*}, con una cierta tolerancia).
433  Indicará que ha habido un error en caso que la distancia (con la norma del supremo) entre
434  \texttt{a} y \texttt{b} sea mayor al valor absoluto de \texttt{tol}.
435
436  \item \texttt{assert\_eq\_complex\_flt\_vector (complex float *a, complex float *b, int n)} : \\
437  Sirve para comparar vectores de números complejos (tipo \textit{complex float*}).
438  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
439
440  \item \texttt{assert\_eq\_complex\_flt\_vector\_wtol \\ (complex float *a, complex float *b, int n, complex float tol)} : \\
441  Sirve para comparar vectores de números complejos (tipo \textit{complex float*}, con una cierta tolerancia).
442  Indicará que ha habido un error en caso que la distancia (con la norma del supremo sobre el vector, y la norma
443  usual sobre los valores complejos) entre \texttt{a} y \texttt{b} sea mayor al valor absoluto de \texttt{tol}.
444
445  \item \texttt{assert\_eq\_complex\_dbl\_vector (complex double *a, complex double *b, int n)} : \\
446  Sirve para comparar vectores de números complejos (tipo \textit{complex double*}).
447  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
448
449  \item \texttt{assert\_eq\_complex\_dbl\_vector\_wtol \\ (complex double *a, complex double *b, int n, complex double tol)} : \\
450  Sirve para comparar vectores de números complejos (tipo \textit{complex double*}, con una cierta tolerancia).
451  Indicará que ha habido un error en caso que la distancia (con la norma del supremo sobre el vector, y la norma
452  usual sobre los valores complejos) entre \texttt{a} y \texttt{b} sea mayor al valor absoluto de \texttt{tol}.
453 \end{itemize}
454
455 \subsection{Matrices}
456
457 Unitarium4C dispone de diversas funciones \textit{assert} que permiten comparar ciertos
458 tipos de matriz, incluyendo la posibilidad de ajustar la tolerancia de la comparación.
459
460 \begin{itemize}
461  \item \texttt{assert\_eq\_int\_matrix (int **a, int **b, int rows, int cols)} : \\
462  Sirve para comparar matrices de números enteros (tipo \textit{int**}).
463  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
464
465  \item \texttt{assert\_eq\_int\_matrix\_wtol \\
466  (int **a, int **b, int rows, int cols, int tol)} : \\
467  Sirve para comparar matrices de números enteros (tipo \textit{int**}, con una cierta tolerancia).
468  Indicará que ha habido un error en caso que la distancia (con la norma del supremo) entre
469  \texttt{a} y \texttt{b} sea mayor al valor absoluto de \texttt{tol}.
470
471  \item \texttt{assert\_eq\_flt\_matrix (float **a, float **b, int rows, int cols)} : \\
472  Sirve para comparar matrices de números racionales (tipo \textit{float**}).
473  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
474
475  \item \texttt{assert\_eq\_flt\_matrix\_wtol \\
476  (float **a, float **b, int rows, int cols, float tol)} : \\
477  Sirve para comparar matrices de números racionales (tipo \textit{float**}, con una cierta tolerancia).
478  Indicará que ha habido un error en caso que la distancia (con la norma del supremo) entre
479  \texttt{a} y \texttt{b} sea mayor al valor absoluto de \texttt{tol}.
480
481  \item \texttt{assert\_eq\_dbl\_matrix (double **a, double **b, int rows, int cols)} : \\
482  Sirve para comparar matrices de números racionales (tipo \textit{double**}).
483  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
484
485  \item \texttt{assert\_eq\_dbl\_matrix\_wtol \\
486  (double **a, double **b, int rows, int cols, double tol)} : \\
487  Sirve para comparar matrices de números racionales (tipo \textit{double**}, con una cierta tolerancia).
488  Indicará que ha habido un error en caso que la distancia (con la norma del supremo) entre
489  \texttt{a} y \texttt{b} sea mayor al valor absoluto de \texttt{tol}.
490
491  \item \texttt{assert\_eq\_complex\_flt\_matrix \\
492  (complex float **a, complex float **b, int rows, int cols)} : \\
493  Sirve para comparar matrices de números complejos (tipo \textit{complex float**}).
494  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
495
496  \item \texttt{assert\_eq\_complex\_flt\_matrix\_wtol \\
497  (complex float **a, complex float **b, int r, int c, complex float tol)} : \\
498  Sirve para comparar matrices de números complejos (tipo \textit{complex float**}, con una cierta tolerancia).
499  Indicará que ha habido un error en caso que la distancia (con la norma del supremo sobre matriz, y la norma
500  usual sobre los valores complejos) entre \texttt{a} y \texttt{b} sea mayor al valor absoluto de \texttt{tol}.
501
502  \item \texttt{assert\_eq\_complex\_dbl\_matrix \\
503  (complex double **a, complex double **b, int rows, int cols)} : \\
504  Sirve para comparar matrices de números complejos (tipo \textit{complex double**}).
505  Indicará que ha habido un error en caso que \texttt{a} sea diferente de \texttt{b}.
506
507  \item \texttt{assert\_eq\_complex\_dbl\_matrix\_wtol \\
508  (complex double **a, complex double **b, int r, int c, complex double tol)}\\
509  Sirve para comparar matrices de números complejos (tipo \textit{complex double**}, con una cierta tolerancia).
510  Indicará que ha habido un error en caso que la distancia (con la norma del supremo sobre la matriz, y la norma
511  usual sobre los valores complejos) entre \texttt{a} y \texttt{b} sea mayor al valor absoluto de \texttt{tol}.
512 \end{itemize}
513
514 \subsection{Cadenas de texto}
515
516 Aunque se preveé que en versiones posteriores Unitarium4C dé un mayor soporte al
517 tratamiento de cadenas de texto, por el momento solo hay disponible una sola función:
518
519 \begin{itemize}
520  \item \texttt{assert\_eq\_str (char *a, char *b)} : \\
521  Sirve para comparar cadenas de texto.
522  Indicará que ha habido un error en caso que el texto de \texttt{a} sea
523  diferente al texto de \texttt{b}. Es importante recalcar que sólo trabaja
524  bien con cadenas bien formateadas, pues no se impone ningún límite en el 
525  tamaño de éstas, y de no encontrar un $0$ la función podría causar un
526  fallo de segmentación.
527 \end{itemize}
528
529
530 \newpage
531
532 \section{Convenciones de nomenclatura}\label{app:nomenclature_table}
533
534 Si examináis la tabla de funciones assert del apéndice \ref{app:assert_table}
535 podréis comprobar como todas las funciones siguien un patrón regular que puede
536 ayudarnos bastante a la hora de recordar los nombres de las funciones.
537
538 Hemos realizado una clasificación sencilla de los criterios a tener en cuenta para
539 la nomenclatura (abreviaturas de tipos y estructura de los nombres de funciones
540 según su ámbito y aplicación).
541
542 \subsection{Estructura de los nombres de funciones}
543
544 Todas las funciones de uso regular (es decir, que no sirvan para extender la
545 propia librería) estarán escritas en minúsculas, y separando las palabras con
546 barras bajas. El primer ejemplo nos lo dan las funciones que debemos usar
547 para añadir y ejecutar tests, así como para mostrarlos y liberar los recursos
548 reservados: \texttt{add\_test},\texttt{exec\_tests}, \texttt{show\_results} y
549 \texttt{clear\_tests}.
550
551 Todas las funciones de \textit{assert} seguirán el patrón:
552 \begin{center}
553  \texttt{assert\_tipoassert (valores\_a\_comprobar) }
554 \end{center}
555 donde \texttt{tipoassert} indicará qué queremos comprobar en cada caso. Por
556 el momento sólo hay dos tipos generales, el que engloba la verificación de
557 valores booleanos, y el que engloba las comparaciones (de igualdad o equivalencia).
558
559 Las verificaciones de valores de verdad admiten solo la forma:
560 \begin{center}
561  \texttt{assert\_[true/false] (int boolean\_value)}
562 \end{center}
563
564 Las comparaciones de igualdad o equivalencia toman la forma siguiente:
565 \begin{center}
566  \texttt{assert\_eq\_abreviaturadetipo[\_opcional] (tipo a, tipo b[, opcional])}
567 \end{center}
568
569 Para cada comparación se tendrá que conocer la abreviatura del tipo y ya estará.
570
571 Los tipos numéricos (y combinaciones de éstos, como vectores o matrices) por lo general
572 admiten una segunda forma, añadiendo \texttt{\_wtol} al final del nombre de la función
573 y un parámetro más del tipo que sea preciso (si se trata de vectores o matrices, el 
574 parámetro añadido tendrá el tipo de los elementos individuales del vector o la matriz).
575 Las funciones con la forma:
576 \begin{center}
577  \texttt{assert\_eq\_abrtipo\_wtol (tipo a, tipo b, tipo tol)}
578 \end{center}
579 són las que admitiran una cierta tolerancia en las comparaciones indicada por el parámetro
580 \texttt{tol}.
581
582 \newpage
583
584 \subsection{Abreviaturas de nombres de tipos}
585
586 Ciertos tipos básicos tienen definidas abreviaturas para ahorrar escritura (y, todo sea dicho, alinear
587 mejor el código), que son los siguientes:
588
589 $$
590 \begin{array}{lcl}
591  \texttt{char  } & \longrightarrow & \texttt{chr} \\
592  \texttt{char* } & \longrightarrow & \texttt{str} \\
593  \texttt{int   } & \longrightarrow & \texttt{int} \\
594  \texttt{float } & \longrightarrow & \texttt{flt} \\
595  \texttt{double} & \longrightarrow & \texttt{dbl} \\
596  \texttt{complex float } & \longrightarrow & \texttt{complex\_flt} \\
597  \texttt{complex double} & \longrightarrow & \texttt{complex\_dbl}
598 \end{array}
599 $$
600
601 Además, para los vectores, se añade como sufijo el texto \texttt{\_vector},
602 y en el caso de las matrices \texttt{\_matrix}.
603
604 \end{document}