IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Test sur des records


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Tchaill39
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 110
    Par défaut Test sur des records
    J'aurais aimé savoir s'il était possible, lors d'un test entre deux records de tester les records plutot que les composantes une à une.

    Par exemple pour un record de coordonnées

    Tpoint_etude = record
    X : real;
    Y : real;
    end;

    Au lieu de faire
    if (point1.X=point2.X) and (point1.Y=point2.Y)

    j'aimerais faire un truc du genre if point1=point2

    mais ca marche pas....

  2. #2
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Ben nan, pas de bol !

    Tout au plus, écris une fonction qui réalise le test à ta place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function PointEquals(const PE1, PE2: Tpoint_etude): boolean;
    begin
      Result := (PE1.X=PE2.X) and (PE1.Y=PE2.Y)
    End;
    Remarque : Attention à la comparaison directe de deux réels (comme ci-dessus) si ces derniers sont issus de calculs (la précision est limitée), le test peut produire des résultats erronés.

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Tests avec CompareMem
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Le comparaison avec CompareMem peut suffire pour des structures très simple est limitée

    mais
    - comme le dit e-ric, dans le cas de float, 2 réel peuvent être visuellement identique, alors que leur représentation binaires ne le sont pas (arrondis...)
    - et, si la structure possède des pointeurs vers d'autres struc ou classe, il y aura uniquement comparaison des pointeurs et non du contenu des pointeurs.

    Le mieux, si le jeu en vaut la chandelle, est peut-être de transformer ton record en class, avec une méthode de comparaison intégrée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TPointClass = class( TObject)
      X, Y : real;
      //... un constructeur initialisant X et Y serait le bienvenu
      function EgalA( P: TPointClass ): Boolean;
    end;
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function  TPointClass( P: TPointClass ): Integer;
    begin
      Result := ( Abs( X - P.X ) < DELTA ) and ( abs( Y - P.Y ) < DELTA);
    end;
    Avec DELTA = 10E-6 par exemple...

    Utilisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var 
      P1, P2: TPointClass;
      BEgal: Boolean;
    begin
      ... instanciation + alimentation de P1 et P2
      BEgal := P1.EgalA( P2 );
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Méthode de tests sur des fonctions C
    Par yas13 dans le forum C
    Réponses: 3
    Dernier message: 26/06/2008, 18h20
  2. [XSD] comment faire des tests sur des éléments
    Par attila771 dans le forum Valider
    Réponses: 1
    Dernier message: 11/10/2007, 12h32
  3. [BO XIr2] Tests sur des différences entre dates
    Par Enthau dans le forum Deski
    Réponses: 4
    Dernier message: 27/07/2007, 10h49
  4. Problèmes Test sur des dates
    Par guigui11 dans le forum ASP
    Réponses: 1
    Dernier message: 11/12/2006, 16h18
  5. [JUnit] Les tests sur des interfaces graphiques
    Par adilo dans le forum Tests et Performance
    Réponses: 5
    Dernier message: 01/02/2006, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo