Skip to content

Commit efec11a

Browse files
authored
tests: update perfect numbers exercise (#819)
1 parent bac9cd0 commit efec11a

File tree

3 files changed

+86
-56
lines changed

3 files changed

+86
-56
lines changed

exercises/practice/perfect-numbers/.meta/example.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#define PERFECT_NUMBERS_H
33

44
namespace perfect_numbers {
5-
enum classification { deficient, perfect, abundant };
5+
enum class classification { deficient, perfect, abundant };
66

77
classification classify(int n);
88

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,49 @@
1-
# This is an auto-generated file. Regular comments will be removed when this
2-
# file is regenerated. Regenerating will not touch any manually added keys,
3-
# so comments can be added in a "comment" key.
1+
# This is an auto-generated file.
2+
#
3+
# Regenerating this file via `configlet sync` will:
4+
# - Recreate every `description` key/value pair
5+
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
6+
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
7+
# - Preserve any other key/value pair
8+
#
9+
# As user-added comments (using the # character) will be removed when this file
10+
# is regenerated, comments can be added via a `comment` key.
411

5-
[e46c542b-31fc-4506-bcae-6b62b3268537]
6-
description = "square of sum 1"
12+
[163e8e86-7bfd-4ee2-bd68-d083dc3381a3]
13+
description = "Perfect numbers -> Smallest perfect number is classified correctly"
714

8-
[9b3f96cb-638d-41ee-99b7-b4f9c0622948]
9-
description = "square of sum 5"
15+
[169a7854-0431-4ae0-9815-c3b6d967436d]
16+
description = "Perfect numbers -> Medium perfect number is classified correctly"
1017

11-
[54ba043f-3c35-4d43-86ff-3a41625d5e86]
12-
description = "square of sum 100"
18+
[ee3627c4-7b36-4245-ba7c-8727d585f402]
19+
description = "Perfect numbers -> Large perfect number is classified correctly"
1320

14-
[01d84507-b03e-4238-9395-dd61d03074b5]
15-
description = "sum of squares 1"
21+
[80ef7cf8-9ea8-49b9-8b2d-d9cb3db3ed7e]
22+
description = "Abundant numbers -> Smallest abundant number is classified correctly"
1623

17-
[c93900cd-8cc2-4ca4-917b-dd3027023499]
18-
description = "sum of squares 5"
24+
[3e300e0d-1a12-4f11-8c48-d1027165ab60]
25+
description = "Abundant numbers -> Medium abundant number is classified correctly"
1926

20-
[94807386-73e4-4d9e-8dec-69eb135b19e4]
21-
description = "sum of squares 100"
27+
[ec7792e6-8786-449c-b005-ce6dd89a772b]
28+
description = "Abundant numbers -> Large abundant number is classified correctly"
2229

23-
[44f72ae6-31a7-437f-858d-2c0837adabb6]
24-
description = "difference of squares 1"
30+
[e610fdc7-2b6e-43c3-a51c-b70fb37413ba]
31+
description = "Deficient numbers -> Smallest prime deficient number is classified correctly"
2532

26-
[005cb2bf-a0c8-46f3-ae25-924029f8b00b]
27-
description = "difference of squares 5"
33+
[0beb7f66-753a-443f-8075-ad7fbd9018f3]
34+
description = "Deficient numbers -> Smallest non-prime deficient number is classified correctly"
2835

29-
[b1bf19de-9a16-41c0-a62b-1f02ecc0b036]
30-
description = "difference of squares 100"
36+
[1c802e45-b4c6-4962-93d7-1cad245821ef]
37+
description = "Deficient numbers -> Medium deficient number is classified correctly"
38+
39+
[47dd569f-9e5a-4a11-9a47-a4e91c8c28aa]
40+
description = "Deficient numbers -> Large deficient number is classified correctly"
41+
42+
[a696dec8-6147-4d68-afad-d38de5476a56]
43+
description = "Deficient numbers -> Edge case (no factors other than itself) is classified correctly"
44+
45+
[72445cee-660c-4d75-8506-6c40089dc302]
46+
description = "Invalid inputs -> Zero is rejected (as it is not a positive integer)"
47+
48+
[2d72ce2c-6802-49ac-8ece-c790ba3dae13]
49+
description = "Invalid inputs -> Negative integer is rejected (as it is not a positive integer)"
Lines changed: 45 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,68 @@
1-
1+
#include "perfect_numbers.h"
22
#ifdef EXERCISM_TEST_SUITE
33
#include <catch2/catch.hpp>
44
#else
55
#include "test/catch.hpp"
66
#endif
7-
#include <exception>
8-
#include <string>
9-
#include <vector>
107

11-
#include "perfect_numbers.h"
8+
// improves error messages with enum text instead of integers:
9+
CATCH_REGISTER_ENUM(perfect_numbers::classification,
10+
perfect_numbers::classification::perfect,
11+
perfect_numbers::classification::abundant,
12+
perfect_numbers::classification::deficient)
1213

13-
using namespace std;
14-
TEST_CASE("Smallest perfect number is classified correctly") {
15-
REQUIRE(perfect_numbers::classify(6) == perfect_numbers::perfect);
16-
}
17-
TEST_CASE("Smallest abundant number is classified correctly") {
18-
REQUIRE(perfect_numbers::classify(12) == perfect_numbers::abundant);
19-
}
20-
TEST_CASE("Smallest prime deficient number is classified correctly") {
21-
REQUIRE(perfect_numbers::classify(2) == perfect_numbers::deficient);
14+
TEST_CASE("Smallest perfect number is classified correctly", "[163e8e86-7bfd-4ee2-bd68-d083dc3381a3]") {
15+
REQUIRE(perfect_numbers::classification::perfect == perfect_numbers::classify(6));
2216
}
2317

2418
#if defined(EXERCISM_RUN_ALL_TESTS)
2519

26-
TEST_CASE("Medium perfect number is classified correctly") {
27-
REQUIRE(perfect_numbers::classify(28) == perfect_numbers::perfect);
20+
TEST_CASE("Medium perfect number is classified correctly", "[169a7854-0431-4ae0-9815-c3b6d967436d]") {
21+
REQUIRE(perfect_numbers::classification::perfect == perfect_numbers::classify(28));
22+
}
23+
24+
TEST_CASE("Large perfect number is classified correctly", "[ee3627c4-7b36-4245-ba7c-8727d585f402]") {
25+
REQUIRE(perfect_numbers::classification::perfect == perfect_numbers::classify(33550336));
26+
}
27+
28+
TEST_CASE("Smallest abundant number is classified correctly", "[80ef7cf8-9ea8-49b9-8b2d-d9cb3db3ed7e]") {
29+
REQUIRE(perfect_numbers::classification::abundant == perfect_numbers::classify(12));
2830
}
29-
TEST_CASE("Large perfect number is classified correctly") {
30-
REQUIRE(perfect_numbers::classify(33550336) == perfect_numbers::perfect);
31+
32+
TEST_CASE("Medium abundant number is classified correctly", "[3e300e0d-1a12-4f11-8c48-d1027165ab60]") {
33+
REQUIRE(perfect_numbers::classification::abundant == perfect_numbers::classify(30));
3134
}
32-
TEST_CASE("Medium abundant number is classified correctly") {
33-
REQUIRE(perfect_numbers::classify(30) == perfect_numbers::abundant);
35+
36+
TEST_CASE("Large abundant number is classified correctly", "[ec7792e6-8786-449c-b005-ce6dd89a772b]") {
37+
REQUIRE(perfect_numbers::classification::abundant == perfect_numbers::classify(33550335));
3438
}
35-
TEST_CASE("Large abundant number is classified correctly") {
36-
REQUIRE(perfect_numbers::classify(33550335) == perfect_numbers::abundant);
39+
40+
TEST_CASE("Smallest prime deficient number is classified correctly", "[e610fdc7-2b6e-43c3-a51c-b70fb37413ba]") {
41+
REQUIRE(perfect_numbers::classification::deficient == perfect_numbers::classify(2));
3742
}
38-
TEST_CASE("Smallest non-prime deficient number is classified correctly") {
39-
REQUIRE(perfect_numbers::classify(4) == perfect_numbers::deficient);
43+
44+
TEST_CASE("Smallest non-prime deficient number is classified correctly", "[0beb7f66-753a-443f-8075-ad7fbd9018f3]") {
45+
REQUIRE(perfect_numbers::classification::deficient == perfect_numbers::classify(4));
4046
}
41-
TEST_CASE("Medium deficient number is classified correctly") {
42-
REQUIRE(perfect_numbers::classify(32) == perfect_numbers::deficient);
47+
48+
TEST_CASE("Medium deficient number is classified correctly", "[1c802e45-b4c6-4962-93d7-1cad245821ef]") {
49+
REQUIRE(perfect_numbers::classification::deficient == perfect_numbers::classify(32));
4350
}
44-
TEST_CASE("Large deficient number is classified correctly") {
45-
REQUIRE(perfect_numbers::classify(33550337) == perfect_numbers::deficient);
51+
52+
TEST_CASE("Large deficient number is classified correctly", "[47dd569f-9e5a-4a11-9a47-a4e91c8c28aa]") {
53+
REQUIRE(perfect_numbers::classification::deficient == perfect_numbers::classify(33550337));
4654
}
47-
TEST_CASE("Edge case (no factors other than itself) is classified correctly") {
48-
REQUIRE(perfect_numbers::classify(1) == perfect_numbers::deficient);
55+
56+
TEST_CASE("Edge case (no factors other than itself) is classified correctly", "[a696dec8-6147-4d68-afad-d38de5476a56]") {
57+
REQUIRE(perfect_numbers::classification::deficient == perfect_numbers::classify(1));
4958
}
50-
TEST_CASE("Zero is rejected (as it is not a positive integer)") {
51-
REQUIRE_THROWS_AS(perfect_numbers::classify(0), std::domain_error);
59+
60+
TEST_CASE("Zero is rejected (as it is not a positive integer)", "[72445cee-660c-4d75-8506-6c40089dc302]") {
61+
REQUIRE_THROWS_AS(perfect_numbers::classify(0),std::domain_error);
5262
}
53-
TEST_CASE("Negative numbers are rejected") {
54-
REQUIRE_THROWS_AS(perfect_numbers::classify(-1), std::domain_error);
63+
64+
TEST_CASE("Negative integer is rejected (as it is not a positive integer)", "[2d72ce2c-6802-49ac-8ece-c790ba3dae13]") {
65+
REQUIRE_THROWS_AS(perfect_numbers::classify(-1),std::domain_error);
5566
}
5667

5768
#endif

0 commit comments

Comments
 (0)