210 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * Copyright (c) 2021 OceanBase
 | |
|  * OceanBase CE is licensed under Mulan PubL v2.
 | |
|  * You can use this software according to the terms and conditions of the Mulan PubL v2.
 | |
|  * You may obtain a copy of Mulan PubL v2 at:
 | |
|  *          http://license.coscl.org.cn/MulanPubL-2.0
 | |
|  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | |
|  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | |
|  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | |
|  * See the Mulan PubL v2 for more details.
 | |
|  */
 | |
| 
 | |
| #include <gtest/gtest.h>
 | |
| #include "lib/number/ob_number_v2.h"
 | |
| #include "ob_expr_test_utils.h"
 | |
| 
 | |
| using namespace oceanbase::common;
 | |
| using namespace oceanbase::sql;
 | |
| 
 | |
| class ObGetInt64Test: public ::testing::Test
 | |
| {
 | |
|   public:
 | |
|   ObGetInt64Test();
 | |
|     virtual ~ObGetInt64Test();
 | |
|     virtual void SetUp();
 | |
|     virtual void TearDown();
 | |
|   private:
 | |
|     // disallow copy
 | |
|     ObGetInt64Test(const ObGetInt64Test &other);
 | |
|     ObGetInt64Test& operator=(const ObGetInt64Test &other);
 | |
|   protected:
 | |
|     // data members
 | |
| };
 | |
| 
 | |
| ObGetInt64Test::ObGetInt64Test()
 | |
| {
 | |
| }
 | |
| 
 | |
| ObGetInt64Test::~ObGetInt64Test()
 | |
| {
 | |
| }
 | |
| 
 | |
| void ObGetInt64Test::SetUp()
 | |
| {
 | |
| }
 | |
| 
 | |
| void ObGetInt64Test::TearDown()
 | |
| {
 | |
| }
 | |
| #define IS_VALID_UINT64(nmb, expected_ret, expected_out) \
 | |
| {                                                     \
 | |
|   uint64_t tmp = 0;                                      \
 | |
|   bool ret = nmb.is_valid_uint64(tmp);                                    \
 | |
|   EXPECT_TRUE(ret == expected_ret);                     \
 | |
|   if (ret) \
 | |
|   EXPECT_TRUE(tmp == expected_out##ULL);                        \
 | |
| }while(0)
 | |
| 
 | |
| #define IS_VALID_INT64(nmb, expected_ret, expected_out) \
 | |
| {                                                     \
 | |
|   int64_t tmp = 0;                                      \
 | |
|   bool ret = nmb.is_valid_int64(tmp);                                    \
 | |
|   EXPECT_TRUE(ret == expected_ret);                     \
 | |
|   if (ret)                                              \
 | |
|   EXPECT_TRUE(tmp == expected_out##ULL);                        \
 | |
| }while(0)
 | |
| 
 | |
| #define IS_INT_PARTS_VALID_INT64(nmb, expected_ret, expected_int,expected_out) \
 | |
| {                                                     \
 | |
|   int64_t inter = 0;      \
 | |
|   int64_t decimal = 0;      \
 | |
|   bool ret = nmb.is_int_parts_valid_int64(inter,decimal);                                    \
 | |
|   EXPECT_TRUE(ret == expected_ret);                     \
 | |
|   if (ret)  { \
 | |
|   EXPECT_TRUE(inter == expected_int);                        \
 | |
|   EXPECT_TRUE(decimal == expected_out); }                       \
 | |
| }while(0)
 | |
| 
 | |
| TEST_F(ObGetInt64Test, is_valid_uint64_test)
 | |
| {
 | |
|   ObMalloc buf;
 | |
|   number::ObNumber nmb1;
 | |
|   nmb1.from("12345678912345678912345678999999933456789887666", buf);
 | |
|   number::ObNumber nmb2;
 | |
|   nmb2.from("0", buf);
 | |
|   number::ObNumber nmb3;
 | |
|   nmb3.from("111111111.2", buf);
 | |
|   number::ObNumber nmb4;
 | |
|   nmb4.from("111111111.123456789123456789", buf);
 | |
|   number::ObNumber nmb5;
 | |
|   nmb5.from("12345678", buf);
 | |
|   number::ObNumber nmb6;
 | |
|   nmb6.from("-123456789123456789123456789", buf);
 | |
|   number::ObNumber nmb7;
 | |
|   nmb7.from("-111111111.2", buf);
 | |
|   number::ObNumber nmb8;
 | |
|   nmb8.from("-111111111.123456789123456789", buf);
 | |
|   number::ObNumber nmb9;
 | |
|   nmb9.from("9999999999999.9", buf);
 | |
|   number::ObNumber nmb10;
 | |
|   nmb10.from("9.0", buf);
 | |
|   number::ObNumber nmb11;
 | |
|   nmb11.from("-9999999999999.9", buf);
 | |
|   number::ObNumber nmb12;
 | |
|   nmb12.from("18446744073709551615", buf);
 | |
|   number::ObNumber nmb13;
 | |
|   nmb13.from("18446744073709551616", buf);
 | |
|   IS_VALID_UINT64(nmb1,false,0);
 | |
|   IS_VALID_UINT64(nmb2,true,0);
 | |
|   IS_VALID_UINT64(nmb3,false,0);
 | |
|   IS_VALID_UINT64(nmb4,false,0);
 | |
|   IS_VALID_UINT64(nmb5,true,12345678);
 | |
|   IS_VALID_UINT64(nmb6,false,0);
 | |
|   IS_VALID_UINT64(nmb7,false,0);
 | |
|   IS_VALID_UINT64(nmb8,false,0);
 | |
|   IS_VALID_UINT64(nmb9,false,0);
 | |
|   IS_VALID_UINT64(nmb10,true,9);
 | |
|   IS_VALID_UINT64(nmb11,false,0);
 | |
|   IS_VALID_UINT64(nmb12,true,18446744073709551615);
 | |
|   IS_VALID_UINT64(nmb13,false,0);
 | |
| }
 | |
| 
 | |
| TEST_F(ObGetInt64Test, is_int_valid_int64_test)
 | |
| {
 | |
|   ObMalloc buf;
 | |
|   number::ObNumber nmb1;
 | |
|   nmb1.from("12345678912345678912345678999999933456789887666", buf);
 | |
|   number::ObNumber nmb2;
 | |
|   nmb2.from("0", buf);
 | |
|   number::ObNumber nmb3;
 | |
|   nmb3.from("111111111.2", buf);
 | |
|   number::ObNumber nmb4;
 | |
|   nmb4.from("111111111.123456789123456789", buf);
 | |
|   number::ObNumber nmb5;
 | |
|   nmb5.from("12345678", buf);
 | |
|   number::ObNumber nmb6;
 | |
|   nmb6.from("-123456789123456789123456789", buf);
 | |
|   number::ObNumber nmb7;
 | |
|   nmb7.from("-111111111.2", buf);
 | |
|   number::ObNumber nmb8;
 | |
|   nmb8.from("-111111111.123456789123456789", buf);
 | |
|   number::ObNumber nmb9;
 | |
|   nmb9.from("9999999999999.9", buf);
 | |
|   number::ObNumber nmb10;
 | |
|   nmb10.from("9.0", buf);
 | |
|   number::ObNumber nmb11;
 | |
|   nmb11.from("-9999999999999.9", buf);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb1,false,0,0);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb2,true,0,0);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb3,true,111111111,200000000);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb4,true,111111111,123456789);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb5,true,12345678,0);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb6,false,0,0);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb7,true,-111111111,200000000);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb8,true,-111111111,123456789);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb9,true,9999999999999,900000000);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb10,true,9,0);
 | |
