2017-04-19 5 views
2

Ma classe doit imposer une limite supérieure au nombre d'éléments de l'un de ses membres de données, qui se trouve être un conteneur.longue std :: initializer_list avec de nombreux éléments à tester

L'un des constructeurs de ma classe prend une std :: initializer_list en tant que paramètre pour initialiser ce membre de données de conteneur.

Un test unitaire doit vérifier que la limite supérieure est en place. Pour cela, je dois essayer d'appeler mon constructeur avec une liste d'initialisation avec 1025 éléments.

Existe-t-il une meilleure façon (= plus lisible) de créer cette liste initializer 1025 éléments que d'avoir une liste littérale contreventée de 1025 éléments dans le code de test?

(Le est toujours à court non signé type de données des éléments (uint16_t), ma classe n'est pas un modèle.)

+1

Vous pourriez faire la classe un modèle avec le nombre maximum d'éléments le seul paramètre de modèle (par défaut à 1024), mais testez des nombres plus petits (disons 4), quand tout ce dont vous avez besoin est un 'std :: initializer_list' de 5 éléments, pas 1025. – Walter

+0

Intéressant. J'ai un peu de mal avec ça, car alors, à proprement parler, je vérifierais le comportement d'une autre classe (ou d'une instanciation de modèle), pas la classe que j'utilise réellement en production. Mais quelque chose à considérer. –

+0

vous pourriez utiliser une spécification de gabarit pour générer les 1024 éléments à la compilation. –

Répondre

3

Si vous optez pour récursion modèle, ou de fantaisie « répéter » macros, vous êtes peut-allez être frappé par des limites de récursion statique, ce qui compliquera encore plus votre implémentation que d'habitude.

Avec cela à l'esprit, je pense que la plus simple et la meilleure approche est juste de définir des macros imbriquées, à savoir

#define ZEROS_10 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 
#define ZEROS_50 ZEROS_10, ZEROS_10, ZEROS_10, ZEROS_10, ZEROS_10 
#define ZEROS_250 ZEROS_50, ZEROS_50, ZEROS_50, ZEROS_50, ZEROS_50 
#define ZEROS_1K ZEROS_250, ZEROS_250, ZEROS_250, ZEROS_250 

FooType f{ ZEROS_1K, ZEROS_10, ZEROS_10, 0, 0, 0, 0, 0 }; 
+0

On dirait bien. Simple, très lisible, permet d'obtenir le résultat souhaité. Je vous remercie! –