[GO] Ecrire un test piloté par table en C

introduction

J'ai remarqué que le test basé sur les tables recommandé par Go peut également être écrit en C.

Faites un test piloté par table

Test piloté par table est recommandé pour les tests Go. La paire de données d'entrée et de valeur attendue donnée à la cible de test est traitée comme un cas de test, et la liste de la valeur attendue et de la valeur mesurée est affichée dans le tableau.

Par exemple, si vous écrivez un test pour la méthode gcd () de manière basée sur une table:

gcd_test.go


func TestGcd(t *testing.T) {
	cases := []struct {
		a, b int
		z    int
	}{
		{12, 8, 4},
		{3, 7, 1},
	}

	for _, c := range cases {
		if gcd(c.a, c.b) != c.z {
			t.Errorf("expected gcd(%v,%v) == %v\n", c.a, c.b, c.z)
		}
	}

}

Go peut écrire des définitions de structure et des initialisations de variables en même temps. L'initialisation du cas de test est simple et sécurisée avec la syntaxe struct literal{}. Le code est très facile à lire car vous pouvez vous concentrer uniquement sur les données de test.

Test piloté par table C

J'ai aussi écrit un test pour gcd () en C en table-driven. Même en C, la déclaration de structure et l'initialisation des variables peuvent être effectuées en même temps. Et l'initialisation peut être de type sécurisé avec la syntaxe struct literal{}.

gcd_test.c


#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))

int test_gcd() {
	struct {
		int a, b;
		int z;
	} cases[] = {
		{12, 8, 4},
		{3, 7, 1},
	};

	for (int i = 0; i < ARRAY_SIZE(cases); ++i) {
		if (gcd(cases[i].a, cases[i].b) != cases[i].z) {
			printf("expected gcd(%d,%d) == %d\n", cases[i].a, cases[i].b, cases[i].z);
		}
	}
}

Par rapport à Go, il n'y avait pas de grande différence dans la quantité de description et de lisibilité, et j'ai pu écrire un test basé sur une table en langage C.

en conclusion

Go est souvent appelé simple C, mais c'est aussi une bonne idée d'importer la culture Go dans C.

Recommended Posts

Ecrire un test piloté par table en C
Ecrire le test dans la docstring python
Je veux écrire en Python! (2) Écrivons un test
Ecrire une dichotomie en Python
Test de module multi-instance en langage C
ABC166 en Python A ~ C problème
Ecrire des algorithmes A * (A-star) en Python
Ecrire le code de test du sélénium en python
Résoudre ABC036 A ~ C avec Python
Ecrire un graphique à secteurs en Python
Ecrire le plugin vim en Python
Écrire une recherche de priorité en profondeur en Python
Résoudre ABC037 A ~ C avec Python
Ecrire un test unitaire de langage C en Python
Résoudre ABC175 A, B, C avec Python
Comment utiliser Google Test en langage C
Ecrire une courte définition de propriété en Python
Ecrire le fichier O_SYNC en C et Python
Ecrire un programme de chiffrement Caesar en Python
Ecrire une méthode de cupidité simple en Python
Ecrire un plugin Vim simple en Python 3
Créez un environnement de test Vim + Python en 1 minute
Configurez un serveur SMTP de test en Python.
Configurer un serveur UDP en langage C
Appel de scripts Python à partir de Python intégré en C ++ / C ++
J'ai essayé d'ajouter un module Python 3 en C
Comment écrire un document tuple nommé en 2020
N'hésitez pas à rédiger un test avec nez (dans le cas de + gevent)
Gérer les signaux en langage C
Essayez de créer un module Python en langage C
Ecrire un programme de dynamique moléculaire super simple en python
Ecrire DCGAN avec Keras
Écrire un décorateur en classe
J'ai essayé d'utiliser google test et CMake en C
Accéder à MongoDB en C
Essayez d'incorporer Python dans un programme C ++ avec pybind11
Ecrire Python dans MySQL
Next Python en langage C
dict in dict Transforme un dict en dict
Ecrire un histogramme à l'échelle logarithmique sur l'axe des x en python
Écrire du code dans UnitTest une application Web Python
Résoudre Atcoder ABC176 (A, B, C, E) en Python
API C en Python 3
Il est difficile d'écrire un algorithme très simple en php
Ecrire un réseau de co-auteurs dans un domaine spécifique en utilisant les informations d'arxiv
Comment rédiger un test de traitement utilisant BigQuery
Étendre python en C ++ (Boost.NumPy)
Intégration du langage machine en langage C
Prendre une capture d'écran en Python
Ecrire des filtres Pandec en Python
Tri de tas fait en langage C
Créer une fonction en Python
Créer un dictionnaire en Python
Ecrire l'entrée standard dans le code
Écrire une distribution bêta en Python
Algorithme en Python (jugement premier)
Ecrire une fonction de densité du noyau
Ecrire python dans Rstudio (réticulé)