/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "qpid/framing/FieldValue.h" #include "unit_test.h" #include namespace qpid { namespace tests { QPID_AUTO_TEST_SUITE(FieldValueTestSuite) using namespace qpid::framing; Str16Value s("abc"); IntegerValue i(42); FloatValue f(42.42); DoubleValue df(123.123); QPID_AUTO_TEST_CASE(testStr16ValueEquals) { BOOST_CHECK(Str16Value("abc") == s); BOOST_CHECK(Str16Value("foo") != s); BOOST_CHECK(s != i); BOOST_CHECK(s.convertsTo() == true); BOOST_CHECK(s.convertsTo() == false); BOOST_CHECK(s.get() == "abc"); BOOST_CHECK_THROW(s.get(), InvalidConversionException); } QPID_AUTO_TEST_CASE(testIntegerValueEquals) { BOOST_CHECK(i.get() == 42); BOOST_CHECK(IntegerValue(42) == i); BOOST_CHECK(IntegerValue(5) != i); BOOST_CHECK(i != s); BOOST_CHECK(i.convertsTo() == false); BOOST_CHECK(i.convertsTo() == true); BOOST_CHECK(i.convertsTo() == true); BOOST_CHECK_THROW(i.get(), InvalidConversionException); BOOST_CHECK_EQUAL(i.get(), 42.0); } QPID_AUTO_TEST_CASE(testFloatValueEquals) { BOOST_CHECK(f.convertsTo() == true); BOOST_CHECK(FloatValue(42.42) == f); BOOST_CHECK_CLOSE(double(f.get()), 42.42, 0.001); // Check twice, regression test for QPID-6470 where the value was corrupted during get. BOOST_CHECK(FloatValue(42.42) == f); BOOST_CHECK_CLOSE(f.get(), 42.42, 0.001); // Float to double conversion BOOST_CHECK(f.convertsTo() == true); BOOST_CHECK_CLOSE(f.get(), 42.42, 0.001); // Double value BOOST_CHECK(f.convertsTo() == true); BOOST_CHECK(f.convertsTo() == true); BOOST_CHECK_CLOSE(double(df.get()), 123.123, 0.001); BOOST_CHECK_CLOSE(df.get(), 123.123, 0.001); // Invalid conversions should fail. BOOST_CHECK(!f.convertsTo()); BOOST_CHECK(!f.convertsTo()); BOOST_CHECK_THROW(f.get(), InvalidConversionException); BOOST_CHECK_THROW(f.get(), InvalidConversionException); // getFloatingPointValue: check twice, regression test for QPID-6470 BOOST_CHECK_CLOSE((double(f.getFloatingPointValue())), 42.42, 0.001); BOOST_CHECK_CLOSE((double(f.getFloatingPointValue())), 42.42, 0.001); BOOST_CHECK_CLOSE((df.getFloatingPointValue()), 123.123, 0.001); // getFloatingPointValue should *not* convert float/double, require exact type. BOOST_CHECK_THROW((f.getFloatingPointValue()), InvalidConversionException); BOOST_CHECK_THROW((double(df.getFloatingPointValue())), InvalidConversionException); } QPID_AUTO_TEST_SUITE_END() }} // namespace qpid::tests