|   IS_INT_PARTS_VALID_INT64(nmb11,false,0,0);
 | |
| }
 | |
| 
 | |
| TEST_F(ObGetInt64Test, is_valid_int64_test)
 | |
| {
 | |
|   ObMalloc buf;
 | |
|   number::ObNumber nmb1;
 | |
|   nmb1.from("12345678912345678912345678999999933456789887666", buf);
 | |
|   number::ObNumber nmb2;
 | |
|   nmb2.from("0", buf);
 | |
|   number::ObNumber nmb3;
 | |
|   nmb3.from("111111111.2", buf);
 | |
|   number::ObNumber nmb4;
 | |
|   nmb4.from("111111111.123456789123456789", buf);
 | |
|   number::ObNumber nmb5;
 | |
|   nmb5.from("12345678", buf);
 | |
|   number::ObNumber nmb6;
 | |
|   nmb6.from("-123456789123456789123456789", buf);
 | |
|   number::ObNumber nmb7;
 | |
|   nmb7.from("-111111111.2", buf);
 | |
|   number::ObNumber nmb8;
 | |
|   nmb8.from("-111111111.123456789123456789", buf);
 | |
|   number::ObNumber nmb9;
 | |
|   nmb9.from("9999999999999.9", buf);
 | |
|   number::ObNumber nmb10;
 | |
|   nmb10.from("9.0", buf);
 | |
|   number::ObNumber nmb11;
 | |
|   nmb11.from("-9999999999999.9", buf);
 | |
|   number::ObNumber nmb12;
 | |
|   nmb12.from("9223372036854775807", buf);
 | |
|   number::ObNumber nmb13;
 | |
|   nmb13.from("9223372036854775808", buf);
 | |
|   IS_VALID_INT64(nmb1,false,0);
 | |
|   IS_VALID_INT64(nmb2,true,0);
 | |
|   IS_VALID_INT64(nmb3,false,0);
 | |
|   IS_VALID_INT64(nmb4,false,0);
 | |
|   IS_VALID_INT64(nmb5,true,12345678);
 | |
|   IS_VALID_INT64(nmb6,false,0);
 | |
|   IS_VALID_INT64(nmb7,false,0);
 | |
|   IS_VALID_INT64(nmb8,false,0);
 | |
|   IS_VALID_INT64(nmb9,false,0);
 | |
|   IS_VALID_INT64(nmb10,true,9);
 | |
|   IS_VALID_INT64(nmb11,false,0);
 | |
|   IS_VALID_INT64(nmb12,true,9223372036854775807);
 | |
|   IS_VALID_INT64(nmb13,false,0);
 | |
| }
 | |
| 
 | |
| int main(int argc, char **argv)
 | |
| {
 | |
|   ::testing::InitGoogleTest(&argc,argv);
 | |
|   return RUN_ALL_TESTS();
 | |
| }
 | 
