Génération aléatoire d'objets.

Description

Version 1.12.

Ce code contient une classe qui posséde des propriétés qui permettent de générer aléatoirement les types couramment utilisés.
Cette classe a pour but d'être employée par des utilitaires de test d'autres classes, utilisant des données aléatoires.

Cette source ne se prétend pas exhaustive, tous les types de base ne sont pas encore présent.
Il serait intéressant d'implémenter l'utilisation de schémas de distribution de probabilité pour permettre à cette classe d'étendre sa finalité. J'ai commencé cela par l'implémentation de probabilité d'objet pour la génération d'objet aléatoire via la propriété RandomTools.RandomObject modulé par la propriété RandomTools.ObjectProbabilities, et à présent avec la propriété RandomTools.CharProbabilities.

Une documentation au format html est jointe à cette source, elle est extraite des données xml générées par le compilateur du framework .Net 1.1 à l'aide de NDoc 3.1.3 distribué sous licence OSI (http://ndoc.sourceforge.net, http://www.opensource.org/). Seuls les liens externe de la documentation sont manquant (par exemple le lien vers ICollection ou TextBox).

La source est d'abord compacté dans le format .tar, puis dans le format .zip pour tenir en moins de 500 Ko.

Source / Exemple :


L'archive contient un fichier lisez-moi.txt détaillant son contenu ainsi que des informations de compilation. Elle contient aussi un schéma en pdf détaillant les relations entre les différentes propriétés et méthodes de la classe RandomTools.
Concernant la source, il s'agit d'une unique classe, possédant de nombreuses propriétés, n'ayant pas pour but d'être optimisée mais pratique.
Quelques explications concernant la classe:
Ces propriétés générent des objets aléatoires dont les bornes sont contrôlables par d'autres propriétés.
  ex: RandomTools.RandomInt permet de générer un entier aléatoire. Sa valeur est comprise entre RandomTools.LeftInterval et RandomTools.RightInterval.
Les Propriétés de génération aléatoire sont utilisées entre elles, pour générer des objets plus complexes. Ex: RandomTools.RandomIntArray retourne un tableau d'entier aléatoire. Les entiers qui le compose sont générés par RandomTools.RandomInt.
L'interface IRandomizable spécifie que la classe qui l'implémente peut retourner une de ses instances aléatoires, par le biais de la propriété Random. Cette interface sera utilisée pour rechercher dans un répertoire (par exemple) les objets générables automatiquement, et pour les utiliser dans RandomObject et RandomType.
La propriété RandomTools.DefaultValues permet de bloquer la génération d'objets pour ne générer que des objets par défaut. Par exemple, l'objet de type string par défaut est "".
La méthode RandomTools.RandomInstance(Type t) permet de générer un objet aléatoire instanciant le type spécifié : si le type est géré par randomtools, la propriété correspondante de randomtools est utilisée, sinon, un constructeur de l'objet est choisi aléatoirement, et ses paramètres sont choisis aléatoirement. Elle fonctionne aussi pour les types tableaux.
La méthode RandomTools.RandomEnum(Type t) retourne une valeur du type énumération spécifié, et la propriété RandomTools.RandomEnumType retourne un type énumératif aléatoire.
Les bornes de générations de ces objets sont controlées par une structure RandomToolsParams.

Conclusion :


Cette source sera mise à jour.

La source CommandLineTools adjointe à la source RandomTools peut être utilisée dans d'autres de mes sources, mais leurs versions ne sont pas forcemment à jour.

La propriété RandomTools.RandomFloat a posé problème,et je n'ai pas la certitude totale de les avoir tous réglés - mise à part l'utilisation concluante de randomtoolstest sur des milliers de cas isolés.

La méthode RandomTools.RandomInstance a elle aussi posé problème pour la génération de tableaux de types non présents dans l'assembly de RandomTools, mais cela a été réglé par le fait que l'assembly du type tableau est l'assembly de son sous-type. Cependant, il subsiste tout de même un petit artifice que j'aimerais bien supprimer par quelquechose de plus propre: obtenir le sous type d'un type tableau (pour l'instant je l'obtiens à partir de sa représentation sous forme de chaine, et ça marche très bien). La méthode RandomInstance ne prend pas en charge le type Array pour l'instant, mais gère ses types dérivés (int[] ou string[][] par exemple). Elle ne prend pas non plus en charge les paramètres out.

L'interface IRandomizable a pour but la création d'une classe centralisant les objets générables aléatoirement, en scannant toutes les assembly chargées (comme nous pourrions le faire pour des plugins), et en fournissant une interface chaine (à travailler) pour les utiliser (à la manière de printf), ou en agrémentant les types disponibles pour RandomTools.RandomObject,RandomTools.RandomType.

Les méthodes privées RandomTools.RandomAboveFloat et RandomTools.RandomBetweenFloat n'ont pas été testées, elles sont cependant restées car utilisées par la première version de RandomTools.RandomFloat, qui était au point, mais ne générait pas toute la gamme de flottants dans un intervalle déterminé.

La propriété RandomEnumType ouvre le champ sur de nouvelles possibilités de génération aléatoire.
RandomTools.RandomEnum et RandomTools.RandomEnumType ne sont pas encore ajoutées à RandomTools.RandomObject.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.