@@ -79,6 +79,22 @@ TEST_CASE("constexpr arby::Nat", "[constexpr]") {
7979 WARN (" No constexpr tests written yet" );
8080}
8181
82+ TEST_CASE (" arby::Nat prefix increment 0" , " [basic-arithmetic]" ) {
83+ arby::Nat original;
84+ arby::Nat changed = ++original;
85+
86+ CHECK ((uintmax_t )original == 1 );
87+ CHECK ((uintmax_t )changed == 1 );
88+ }
89+
90+ TEST_CASE (" arby::Nat postfix increment 0" , " [basic-arithmetic]" ) {
91+ arby::Nat original;
92+ arby::Nat previous = original++;
93+
94+ CHECK ((uintmax_t )original == 1 );
95+ CHECK ((uintmax_t )previous == 0 );
96+ }
97+
8298TEST_CASE (" arby::Nat prefix increment" , " [basic-arithmetic]" ) {
8399 uintmax_t input = GENERATE (take (1000 , random ((uintmax_t )0 , std::numeric_limits<uintmax_t >::max () - 1 )));
84100
@@ -99,6 +115,24 @@ TEST_CASE("arby::Nat postfix increment", "[basic-arithmetic]") {
99115 CHECK ((uintmax_t )previous == input);
100116}
101117
118+ TEST_CASE (" arby::Nat prefix increment requiring additional digits" , " [basic-arithmetic]" ) {
119+ // setting input value to BASE-1 means an increment will add another digit
120+ arby::Nat original = arby::Nat::BASE - 1 ;
121+ arby::Nat changed = ++original;
122+
123+ CHECK ((uintmax_t )original == arby::Nat::BASE);
124+ CHECK ((uintmax_t )changed == arby::Nat::BASE);
125+ }
126+
127+ TEST_CASE (" arby::Nat postfix increment requiring additional digits" , " [basic-arithmetic]" ) {
128+ // setting input value to BASE-1 means an increment will add another digit
129+ arby::Nat original = arby::Nat::BASE - 1 ;
130+ arby::Nat previous = original++;
131+
132+ CHECK ((uintmax_t )original == arby::Nat::BASE);
133+ CHECK ((uintmax_t )previous == arby::Nat::BASE - 1 );
134+ }
135+
102136TEST_CASE (" arby::Nat prefix decrement" , " [basic-arithmetic]" ) {
103137 uintmax_t input = GENERATE (take (1000 , random ((uintmax_t )1 , std::numeric_limits<uintmax_t >::max ())));
104138
@@ -119,6 +153,24 @@ TEST_CASE("arby::Nat postfix decrement", "[basic-arithmetic]") {
119153 CHECK ((uintmax_t )previous == input);
120154}
121155
156+ TEST_CASE (" arby::Nat prefix decrement requiring digit removal" , " [basic-arithmetic]" ) {
157+ // setting input value to BASE means a decrement will remove a digit
158+ arby::Nat original = arby::Nat::BASE;
159+ arby::Nat changed = --original;
160+
161+ CHECK ((uintmax_t )original == arby::Nat::BASE - 1 );
162+ CHECK ((uintmax_t )changed == arby::Nat::BASE - 1 );
163+ }
164+
165+ TEST_CASE (" arby::Nat postfix decrement requiring digit removal" , " [basic-arithmetic]" ) {
166+ // setting input value to BASE means a decrement will remove a digit
167+ arby::Nat original = arby::Nat::BASE;
168+ arby::Nat previous = original--;
169+
170+ CHECK ((uintmax_t )original == arby::Nat::BASE - 1 );
171+ CHECK ((uintmax_t )previous == arby::Nat::BASE);
172+ }
173+
122174// NOTE: no need for increment overflow tests as Nat doesn't overflow --it expands as necessary
123175// TODO: consider writing a test case that applies very large size-increasing operations (maybe exponents)
124176// on Nat to force a failure condition when memory runs out an an exception is thrown.
0 commit comments