diff options
Diffstat (limited to 'host')
| -rw-r--r-- | host/include/uhd/types/dict.hpp | 14 | ||||
| -rw-r--r-- | host/include/uhd/types/dict.ipp | 18 | ||||
| -rw-r--r-- | host/tests/dict_test.cpp | 39 | 
3 files changed, 71 insertions, 0 deletions
| diff --git a/host/include/uhd/types/dict.hpp b/host/include/uhd/types/dict.hpp index b8537a3c2..51594e17b 100644 --- a/host/include/uhd/types/dict.hpp +++ b/host/include/uhd/types/dict.hpp @@ -100,6 +100,20 @@ namespace uhd{          Val &operator[](const Key &key);          /*! +         * Equals operator for the dict type +         * \param other the dict being compared to this +         * \return whether or not the two dict's are equal +         */ +        bool operator==(const dict<Key, Val> &other) const; + +        /*! +         * Not equal operator for the dict type +         * \param other the dict being compared to this +         * \return whether or not the two dict's are not equal +         */ +        bool operator!=(const dict<Key, Val> &other) const; + +        /*!           * Pop an item out of the dictionary.           * \param key the item key           * \return the value of the item diff --git a/host/include/uhd/types/dict.ipp b/host/include/uhd/types/dict.ipp index 26de1f08e..9ff64ee2b 100644 --- a/host/include/uhd/types/dict.ipp +++ b/host/include/uhd/types/dict.ipp @@ -113,6 +113,24 @@ namespace uhd{      }      template <typename Key, typename Val> +    bool dict<Key, Val>::operator==(const dict<Key, Val> &other) const{ +        if (this->size() != other.size()){ +            return false; +        } +        for(auto &p : _map){ +            if (not (other.has_key(p.first) and other.get(p.first) == p.second)){ +                return false; +            } +        } +        return true; +    } + +    template <typename Key, typename Val> +    bool dict<Key, Val>::operator!=(const dict<Key, Val> &other) const{ +        return not (*this == other); +    } + +    template <typename Key, typename Val>      Val dict<Key, Val>::pop(const Key &key){          typename std::list<pair_t>::iterator it;          for (it = _map.begin(); it != _map.end(); it++){ diff --git a/host/tests/dict_test.cpp b/host/tests/dict_test.cpp index 6b0285b8a..53432d533 100644 --- a/host/tests/dict_test.cpp +++ b/host/tests/dict_test.cpp @@ -84,4 +84,43 @@ BOOST_AUTO_TEST_CASE(test_dict_update)      BOOST_CHECK_THROW(d3.update(d2), uhd::value_error);  } +BOOST_AUTO_TEST_CASE(test_dict_equals) +{ +    typedef uhd::dict<std::string, std::string> dict_ss; +    // Original dict +    dict_ss d0; +    d0["key1"] = "val1"; +    d0["key2"] = "val2"; +    // Same keys and vals as d1, but different order +    dict_ss d1; +    d1["key2"] = "val2"; +    d1["key1"] = "val1"; +    // Same vals, different keys +    dict_ss d2; +    d2["key1"] = "val1"; +    d2["key3"] = "val2"; +    // Same keys, different vals +    dict_ss d3; +    d3["key1"] = "val1"; +    d3["key2"] = "val3"; +    // Superset of d0 +    dict_ss d4; +    d4["key1"] = "val1"; +    d4["key2"] = "val2"; +    d4["key4"] = "val3"; +    // Subset of d0 +    dict_ss d5; +    d5["key1"] = "val1"; +    // Check that d0 and d1 are equal +    BOOST_CHECK(d0 == d1); +    BOOST_CHECK(d1 == d0); +    // Check that all other dictionaries are not equal to d0 +    BOOST_CHECK(d0 != d2); +    BOOST_CHECK(d0 != d3); +    BOOST_CHECK(d0 != d4); +    BOOST_CHECK(d0 != d5); +    // Redundant, but just to be sure +    BOOST_CHECK(not (d0 == d2)); +    BOOST_CHECK(not (d0 == d3)); +} | 
