Skip to content

Commit b0955c4

Browse files
authored
Merge pull request #30 from Eric-Butcher/chore/clang-format
Chore/clang format
2 parents 2306179 + 5686907 commit b0955c4

13 files changed

Lines changed: 413 additions & 370 deletions

.clang-format

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
AlignEscapedNewlines: Left
3+
BasedOnStyle: WebKit
4+
BraceWrapping:
5+
AfterFunction: true
6+
BreakBeforeBraces: Custom
7+
BreakBeforeInheritanceComma: true
8+
BreakConstructorInitializers: BeforeComma
9+
NamespaceIndentation: None
10+
QualifierAlignment: Right
11+
# find include src \( -name '*.cpp' -o -name '*.hpp' \) -exec clang-format -i {} +
Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Test and Lint
1+
name: Jobs
22

33
on:
44
push:
@@ -45,6 +45,19 @@ jobs:
4545
- name: run-tests
4646
run: ctest --test-dir build --output-on-failure
4747

48+
format:
49+
runs-on: ubuntu-latest
50+
51+
steps:
52+
- name: Checkout code
53+
uses: actions/checkout@v3
54+
55+
- name: Install clang-format
56+
run: sudo apt update && sudo apt-get install -y clang clang-format-14
57+
58+
- name: Run clang-format
59+
run: find include src \( -name '*.cpp' -o -name '*.hpp' \) -exec clang-format-14 --dry-run --Werror {} +
60+
4861
lint:
4962
needs: build
5063
runs-on: ubuntu-latest
@@ -58,7 +71,7 @@ jobs:
5871
name: built
5972
path: ./build
6073

61-
- name: Get clang-tidy
74+
- name: Install clang-tidy
6275
run: sudo apt-get update && sudo apt-get install -y cmake clang clang-tidy g++
6376

6477
- name: lint

include/linear_congruential_generator.hpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#ifndef LINEAR_CONGRUENTIAL_GENERATOR_H
22
#define LINEAR_CONGRUENTIAL_GENERATOR_H
33

4-
#include <cstdint>
54
#include "prng.hpp"
5+
#include <cstdint>
66

