| Propriété | Valeur |
|---|---|
| Catégorie | Contraintes (JustDummies.Constraints) |
| Sévérité | 🟠 Avertissement |
| Activée par défaut | Oui |
Les contraintes constantes réduisent le domaine entier à rien : la chaîne lève une ConflictingAnyConstraintException dès l’exécution de la ligne d’arrangement.
La bibliothèque calcule cela par un unique test de vacuité sur les bornes, le treillis et la liste d’autorisation. Cette règle exécute le même test sur les constantes écrites au site d’appel — et se tait pour tout argument qu’elle ne peut pas replier.
Non conforme
Any.Int32().Between(1, 10).MultipleOf(20) // aucun multiple de 20 dans [1, 10]
Any.Int32().GreaterThan(10).LessThan(3) // intervalle vide
Any.Int32().Positive().Negative() // vide par construction
Any.Int32().Zero().NonZero() // la seule valeur restante est ensuite interdite
Any.Int32().OneOf(5).Except(5) // la liste d'autorisation est vidée
Conforme
Any.Int32().Between(1, 10).MultipleOf(5)
Any.Int32().GreaterThan(-100).LessThan(100)
Any.Int32().OneOf(1, 2, 3).Except(2)
Portée, et une limite qui mérite d’être connue
Générateurs entiers uniquement — Int32, Int16, Int64, Byte, SByte, UInt16, UInt32, UInt64. Le modèle est de l’arithmétique entière, et un domaine flottant ou décimal ne se comporte pas ainsi.
Les bornes vont jusqu’aux extrêmes représentables. Any.Int64().LessThanOrEqualTo(long.MinValue) est une chaîne légale qui produit exactement une valeur, et n’est pas signalée ; seule une borne réclamant quelque chose de réellement hors plage — GreaterThan(long.MaxValue) — vide le domaine. La première version de cette règle s’est trompée là-dessus, en prenant -long.MaxValue comme sentinelle « non borné », ce qui rendait long.MinValue inexprimable et condamnait une chaîne que la propre suite de la bibliothèque affirme légale.
Le modèle raisonne en long, où toute valeur des sept autres familles tient. Un ulong au-delà de long.MaxValue n’y tient pas : il est laissé sans jugement plutôt que tronqué en une borne qui voudrait dire autre chose.
Ce qui n’est pas signalé
- Une chaîne dont un argument ne se replie pas en constante.
- Une borne
UInt64au-delà delong.MaxValue— hors de la plage du modèle, la chaîne est laissée tranquille. - Une chaîne répartie sur plusieurs instructions — elle doit être une seule expression.
- Une contrainte que le modèle ne suit pas : la marche s’arrête plutôt que de deviner.
- Un test négatif vérifiant un conflit.