Commit 1ed6c584 authored by Kazunori Fujiwara's avatar Kazunori Fujiwara
Browse files

Merge branch 'trac3015' into trac3016

parents b3d42b39 e5b3471d
......@@ -393,11 +393,6 @@ numberFromStringstream(std::istream& in, int& pos) {
// that can also hold an e value? (and have specific getters if the
// value is larger than an int can handle)
//
// Type of IntElement is changed from long int to int64_t.
// However, strtoint64_t function does not exist.
// It is assumed that "long long" and int64_t are the same sizes.
// strtoll is used to convert string to integer.
//
ElementPtr
fromStringstreamNumber(std::istream& in, int& pos) {
std::string number = numberFromStringstream(in, pos);
......
......@@ -166,6 +166,8 @@ public:
/// the right type. Set the value and return true if the Elements
/// is of the correct type
///
/// Notes: Read notes of IntElement definition about the use of
/// long long int, long int and int.
//@{
virtual bool setValue(const long long int v);
bool setValue(const long int i) { return (setValue(static_cast<long long int>(i))); };
......@@ -273,6 +275,9 @@ public:
/// underlying system).
/// (Note that that is different from an NullElement, which
/// represents an empty value, and is created with Element::create())
///
/// Notes: Read notes of IntElement definition about the use of
/// long long int, long int and int.
//@{
static ElementPtr create();
static ElementPtr create(const long long int i);
......@@ -373,6 +378,16 @@ public:
//@}
};
/// Notes: IntElement type is changed to int64_t.
/// Due to C++ problems on overloading and automatic type conversion,
/// (C++ tries to convert integer type values and reference/pointer
/// if value types do not match exactly)
/// We decided the storage as int64_t,
/// three (long long, long, int) override function defintions
/// and cast int/long/long long to int64_t via long long.
/// Therefore, call by value methods (create, setValue) have three
/// (int,long,long long) definitions. Others use int64_t.
///
class IntElement : public Element {
int64_t i;
private:
......
......@@ -205,7 +205,9 @@ testGetValueInt() {
std::map<std::string, ConstElementPtr> m;
el = Element::create(1);
EXPECT_NO_THROW(el->intValue());
EXPECT_NO_THROW({
EXPECT_EQ(1, el->intValue());
});
EXPECT_THROW(el->doubleValue(), TypeError);
EXPECT_THROW(el->boolValue(), TypeError);
EXPECT_THROW(el->stringValue(), TypeError);
......@@ -220,25 +222,33 @@ testGetValueInt() {
EXPECT_EQ(1, i);
el = Element::create(9223372036854775807LL);
EXPECT_NO_THROW(el->intValue());
EXPECT_NO_THROW({
EXPECT_EQ(9223372036854775807LL, el->intValue());
});
EXPECT_TRUE(el->getValue(i));
EXPECT_EQ(9223372036854775807LL, i);
ll = 9223372036854775807LL;
el = Element::create(ll);
EXPECT_NO_THROW(el->intValue());
EXPECT_NO_THROW({
EXPECT_EQ(ll, el->intValue());
});
EXPECT_TRUE(el->getValue(i));
EXPECT_EQ(ll, i);
i32 = 2147483647L;
el = Element::create(i32);
EXPECT_NO_THROW(el->intValue());
EXPECT_NO_THROW({
EXPECT_EQ(i32, el->intValue());
});
EXPECT_TRUE(el->getValue(i));
EXPECT_EQ(i32, i);
l = 2147483647L;
el = Element::create(l);
EXPECT_NO_THROW(el->intValue());
EXPECT_NO_THROW({
EXPECT_EQ(l, el->intValue());
});
EXPECT_TRUE(el->getValue(i));
EXPECT_EQ(l, i);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment