Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Consider adding equality operators for various objects in the datamodel

Aperta
#103 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
cpp
Ambito
api

Direzione di ricerca

Inizia in include/up-cpp/uri/tools/Utils.h alle righe 188-201, quindi esamina i test di uguaglianza delle utility URI e il caso URI_UTILS testUResourceEquals dell’issue. Verifica che l’uguaglianza per gli handle UResource gestisca in modo coerente i nomi e i campi opzionali di istanza o messaggio, quindi esegui i test pertinenti delle utility URI per confermare il caso che fallisce e che i confronti correlati siano stati risolti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement

The logic in the '==' operators for URI (and its components do not seem to be correct).

https://github.com/eclipse-uprotocol/up-cpp/blob/494b3313b55aaefe5b8b0376dd761b75fa96a78a/include/up-cpp/uri/tools/Utils.h#L188C1-L201C6

This code is only comparing the instance portion of the URI if the left hand side includes the instance. However the logic should really be like this:

    [[nodiscard]] [[maybe_unused]] auto static
    operator==(const uprotocol::v1::UResource &s, const uprotocol::v1::UResource &o) -> bool {
        // Resources are consider equal if:
        // 1. Names are equal
        // 2. Both Resources do not have an instance OR
        //    both Resource do have an instance and they are the same
        // 3. Both Resources do not have a message OR
        //    both resources have a message and they are the same
        return (s.name() == o.name()) && // Condition 1
               // Condition 2
               ((!s.has_instance() && !o.has_instance()) ||
                (s.has_instance() && o.has_instance() && s.instance() == o.instance())) && // Condition 2
               // Condition 3
               ((!s.has_message() && !o.has_message()) ||
                (s.has_message() && o.has_message() && s.message() == o.message())); // if exists must be same message
    }

A simple test case (it fails right now) shows the problem with the code as is:

TEST(URI_UTILS, testUResourceEquals) {
    using uprotocol::uri::BuildUResource;
    using uprotocol::v1::UResource;
    using uprotocol::uri::operator==;

    // Resource 1 - No Instance
    auto resource_1{BuildUResource().setName("rpc").build()};
    // Resource 2 - With Instance
    auto resource_2{BuildUResource().setName("rpc").setInstance("CreateTopic").build()};
    EXPECT_FALSE(resource_1 == resource_2);
}
Lingua principale
C++
Stelle
29
Fork
32
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di eclipse-uprotocol/up-cpp

Tutte le issue di eclipse-uprotocol/up-cpp

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.