Skip to content

Commit

Permalink
Merge pull request #1248 from ScottMcMichael/fix_vector_values_deseri…
Browse files Browse the repository at this point in the history
…alize
  • Loading branch information
varunagrawal authored Jul 18, 2022
2 parents b1f441d + f332d21 commit 0af17f4
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
1 change: 1 addition & 0 deletions gtsam/base/ConcurrentMap.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ class ConcurrentMap : public ConcurrentMapBase<KEY,VALUE> {
template<class Archive>
void load(Archive& ar, const unsigned int /*version*/)
{
this->clear();
// Load into STL container and then fill our map
FastVector<std::pair<KEY, VALUE> > map;
ar & BOOST_SERIALIZATION_NVP(map);
Expand Down
34 changes: 34 additions & 0 deletions gtsam/base/tests/testSerializationBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

#include <gtsam/inference/Key.h>

#include <gtsam/base/ConcurrentMap.h>
#include <gtsam/base/Matrix.h>
#include <gtsam/base/MatrixSerialization.h>
#include <gtsam/base/Vector.h>
Expand Down Expand Up @@ -106,6 +107,39 @@ TEST (Serialization, matrix_vector) {
EXPECT(equalityBinary<Matrix>((Matrix(2, 2) << 1.0, 2.0, 3.0, 4.0).finished()));
}

/* ************************************************************************* */
TEST (Serialization, ConcurrentMap) {

ConcurrentMap<int, std::string> map;

map.insert(make_pair(1, "apple"));
map.insert(make_pair(2, "banana"));

std::string binaryPath = "saved_map.dat";
try {
std::ofstream outputStream(binaryPath);
boost::archive::binary_oarchive outputArchive(outputStream);
outputArchive << map;
} catch(...) {
EXPECT(false);
}

// Verify that the existing map contents are replaced by the archive data
ConcurrentMap<int, std::string> mapFromDisk;
mapFromDisk.insert(make_pair(3, "clam"));
EXPECT(mapFromDisk.exists(3));
try {
std::ifstream ifs(binaryPath);
boost::archive::binary_iarchive inputArchive(ifs);
inputArchive >> mapFromDisk;
} catch(...) {
EXPECT(false);
}
EXPECT(mapFromDisk.exists(1));
EXPECT(mapFromDisk.exists(2));
EXPECT(!mapFromDisk.exists(3));
}

/* ************************************************************************* */


Expand Down

0 comments on commit 0af17f4

Please # to comment.