77
class LinearCongruentialGenerator : public PseudoRandomNumberGenerator {
88
// https://en.wikipedia.org/wiki/Linear_congruential_generator#
@@ -15,11 +15,10 @@ class LinearCongruentialGenerator : public PseudoRandomNumberGenerator {
1515
a is the multiplier
1616
c is the increment
1717
18-
glibc uses m=2^{31} a=1103515245 c=12345 and masks the result with 0x3FFFFFFF
18+
glibc uses m=2^{31} a=1103515245 c=12345 and masks the result with 0x3FFFFFFF
1919
which is what is used for the default implementation here
2020
*/
2121
private:
22-
2322
// Defaults used from the glibc implementation, see:
2423
/* @misc{ enwiki:1280426923,
2524
author = "{Wikipedia contributors}",
@@ -29,17 +28,16 @@ class LinearCongruentialGenerator : public PseudoRandomNumberGenerator {
2928
note = "[Online; accessed 10-May-2025]"
3029
} */
3130

32-
static constexpr uint64_t DefaultModulus = 0x7FFFFFFF;
31+
static constexpr uint64_t DefaultModulus = 0x7FFFFFFF;
3332
static constexpr uint64_t DefaultMultiplier = 1103515245;
3433
static constexpr uint64_t DefaultIncrement = 12345;
35-
static constexpr uint64_t DefaultMask = 0x7FFFFFFF; // bits 0 through 30
34+
static constexpr uint64_t DefaultMask = 0x7FFFFFFF; // bits 0 through 30
3635

3736
const uint64_t m_modulus;
3837
const uint64_t m_multiplier;
3938
const uint64_t m_increment;
4039
const uint64_t m_mask;
41-
uint64_t m_current_value = 0;
42-
40+
uint64_t m_current_value = 0;
4341

4442
static uint64_t getMinimumValue(const std::uint64_t mask);
4543
static uint64_t getMaximumValue(const uint64_t modulus, const uint64_t mask);

include/mersenne_twister.hpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
#ifndef MERSENNE_TWISTER_H
22
#define MERSENNE_TWISTER_H
33

4+
#include "prng.hpp"
45
#include <cstdint>
56
#include <vector>
6-
#include "prng.hpp"
77

88
class MersenneTwister : public PseudoRandomNumberGenerator {
99

1010
private:
11-
1211
/* MT19937-64 coefficients:
1312
w = 64 , word size in bits
1413
n = 312, degree of recurrence
@@ -45,7 +44,7 @@ class MersenneTwister : public PseudoRandomNumberGenerator {
4544
static constexpr uint64_t Default_c = 0xfff7eee000000000;
4645
static constexpr uint64_t Default_l = 43;
4746
static constexpr uint64_t Default_f = 6364136223846793005;
48-
47+
4948
// word size
5049
int m_w;
5150

@@ -89,7 +88,6 @@ class MersenneTwister : public PseudoRandomNumberGenerator {
8988
uint64_t m_lower_bit_mask;
9089
std::vector<uint64_t> m_recurrence_state;
9190
int m_state_index = 0;
92-
9391

9492
std::vector<uint64_t> initializeRecurrenceState(const uint64_t seed) const;
9593
uint64_t generateNextStateValue();

include/prng.hpp

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,25 @@
33

44
#include <cstdint>
55

6-
class PseudoRandomNumberGenerator
7-
{
8-
protected:
9-
const uint64_t m_seed;
10-
const uint64_t m_minimum_value;
11-
const uint64_t m_maximum_value;
6+
class PseudoRandomNumberGenerator {
7+
protected:
8+
const uint64_t m_seed;
9+
const uint64_t m_minimum_value;
10+
const uint64_t m_maximum_value;
1211

12+
public:
13+
PseudoRandomNumberGenerator();
14+
PseudoRandomNumberGenerator(const uint64_t seed);
15+
PseudoRandomNumberGenerator(const uint64_t minimum_value, const uint64_t maximum_value);
16+
PseudoRandomNumberGenerator(const uint64_t seed, const uint64_t minimum_value, const uint64_t maximum_value);
17+
virtual ~PseudoRandomNumberGenerator() { }
1318

14-
public:
15-
PseudoRandomNumberGenerator();
16-
PseudoRandomNumberGenerator(const uint64_t seed);
17-
PseudoRandomNumberGenerator(const uint64_t minimum_value, const uint64_t maximum_value);
18-
PseudoRandomNumberGenerator(const uint64_t seed, const uint64_t minimum_value, const uint64_t maximum_value);
19-
virtual ~PseudoRandomNumberGenerator() {}
19+
static uint64_t generateCryptographicallyInsecureSeed();
2020

21-
static uint64_t generateCryptographicallyInsecureSeed();
22-
23-
virtual uint64_t generateRandomValue() = 0;
24-
double generateUnitNormalRandomValue();
25-
double generateFloatingPointRandomValue(float min, float max);
26-
int64_t generateIntegerRandomValue(int32_t min, int32_t max);
21+
virtual uint64_t generateRandomValue() = 0;
22+
double generateUnitNormalRandomValue();
23+
double generateFloatingPointRandomValue(float min, float max);
24+
int64_t generateIntegerRandomValue(int32_t min, int32_t max);
2725
};
2826

2927
#endif

include/program_runner.hpp

Lines changed: 30 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
#ifndef PROGRAM_RUNNER_H
22
#define PROGRAM_RUNNER_H
33

4+
#include "prng.hpp"
45
#include <cstdint>
5-
#include <iostream>
66
#include <cstdlib>
7-
#include <optional>
8-
#include <variant>
7+
#include <iostream>
98
#include <map>
109
#include <memory>
11-
#include "prng.hpp"
10+
#include <optional>
11+
#include <variant>
1212

13-
class ProgramRunner {
13+
class ProgramRunner {
1414
public:
15-
ProgramRunner(int argc, char **argv, uint64_t warmup_iterations = 0);
15+
ProgramRunner(int argc, char** argv, uint64_t warmup_iterations = 0);
1616

1717
struct ProgramStatus {
1818
std::optional<std::string> stdout_message;
@@ -33,12 +33,7 @@ class ProgramRunner {
3333
const std::string version = "0.1";
3434
const std::string program_name = "randomizer";
3535

36-
37-
38-
39-
4036
private:
41-
4237
enum class Algorithm {
4338
XORShift,
4439
LinearCongruentialGenerator,
@@ -47,17 +42,15 @@ class ProgramRunner {
4742
};
4843

4944
const std::map<std::string, Algorithm> algorithm_choices {
50-
{"xorshift", Algorithm::XORShift},
51-
{"xor", Algorithm::XORShift},
52-
{"linear-congruential-generator", Algorithm::LinearCongruentialGenerator},
53-
{"lcg", Algorithm::LinearCongruentialGenerator},
54-
{"mersenne", Algorithm::MersenneTwister},
55-
{"mersenne-twister", Algorithm::MersenneTwister},
56-
{"mt", Algorithm::MersenneTwister}
45+
{ "xorshift", Algorithm::XORShift },
46+
{ "xor", Algorithm::XORShift },
47+
{ "linear-congruential-generator", Algorithm::LinearCongruentialGenerator },
48+
{ "lcg", Algorithm::LinearCongruentialGenerator },
49+
{ "mersenne", Algorithm::MersenneTwister },
50+
{ "mersenne-twister", Algorithm::MersenneTwister },
51+
{ "mt", Algorithm::MersenneTwister }
5752
};
5853

59-
60-
6154
enum class ProgramBehaviour {
6255
Error,
6356
Help,
@@ -68,16 +61,16 @@ class ProgramRunner {
6861
};
6962

7063
const std::map<std::string, ProgramBehaviour> generation_types {
71-
{"unit", ProgramBehaviour::GenerateUnitNormal},
72-
{"normal", ProgramBehaviour::GenerateUnitNormal},
73-
{"unit-normal", ProgramBehaviour::GenerateUnitNormal},
74-
{"normalized", ProgramBehaviour::GenerateUnitNormal},
75-
{"float", ProgramBehaviour::GenerateFloating},
76-
{"floating", ProgramBehaviour::GenerateFloating},
77-
{"decimal", ProgramBehaviour::GenerateFloating},
78-
{"floating-point", ProgramBehaviour::GenerateFloating},
79-
{"int", ProgramBehaviour::GenerateInteger},
80-
{"integer", ProgramBehaviour::GenerateInteger}
64+
{ "unit", ProgramBehaviour::GenerateUnitNormal },
65+
{ "normal", ProgramBehaviour::GenerateUnitNormal },
66+
{ "unit-normal", ProgramBehaviour::GenerateUnitNormal },
67+
{ "normalized", ProgramBehaviour::GenerateUnitNormal },
68+
{ "float", ProgramBehaviour::GenerateFloating },
69+
{ "floating", ProgramBehaviour::GenerateFloating },
70+
{ "decimal", ProgramBehaviour::GenerateFloating },
71+
{ "floating-point", ProgramBehaviour::GenerateFloating },
72+
{ "int", ProgramBehaviour::GenerateInteger },
73+
{ "integer", ProgramBehaviour::GenerateInteger }
8174
};
8275

8376
struct RawArguments {
@@ -96,23 +89,21 @@ class ProgramRunner {
9689
std::optional<std::string> count_str;
9790
};
9891

99-
10092
// Defaults
10193

10294
static constexpr uint32_t DefaultCount = 1;
10395
static constexpr ProgramBehaviour DefaultGenerationType = ProgramBehaviour::GenerateInteger;
10496

105-
static RawArguments parse_args(int argc, char **argv);
106-
void determine_program_configuration(const RawArguments &raw_args);
107-
void determine_user_message_configuration(const bool error, const bool show_version, const bool show_help);
108-
void determine_generation_range_configuration(const std::optional<std::string> &min_str, const std::optional<std::string> &max_str);
109-
void determine_generation_type_configuration(const std::optional<std::string> &generation_type);
110-
void determine_count_configuration(const std::optional<std::string> &count_str);
111-
void determine_algorithm_configuration(const std::optional<std::string> &alg_str);
97+
static RawArguments parse_args(int argc, char** argv);
98+
void determine_program_configuration(RawArguments const& raw_args);
99+
void determine_user_message_configuration(bool const error, bool const show_version, bool const show_help);
100+
void determine_generation_range_configuration(std::optional<std::string> const& min_str, std::optional<std::string> const& max_str);
101+
void determine_generation_type_configuration(std::optional<std::string> const& generation_type);
102+
void determine_count_configuration(std::optional<std::string> const& count_str);
103+
void determine_algorithm_configuration(std::optional<std::string> const& alg_str);
112104
void create_prng();
113105
void warmup(uint64_t iterations);
114106

115-
116107
std::string error_string();
117108
std::string help_string();
118109
std::string version_string();
@@ -131,9 +122,6 @@ class ProgramRunner {
131122
// Exit codes
132123
static constexpr int ExitCodeSuccess = 0;
133124
static constexpr int ExitCodeError = 1;
134-
135-
136-
137125
};
138126

139127
#endif

include/xorshift.hpp

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,35 @@
11
#ifndef XOR_SHIFT_H
22
#define XOR_SHIFT_H
33

4-
#include <cstdint>
54
#include "prng.hpp"
5+
#include <cstdint>
66

77
class XORShift : public PseudoRandomNumberGenerator {
88

9-
// @misc{ enwiki:1287473197,
10-
// author = "{Wikipedia contributors}",
11-
// title = "Xorshift --- {Wikipedia}{,} The Free Encyclopedia",
12-
// year = "2025",
13-
// url = "https://en.wikipedia.org/w/index.php?title=Xorshift&oldid=1287473197",
14-
// note = "[Online; accessed 11-May-2025]"
15-
// }
9+
// @misc{ enwiki:1287473197,
10+
// author = "{Wikipedia contributors}",
11+
// title = "Xorshift --- {Wikipedia}{,} The Free Encyclopedia",
12+
// year = "2025",
13+
// url = "https://en.wikipedia.org/w/index.php?title=Xorshift&oldid=1287473197",
14+
// note = "[Online; accessed 11-May-2025]"
15+
// }
1616
private:
17-
18-
1917
// Default values from https://en.wikipedia.org/wiki/Xorshift
20-
static constexpr uint64_t DefaultA = 13;
18+
static constexpr uint64_t DefaultA = 13;
2119
static constexpr uint64_t DefaultB = 7;
2220
static constexpr uint64_t DefaultC = 17;
2321

2422
// XORShift has 3 constants that are used for shifting
2523
const uint64_t m_a;
2624
const uint64_t m_b;
2725
const uint64_t m_c;
28-
uint64_t m_current_value = 0;
26+
uint64_t m_current_value = 0;
2927

3028
public:
3129
XORShift();
3230
XORShift(const uint64_t seed);
3331
XORShift(const uint64_t seed, const uint64_t a, const uint64_t b, const uint64_t c);
3432

35-
3633
uint64_t generateRandomValue() override;
3734
};
3835

src/main.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
#include <iostream>
2-
#include <getopt.h>
3-
#include "prng.hpp"
41
#include "linear_congruential_generator.hpp"
5-
#include "xorshift.hpp"
2+
#include "prng.hpp"
63
#include "program_runner.hpp"
4+
#include "xorshift.hpp"
5+
#include <getopt.h>
6+
#include <iostream>
77

8-
int main(int argc, char *argv[]){
8+
int main(int argc, char* argv[])
9+
{
910
ProgramRunner runner = ProgramRunner(argc, argv, 1000);
1011
ProgramRunner::ProgramStatus status;
1112
while (!runner.is_finished()) {

0 commit comments

Comments
 (0)