2009-01-12 15 views
0

J'arrive à la dernière étape de ma mise en œuvre (une version plus évolutive de String). Évidemment, je veux que toutes les opérations donnent le même résultat que les opérations sur String s autant que possible. Pour ce faire, les opérations ordinales sont assez simples, mais je m'inquiète de l'implémentation correcte des opérations sensibles à la culture. D'autant que je ne connais que deux langues et que, dans les deux cas, les opérations sensibles à la culture se comportent exactement comme les opérations ordinales!Recherche de cas de bordure d'opérations de chaîne. De quoi ai-je besoin pour tester?

Alors, y at-il des choses spécifiques que je pourrais tester et obtenir au moins une certaine confiance que je fais les choses correctement? Je sais, par exemple, que ß est égal à SS en ignorant les cas en allemand; à propos de i pointillé et non marqué en turc.

Répondre

2

paires Surrogate, si vous prévoyez de les soutenir - y compris les combinaisons non valides (par exemple une seule partie d'un). Si vous faites du codage et du décodage, assurez-vous de conserver suffisamment d'états pour recevoir arbitrairement des blocs de données binaires à décoder qui peuvent se terminer à mi-chemin d'un caractère, la moitié restante venant dans le caractère suivant.

+0

Aucun codage/décodage, mais les substituts peuvent finir par être un réel problème. –

1

Le test turc est le meilleur je sais :)

1

Vous devez imiter les implémentations de méthodes String et utiliser la bibliothèque principale pour le faire pour vous. Il est très difficile de prendre en compte tous les aspects possibles de chaque culture. Au lieu de réinventer la roue, utilisez un réflecteur sur les méthodes String et consultez les appels internes. Par exemple, String.Compare utilise CultureInfo.CurrentCulture.CompareInfo.Compare pour comparer 2 chaînes de la culture actuelle.

+0

Oui, c'est le plan. Cependant, les méthodes CultureInfo prennent des chaînes. Cela signifie que j'ai besoin de convertir une partie de ma corde en une ficelle. La question est, ai-je assez d'informations pour savoir quelle partie? –

+0

Par exemple, lors de la vérification de EndsWith (suffixe de chaîne), suffit-il de prendre les derniers caractères suffix.Length de ma corde? Probablement pas toujours. Est-ce suffisant pour prendre le dernier suffixe.Longueur + 5 caractères? Probablement oui. –

+0

Vous n'avez pas besoin de savoir, il suffit de passer la chaîne de corde à la méthode CultureInfo appropriée: CultureInfo.CurrentCulture.CompareInfo.IsSuffix (rope.ToString(), suffixe, CompareOptions.None); // Provenant de String.EndsWith – Diadistis