// Tested on Microsoft Visual Studio Community 2019: ALL PASSED
#include "pch.h"
#include <sstream> // std::ostringstream std::istringstream
#include "../Sources/Integer.hpp"
#include "my_tools.hpp"
using namespace mdspp;
// constructor destructor
TEST(Integer, basics)
{
// Integer()
Integer int1;
// Integer(const String& str)
Integer int2("123456789000");
MY_ASSERT_THROWS_MESSAGE(Integer("hello"), std::runtime_error, "ERROR: Wrong integer literal.");
// Integer(long long integer)
Integer int3 = 123456789000LL;
// Integer(const Integer &that)
Integer int4(int3);
// Integer(Integer &&that)
Integer int5(std::move(int4));
// ~Integer()
}
// operator==() operator!=() operator<() operator<=() operator>() operator>=()
TEST(Integer, compare)
{
Integer pos_integer("12345");
Integer neg_integer("-12345");
Integer zero("0");
// operator==
Integer eq_pos_integer("12345");
Integer eq_neg_integer("-12345");
ASSERT_TRUE(eq_pos_integer == pos_integer);
ASSERT_TRUE(eq_neg_integer == neg_integer);
// operator!=
Integer ne_pos_integer("54321");
ASSERT_TRUE(ne_pos_integer != pos_integer);
ASSERT_TRUE(ne_pos_integer != zero);
ASSERT_TRUE(ne_pos_integer != neg_integer);
// operator<
Integer lt_pos_integer("12344");
ASSERT_TRUE(lt_pos_integer < pos_integer);
ASSERT_TRUE(neg_integer < pos_integer);
ASSERT_TRUE(zero < pos_integer);
// operator<=
ASSERT_TRUE(lt_pos_integer <= pos_integer);
ASSERT_TRUE(eq_pos_integer <= pos_integer);
ASSERT_TRUE(neg_integer <= pos_integer);
ASSERT_TRUE(zero <= pos_integer);
// operator>
Integer gt_pos_integer("12346");
ASSERT_TRUE(gt_pos_integer > pos_integer);
ASSERT_TRUE(pos_integer > neg_integer);
ASSERT_TRUE(pos_integer > zero);
ASSERT_TRUE(zero > neg_integer);
// operator>=
ASSERT_TRUE(eq_pos_integer >= pos_integer);
ASSERT_TRUE(gt_pos_integer >= pos_integer);
ASSERT_TRUE(pos_integer >= neg_integer);
ASSERT_TRUE(pos_integer >= zero);
}
// operator=()
TEST(Integer, copy_assignment)
{
Integer integer1("12345");
Integer integer2("54321");
integer1 = integer2;
ASSERT_EQ(integer1, Integer("54321"));
ASSERT_EQ(integer2, Integer("54321"));
}
// operator=()
TEST(Integer, move_assignment)
{
Integer integer1("12345");
Integer integer2("54321");
integer1 = std::move(integer2);
ASSERT_EQ(integer1, Integer("54321"));
ASSERT_EQ(integer2, Integer());
}
// digits() is_zero() is_positive() is_negative() is_even() is_odd()
TEST(Integer, examination)
{
// digits()
ASSERT_EQ(Integer("0").digits(), 0);
ASSERT_EQ(Integer("1").digits(), 1);
ASSERT_EQ(Integer("-1").digits(), 1);
ASSERT_EQ(Integer("123456789").digits(), 9);
ASSERT_EQ(Integer("-123456789").digits(), 9);
// is_zero()
ASSERT_TRUE(Integer("0").is_zero());
ASSERT_FALSE(Integer("1").is_zero());
ASSERT_FALSE(Integer("-1").is_zero());
ASSERT_FALSE(Integer("123456789").is_zero());
ASSERT_FALSE(Integer("-123456789").is_zero());
// is_positive()
ASSERT_FALSE(Integer("0").is_positive());
ASSERT_TRUE(Integer("1").is_positive());
ASSERT_FALSE(Integer("-1").is_positive());
ASSERT_TRUE(Integer("123456789").is_positive());
ASSERT_FALSE(Integer("-123456789").is_positive());
// is_negative()
ASSERT_FALSE(Integer("0").is_negative());
ASSERT_FALSE(Integer("1").is_negative());
ASSERT_TRUE(Integer("-1").is_negative());
ASSERT_FALSE(Integer("123456789").is_negative());
ASSERT_TRUE(Integer("-123456789").is_negative());
// is_even()
ASSERT_TRUE(Integer("0").is_even());
ASSERT_FALSE(Integer("1").is_even());
ASSERT_FALSE(Integer("-1").is_even());
ASSERT_FALSE(Integer("123456789").is_even());
ASSERT_FALSE(Integer("-123456789").is_even());
// is_odd()
ASSERT_FALSE(Integer("0").is_odd());
ASSERT_TRUE(Integer("1").is_odd());
ASSERT_TRUE(Integer("-1").is_odd());
ASSERT_TRUE(Integer("123456789").is_odd());
ASSERT_TRUE(Integer("-123456789").is_odd());
}
// operator++() operator--()
TEST(Integer, inc_dec)
{
// operator++()
ASSERT_EQ(++Integer("-1"), Integer("0"));
ASSERT_EQ(++Integer("0"), Integer("1"));
ASSERT_EQ(++Integer("1"), Integer("2"));
ASSERT_EQ(++Integer("99999999999999"), Integer("100000000000000"));
// operator--()
ASSERT_EQ(--Integer("-1"), Integer("-2"));
ASSERT_EQ(--Integer("0"), Integer("-1"));
ASSERT_EQ(--Integer("1"), Integer("0"));
ASSERT_EQ(--Integer("100000000000000"), Integer("99999999999999"));
}
// operator+()
TEST(Integer, plus)
{
// pos + pos
ASSERT_EQ(Integer("18446744073709551616") + Integer("18446744073709551616"), Integer("36893488147419103232"));
ASSERT_EQ(Integer("18446744073709551616") + Integer("1"), Integer("18446744073709551617"));
ASSERT_EQ(Integer("1") + Integer("18446744073709551616"), Integer("18446744073709551617"));
// pos + zero
ASSERT_EQ(Integer("18446744073709551616") + Integer("0"), Integer("18446744073709551616"));
// pos + neg
ASSERT_EQ(Integer("18446744073709551616") + Integer("-18446744073709551616"), Integer("0"));
ASSERT_EQ(Integer("18446744073709551616") + Integer("-1"), Integer("18446744073709551615"));
ASSERT_EQ(Integer("1") + Integer("-18446744073709551616"), Integer("-18446744073709551615"));
// neg + pos
ASSERT_EQ(Integer("-18446744073709551616") + Integer("18446744073709551616"), Integer("0"));
ASSERT_EQ(Integer("-18446744073709551616") + Integer("1"), Integer("-18446744073709551615"));
ASSERT_EQ(Integer("-1") + Integer("18446744073709551616"), Integer("18446744073709551615"));
// neg + zero
ASSERT_EQ(Integer("-18446744073709551616") + Integer("0"), Integer("-18446744073709551616"));
// neg + neg
ASSERT_EQ(Integer("-18446744073709551616") + Integer("-18446744073709551616"), Integer("-36893488147419103232"));
ASSERT_EQ(Integer("-18446744073709551616") + Integer("-1"), Integer("-18446744073709551617"));
ASSERT_EQ(Integer("-1") + Integer("-18446744073709551616"), Integer("-18446744073709551617"));
// zero + pos
ASSERT_EQ(Integer("0") + Integer("18446744073709551616"), Integer("18446744073709551616"));
// zero + zero
ASSERT_EQ(Integer("0") + Integer("0"), Integer("0"));
// zero + neg
ASSERT_EQ(Integer("0") + Integer("-18446744073709551616"), Integer("-18446744073709551616"));
}
// operator-()
TEST(Integer, minus)
{
// pos - pos
ASSERT_EQ(Integer("18446744073709551616") - Integer("18446744073709551616"), Integer("0"));
ASSERT_EQ(Integer("18446744073709551616") - Integer("1"), Integer("18446744073709551615"));
ASSERT_EQ(Integer("1") - Integer("18446744073709551616"), Integer("-18446744073709551615"));
// pos - zero
ASSERT_EQ(Integer("18446744073709551616") - Integer("0"), Integer("18446744073709551616"));
// pos - neg
ASSERT_EQ(Integer("18446744073709551616") - Integer("-18446744073709551616"), Integer("36893488147419103232"));
ASSERT_EQ(Integer("18446744073709551616") - Integer("-1"), Integer("18446744073709551617"));
ASSERT_EQ(Integer("1") - Integer("-18446744073709551616"), Integer("18446744073709551617"));
// neg - pos
ASSERT_EQ(Integer("-18446744073709551616") - Integer("18446744073709551616"), Integer("-36893488147419103232"));
ASSERT_EQ(Integer("-18446744073709551616") - Integer("1"), Integer("-18446744073709551617"));
ASSERT_EQ(Integer("-1") - Integer("18446744073709551616"), Integer("-18446744073709551617"));
// neg - zero
ASSERT_EQ(Integer("-18446744073709551616") - Integer("0"), Integer("-18446744073709551616"));
// neg - neg
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于List, Set, Map, Integer, String, Tuple, Deque模块实现一个像Python的内置类型一样优雅的C++库,与 Python 的容器库一样易于使用
资源推荐
资源详情
资源评论
收起资源包目录
基于List, Set, Map, Integer, String, Tuple, Deque模块的C++库 (217个子文件)
Doxyfile.cfg 121KB
packages.config 188B
TestInteger.cpp 19KB
TestString.cpp 17KB
TestList.cpp 14KB
TestTime.cpp 7KB
TestMap.cpp 6KB
TestDeque.cpp 6KB
TestSet.cpp 5KB
simulate_bank_queuing.cpp 2KB
TestTuple.cpp 2KB
TestAll.cpp 689B
examples_main.cpp 408B
pch.cpp 40B
doxygen.css 43KB
tabs.css 11KB
search.css 5KB
Sources.vcxproj.filters 525B
Examples.vcxproj.filters 276B
.gitattributes 37B
.gitignore 7KB
pch.h 62B
String.hpp 33KB
List.hpp 26KB
Integer.hpp 23KB
Set.hpp 23KB
Map.hpp 14KB
Deque.hpp 12KB
Tuple.hpp 4KB
utility.hpp 1016B
my_tools.hpp 691B
mdspp.hpp 209B
classmdspp_1_1_string.html 100KB
classmdspp_1_1_list.html 92KB
classmdspp_1_1_integer.html 69KB
classmdspp_1_1_set.html 67KB
classmdspp_1_1_map.html 55KB
classmdspp_1_1_deque.html 51KB
classmdspp_1_1_string-members.html 20KB
classmdspp_1_1_map_1_1_iterator.html 19KB
classmdspp_1_1_list-members.html 19KB
classmdspp_1_1_set_1_1_iterator.html 19KB
classmdspp_1_1_list_1_1_iterator.html 19KB
classmdspp_1_1_tuple_3_01_t_00_01_ts_8_8_8_01_4.html 17KB
classmdspp_1_1_integer-members.html 16KB
functions_o.html 16KB
index.html 16KB
functions_func_o.html 16KB
_string_8hpp.html 16KB
classmdspp_1_1_set-members.html 15KB
_integer_8hpp.html 14KB
classmdspp_1_1_deque-members.html 13KB
classmdspp_1_1_map-members.html 13KB
_list_8hpp.html 11KB
classmdspp_1_1_map_1_1_pair.html 10KB
_map_8hpp.html 9KB
_tuple_8hpp.html 9KB
annotated.html 9KB
_set_8hpp.html 8KB
_deque_8hpp.html 8KB
dir_937900b87e0c7a5fa01190c395fb83f7.html 7KB
classmdspp_1_1_list_1_1_iterator-members.html 6KB
classmdspp_1_1_map_1_1_iterator-members.html 6KB
classmdspp_1_1_set_1_1_iterator-members.html 6KB
classmdspp_1_1_tuple_3_01_t_00_01_ts_8_8_8_01_4-members.html 6KB
files.html 6KB
functions_s.html 5KB
functions_func_s.html 5KB
classes.html 5KB
functions_i.html 5KB
classmdspp_1_1_map_1_1_pair-members.html 5KB
functions_func_i.html 5KB
functions_t.html 5KB
functions_c.html 5KB
functions_func_t.html 4KB
functions_func_c.html 4KB
functions_m.html 4KB
functions_func_m.html 4KB
functions_p.html 4KB
functions_~.html 4KB
functions_r.html 4KB
functions_func_p.html 4KB
functions_f.html 4KB
functions_func_~.html 4KB
functions_func_r.html 4KB
functions_func_f.html 4KB
functions_b.html 4KB
functions_e.html 4KB
functions_func_b.html 3KB
functions_func_e.html 3KB
functions_u.html 3KB
functions_v.html 3KB
functions_k.html 3KB
functions.html 3KB
functions_g.html 3KB
functions_d.html 3KB
functions_func_u.html 3KB
functions_l.html 3KB
dir_8133b82ce1587bef7cdaf75352a94396.html 3KB
functions_func_v.html 3KB
共 217 条
- 1
- 2
- 3
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6651
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功