[search] An attempt to check locale in the tools.

This commit is contained in:
Maxim Pimenov 2019-03-19 15:18:04 +03:00 committed by Tatiana Yan
parent db525bf908
commit 750aaacada
5 changed files with 43 additions and 1 deletions

View file

@ -17,6 +17,7 @@ DEFINE_string(data_path, "", "Path to data directory");
int main(int argc, char ** argv)
{
search::ChangeMaxNumberOfOpenFiles(search::kMaxOpenFiles);
search::CheckLocale();
google::SetUsageMessage("Features collector tool.");
google::ParseCommandLineFlags(&argc, &argv, true);

View file

@ -106,6 +106,7 @@ void DisplayStats(ostream & os, vector<Sample> const & samples, vector<Stats> co
int main(int argc, char * argv[])
{
ChangeMaxNumberOfOpenFiles(kMaxOpenFiles);
CheckLocale();
google::SetUsageMessage("Features collector tool.");
google::ParseCommandLineFlags(&argc, &argv, true);

View file

@ -1,7 +1,12 @@
#include "search/search_quality/helpers.hpp"
#include "base/assert.hpp"
#include "base/string_utils.hpp"
#include "std/target_os.hpp"
#include <memory>
#include <sys/resource.h>
using namespace std;
@ -26,6 +31,38 @@ void ChangeMaxNumberOfOpenFiles(size_t n)
setrlimit(RLIMIT_NOFILE, &rlp);
#endif
}
void CheckLocale()
{
string const kJson = "{\"coord\":123.456}";
string const kErrorMsg = "Bad locale. Consider setting LC_ALL=C";
double coord;
{
base::Json root(kJson.c_str());
FromJSONObject(root.get(), "coord", coord);
}
string line;
{
auto root = base::NewJSONObject();
ToJSONObject(*root, "coord", coord);
unique_ptr<char, JSONFreeDeleter> buffer(
json_dumps(root.get(), JSON_COMPACT | JSON_ENSURE_ASCII));
line.append(buffer.get());
}
CHECK_EQUAL(line, kJson, (kErrorMsg));
{
string const kTest = "123.456";
double value;
VERIFY(strings::to_double(kTest, value), (kTest));
CHECK_EQUAL(strings::to_string(value), kTest, (kErrorMsg));
}
}
} // namespace search
namespace m2
@ -93,7 +130,7 @@ void ToJSONObject(json_t & root, char const * field, PointD const & point)
json_object_set_new(&root, field, json.release());
}
bool FromJSONObjectOptional(json_t * root, std::string const & field, PointD & point)
bool FromJSONObjectOptional(json_t * root, string const & field, PointD & point)
{
return FromJSONObjectOptional(root, field.c_str(), point);
}

View file

@ -13,6 +13,8 @@ namespace search
size_t constexpr kMaxOpenFiles = 4000;
void ChangeMaxNumberOfOpenFiles(size_t n);
void CheckLocale();
} // namespace search
namespace m2

View file

@ -351,6 +351,7 @@ void CheckCompleteness(string const & path, m2::RectD const & viewport, DataSour
int main(int argc, char * argv[])
{
ChangeMaxNumberOfOpenFiles(kMaxOpenFiles);
CheckLocale();
ios_base::sync_with_stdio(false);
Platform & platform = GetPlatform();