From e1e5300e90afdaa43cde716b13b101747fba167a Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 12 Sep 2024 20:57:58 -0300 Subject: [PATCH 1/7] [CONFIG] [Makefile] Better code styling actions --- .clang-format | 246 ++++++++++++++++++++++++++++++++++++++++++++++++++ .editorconfig | 2 +- Makefile | 8 +- 3 files changed, 254 insertions(+), 2 deletions(-) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..b68024f --- /dev/null +++ b/.clang-format @@ -0,0 +1,246 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignArrayOfStructures: None +AlignConsecutiveAssignments: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: true +AlignConsecutiveBitFields: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveDeclarations: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveMacros: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveShortCaseStatements: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCaseColons: false +AlignEscapedNewlines: Right +AlignOperands: Align +AlignTrailingComments: + Kind: Always + OverEmptyLines: 0 +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowBreakBeforeNoexceptSpecifier: Never +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortCompoundRequirementOnASingleLine: true +AllowShortEnumsOnASingleLine: true +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine +AttributeMacros: + - __capability +BinPackArguments: true +BinPackParameters: true +BitFieldColonSpacing: Both +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterExternBlock: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakAdjacentStringLiterals: true +BreakAfterAttributes: Leave +BreakAfterJavaFieldAnnotations: false +BreakArrays: true +BreakBeforeBinaryOperators: None +BreakBeforeConceptDeclarations: Always +BreakBeforeBraces: Attach +BreakBeforeInlineASMColon: OnlyMultiline +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakInheritanceList: BeforeColon +BreakStringLiterals: true +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +EmptyLineAfterAccessModifier: Never +EmptyLineBeforeAccessModifier: LogicalBlock +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IfMacros: + - KJ_IF_MAYBE +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + CaseSensitive: false + - Regex: '.*' + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' +IndentAccessModifiers: false +IndentCaseBlocks: false +IndentCaseLabels: false +IndentExternBlock: AfterExternBlock +IndentGotoLabels: true +IndentPPDirectives: None +IndentRequiresClause: true +IndentWidth: 2 +IndentWrappedFunctionNames: false +InsertBraces: false +InsertNewlineAtEOF: false +InsertTrailingCommas: None +IntegerLiteralSeparator: + Binary: 0 + BinaryMinDigits: 0 + Decimal: 0 + DecimalMinDigits: 0 + Hex: 0 + HexMinDigits: 0 +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +KeepEmptyLinesAtEOF: false +LambdaBodyIndentation: Signature +LineEnding: DeriveLF +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 2 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PackConstructorInitializers: BinPack +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakOpenParenthesis: 0 +PenaltyBreakScopeResolution: 500 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyIndentedWhitespace: 0 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +PPIndentWidth: -1 +QualifierAlignment: Leave +ReferenceAlignment: Pointer +ReflowComments: true +RemoveBracesLLVM: false +RemoveParentheses: Leave +RemoveSemicolon: false +RequiresClausePosition: OwnLine +RequiresExpressionIndentation: OuterScope +SeparateDefinitionBlocks: Leave +ShortNamespaceLines: 1 +SkipMacroDefinitionBody: false +SortIncludes: CaseSensitive +SortJavaStaticImport: Before +SortUsingDeclarations: LexicographicNumeric +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceAroundPointerQualifiers: Default +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeJsonColon: false +SpaceBeforeParens: ControlStatements +SpaceBeforeParensOptions: + AfterControlStatements: true + AfterForeachMacros: true + AfterFunctionDefinitionName: false + AfterFunctionDeclarationName: false + AfterIfMacros: true + AfterOverloadedOperator: false + AfterPlacementOperator: true + AfterRequiresInClause: false + AfterRequiresInExpression: false + BeforeNonEmptyParentheses: false +SpaceBeforeRangeBasedForLoopColon: true +SpaceBeforeSquareBrackets: false +SpaceInEmptyBlock: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: Never +SpacesInContainerLiterals: true +SpacesInLineCommentPrefix: + Minimum: 1 + Maximum: -1 +SpacesInParens: Never +SpacesInParensOptions: + InCStyleCasts: false + InConditionalStatements: false + InEmptyParentheses: false + Other: false +SpacesInSquareBrackets: false +Standard: Latest +StatementAttributeLikeMacros: + - Q_EMIT +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 8 +UseTab: Never +VerilogBreakBetweenInstancePorts: true +WhitespaceSensitiveMacros: + - BOOST_PP_STRINGIZE + - CF_SWIFT_NAME + - NS_SWIFT_NAME + - PP_STRINGIZE + - STRINGIZE +... + diff --git a/.editorconfig b/.editorconfig index 1730a23..f884e93 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,7 +8,7 @@ end_of_line = lf insert_final_newline = true indent_style = space trim_trailing_whitespace = true -indent_size = 4 +indent_size = 2 max_line_length = 80 # # Already default setting diff --git a/Makefile b/Makefile index 8906d04..4211fdb 100644 --- a/Makefile +++ b/Makefile @@ -26,6 +26,10 @@ DOCKER_COMPOSE=docker compose # TOOLS COVERAGE_TOOL=gcovr -e "src/tests/*" -e "build/*" --exclude-throw-branches --exclude-unreachable-branches --exclude-noncode-lines --print-summary +# C++ specific +SRC_DIR = src +FILES := $(shell find $(SRC_DIR) -name '*.cpp' -o -name '*.h' -o -name '*.hpp' -o -name '*.inl') + .MAIN: test .PHONY: all clean dependencies help list test outdated .EXPORT_ALL_VARIABLES: # (2) @@ -80,8 +84,10 @@ test/static: src/ test/styling: + clang-format --dry-run --Werror $(FILES) -format: dependencies +format: + clang-format -i --verbose $(FILES) test: env dependencies cd build && make test From 5d77c0951f862a8e0a0bd5fc1e0892122b244248 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 12 Sep 2024 22:01:25 -0300 Subject: [PATCH 2/7] [CONFIG] [Docker] clang-format added to Docker --- Dockerfile | 64 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/Dockerfile b/Dockerfile index f97060e..615f5d9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,31 +1,39 @@ -FROM ubuntu:24.10 AS init +FROM ubuntu:24.04 AS init ENV WORKDIR=/app WORKDIR ${WORKDIR} RUN apt-get -y update && \ - apt-get -y install --no-install-recommends --no-install-suggests make && \ - rm -rf /var/lib/apt/lists/* + apt-get -y install --no-install-recommends --no-install-suggests make && \ + rm -rf /var/lib/apt/lists/* FROM init AS builder # build tools -RUN apt-get -y update && \ - apt-get -y install --no-install-recommends --no-install-suggests build-essential cmake g++ make pkg-config && \ - rm -rf /var/lib/apt/lists/* + +RUN apt-get update && \ + apt-get -y install --no-install-recommends --no-install-suggests gnupg software-properties-common && \ + rm -rf /var/lib/apt/lists/* +ADD https://apt.llvm.org/llvm-snapshot.gpg.key llvm-snapshot.gpg.key +RUN apt-key add llvm-snapshot.gpg.key && \ + apt-add-repository "deb http://apt.llvm.org/noble/ llvm-toolchain-noble main" && \ + apt-get -y update && \ + apt-get -y install --no-install-recommends --no-install-suggests build-essential cmake g++ make pkg-config && \ + apt-get -y install --no-install-recommends --no-install-suggests clang-format && \ + rm -rf /var/lib/apt/lists/* # vcpkg Package Manager ADD https://github.com/microsoft/vcpkg/archive/refs/tags/2024.08.23.tar.gz vcpkg.tar.gz RUN apt-get -y update && \ - apt-get -y install --no-install-recommends --no-install-suggests \ - ca-certificates curl git unzip zip && \ - rm -rf /var/lib/apt/lists/* && \ - mkdir /opt/vcpkg && \ - tar xf vcpkg.tar.gz --strip-components=1 -C /opt/vcpkg && \ - /opt/vcpkg/bootstrap-vcpkg.sh && \ - ln -s /opt/vcpkg/vcpkg /usr/local/bin/vcpkg && \ - rm -rf vcpkg.tar.gz && \ - vcpkg version + apt-get -y install --no-install-recommends --no-install-suggests \ + ca-certificates curl git unzip zip && \ + rm -rf /var/lib/apt/lists/* && \ + mkdir /opt/vcpkg && \ + tar xf vcpkg.tar.gz --strip-components=1 -C /opt/vcpkg && \ + /opt/vcpkg/bootstrap-vcpkg.sh && \ + ln -s /opt/vcpkg/vcpkg /usr/local/bin/vcpkg && \ + rm -rf vcpkg.tar.gz && \ + vcpkg version ENV VCPKG_ROOT=/opt/vcpkg # sources @@ -37,15 +45,15 @@ COPY ./Makefile ${WORKDIR}/ # dependencies RUN vcpkg --x-wait-for-lock integrate install && \ - vcpkg --x-wait-for-lock install + vcpkg --x-wait-for-lock install LABEL vcpkg=enabled # build RUN ls -alhR && \ - mkdir build && \ - make build && \ - ls -alhR + mkdir build && \ + make build && \ + ls -alhR CMD ["make", "build"] @@ -53,15 +61,15 @@ FROM builder AS development # CMD [] -FROM init AS lint +FROM builder AS lint RUN apt-get -y update && \ - apt-get -y install --no-install-recommends --no-install-suggests dialog apt-utils && \ - apt-get -y install --no-install-recommends --no-install-suggests yamllint && \ - apt-get -y install --no-install-recommends --no-install-suggests nodejs npm && \ - apt-get -y install --no-install-recommends --no-install-suggests cppcheck && \ - rm -rf /var/lib/apt/lists/* && \ - npm install -g --ignore-scripts markdownlint-cli + apt-get -y install --no-install-recommends --no-install-suggests dialog apt-utils && \ + apt-get -y install --no-install-recommends --no-install-suggests yamllint && \ + apt-get -y install --no-install-recommends --no-install-suggests nodejs npm && \ + apt-get -y install --no-install-recommends --no-install-suggests cppcheck && \ + rm -rf /var/lib/apt/lists/* && \ + npm install -g --ignore-scripts markdownlint-cli # Code source COPY ./src ${WORKDIR}/src @@ -83,8 +91,8 @@ CMD ["make", "lint"] FROM development AS testing RUN apt-get -y update && \ - apt-get -y install --no-install-recommends --no-install-suggests gcovr && \ - rm -rf /var/lib/apt/lists/* + apt-get -y install --no-install-recommends --no-install-suggests gcovr && \ + rm -rf /var/lib/apt/lists/* COPY --from=builder ${WORKDIR}/build ${WORKDIR}/ From efbc5446118e1f298cf916f583a37a28b6c7f402 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 12 Sep 2024 22:02:28 -0300 Subject: [PATCH 3/7] [DOC] "environment notes" updated. --- Environment-Notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Environment-Notes.md b/Environment-Notes.md index d202db4..6b2bcf4 100644 --- a/Environment-Notes.md +++ b/Environment-Notes.md @@ -42,6 +42,7 @@ code --install-extension xaver.clang-format code --install-extension ryanluker.vscode-coverage-gutters code --install-extension NathanJ.cpp-tools-plugin code --install-extension ms-vscode.makefile-tools +code --install-extension xaver.clang-format ``` General purpose From be093809eaa1f902b79622ad5bcf4adc2d093f30 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 12 Sep 2024 22:07:25 -0300 Subject: [PATCH 4/7] [DOC] Readme.md updated. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 28b85a6..d126033 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ It is assumed that the following tools have already been installed: - [**CMake**](https://cmake.org/) - [**vcpkg**](https://vcpkg.io/) - [**CppCheck**](https://cppcheck.sourceforge.io/) +- [**(LLVM) clang-format**](https://clang.llvm.org/docs/ClangFormat.html) Using a runtime in your SO. You must install dependencies: From f18dad4254b0de3351a811b75eeeb8657ea438a1 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 12 Sep 2024 22:16:22 -0300 Subject: [PATCH 5/7] [CONFIG] [Github Actions] clang-format added. --- .github/workflows/clang-format.yml | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/clang-format.yml diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml new file mode 100644 index 0000000..e782239 --- /dev/null +++ b/.github/workflows/clang-format.yml @@ -0,0 +1,33 @@ +--- + +name: clang-format style check + +on: # yamllint disable-line rule:truthy + push: + branches: ["main"] + pull_request: + # The branches below must be a subset of the branches above + branches: ["main"] + workflow_dispatch: + +jobs: + lint: + name: clang-format style check + runs-on: ubuntu-22.04 + + steps: + - name: Checkout repository + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + + - name: Install dependencies + # yamllint disable rule:line-length + run: | + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - + sudo apt-add-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" + sudo apt-get -y update + sudo apt-get -y install --no-install-recommends --no-install-suggests clang-format + clang-format --version + # yamllint enable rule:line-length + + - name: Style Check + run: make test/styling From 390959b50d876993badcf11bca0a7970f34782ec Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 12 Sep 2024 22:18:37 -0300 Subject: [PATCH 6/7] [REFACTOR] Code style fixes. --- src/lib/exercises/include/exercises/foo.hpp | 2 +- .../hackerrank/warmup/a_very_big_sum.hpp | 2 +- .../warmup/birthday_cake_candles.hpp | 2 +- .../hackerrank/warmup/compare_triplets.hpp | 3 +- .../hackerrank/warmup/diagonal_difference.hpp | 2 +- .../hackerrank/warmup/simple_array_sum.hpp | 2 +- src/lib/exercises/src/foo.cpp | 4 +- .../src/hackerrank/warmup/a_very_big_sum.cpp | 10 ++--- .../warmup/birthday_cake_candles.cpp | 28 ++++++------ .../hackerrank/warmup/compare_triplets.cpp | 29 ++++++------ .../hackerrank/warmup/diagonal_difference.cpp | 30 ++++++------- .../hackerrank/warmup/simple_array_sum.cpp | 10 ++--- src/tests/unit/lib/foo.test.cpp | 11 +++-- .../hackerrank/warmup/a_very_big_sum.test.cpp | 23 +++++----- .../warmup/birthday_cake_candles.test.cpp | 23 +++++----- .../warmup/compare_triplets.test.cpp | 44 +++++++++---------- .../warmup/diagonal_difference.test.cpp | 23 +++++----- .../warmup/simple_array_sum.test.cpp | 25 ++++++----- 18 files changed, 137 insertions(+), 136 deletions(-) diff --git a/src/lib/exercises/include/exercises/foo.hpp b/src/lib/exercises/include/exercises/foo.hpp index c4a0016..c7c8017 100644 --- a/src/lib/exercises/include/exercises/foo.hpp +++ b/src/lib/exercises/include/exercises/foo.hpp @@ -3,5 +3,5 @@ #include namespace foo { - uint64_t add(uint64_t a, uint64_t b); +uint64_t add(uint64_t a, uint64_t b); }; diff --git a/src/lib/exercises/include/exercises/hackerrank/warmup/a_very_big_sum.hpp b/src/lib/exercises/include/exercises/hackerrank/warmup/a_very_big_sum.hpp index d518350..0c700d5 100644 --- a/src/lib/exercises/include/exercises/hackerrank/warmup/a_very_big_sum.hpp +++ b/src/lib/exercises/include/exercises/hackerrank/warmup/a_very_big_sum.hpp @@ -3,5 +3,5 @@ #pragma once namespace hackerrank::warmup { - long aVeryBigSum(const std::vector& ar); +long aVeryBigSum(const std::vector &ar); } diff --git a/src/lib/exercises/include/exercises/hackerrank/warmup/birthday_cake_candles.hpp b/src/lib/exercises/include/exercises/hackerrank/warmup/birthday_cake_candles.hpp index 6276330..f222e2a 100644 --- a/src/lib/exercises/include/exercises/hackerrank/warmup/birthday_cake_candles.hpp +++ b/src/lib/exercises/include/exercises/hackerrank/warmup/birthday_cake_candles.hpp @@ -3,5 +3,5 @@ #pragma once namespace hackerrank::warmup { - int birthdayCakeCandles(const std::vector& candles); +int birthdayCakeCandles(const std::vector &candles); } diff --git a/src/lib/exercises/include/exercises/hackerrank/warmup/compare_triplets.hpp b/src/lib/exercises/include/exercises/hackerrank/warmup/compare_triplets.hpp index ad3faea..f35d68f 100644 --- a/src/lib/exercises/include/exercises/hackerrank/warmup/compare_triplets.hpp +++ b/src/lib/exercises/include/exercises/hackerrank/warmup/compare_triplets.hpp @@ -3,5 +3,6 @@ #pragma once namespace hackerrank::warmup { - std::vector compareTriplets(const std::vector& a, const std::vector& b); +std::vector compareTriplets(const std::vector &a, + const std::vector &b); } diff --git a/src/lib/exercises/include/exercises/hackerrank/warmup/diagonal_difference.hpp b/src/lib/exercises/include/exercises/hackerrank/warmup/diagonal_difference.hpp index 8019cc7..ac17d35 100644 --- a/src/lib/exercises/include/exercises/hackerrank/warmup/diagonal_difference.hpp +++ b/src/lib/exercises/include/exercises/hackerrank/warmup/diagonal_difference.hpp @@ -3,5 +3,5 @@ #pragma once namespace hackerrank::warmup { - int diagonalDifference(const std::vector>& arr); +int diagonalDifference(const std::vector> &arr); } diff --git a/src/lib/exercises/include/exercises/hackerrank/warmup/simple_array_sum.hpp b/src/lib/exercises/include/exercises/hackerrank/warmup/simple_array_sum.hpp index b85346c..0fc29c7 100644 --- a/src/lib/exercises/include/exercises/hackerrank/warmup/simple_array_sum.hpp +++ b/src/lib/exercises/include/exercises/hackerrank/warmup/simple_array_sum.hpp @@ -3,5 +3,5 @@ #pragma once namespace hackerrank::warmup { - int simpleArraySum(const std::vector& ar); +int simpleArraySum(const std::vector &ar); } diff --git a/src/lib/exercises/src/foo.cpp b/src/lib/exercises/src/foo.cpp index bb1d3c0..9c20f4c 100644 --- a/src/lib/exercises/src/foo.cpp +++ b/src/lib/exercises/src/foo.cpp @@ -1,5 +1,3 @@ #include -uint64_t foo::add(uint64_t a, uint64_t b) { - return a + b; -} +uint64_t foo::add(uint64_t a, uint64_t b) { return a + b; } diff --git a/src/lib/exercises/src/hackerrank/warmup/a_very_big_sum.cpp b/src/lib/exercises/src/hackerrank/warmup/a_very_big_sum.cpp index 9b42bb1..72adb9d 100644 --- a/src/lib/exercises/src/hackerrank/warmup/a_very_big_sum.cpp +++ b/src/lib/exercises/src/hackerrank/warmup/a_very_big_sum.cpp @@ -9,9 +9,9 @@ namespace hackerrank::warmup { - long aVeryBigSum(const std::vector& ar) { - const long INIT_VALUE = 0L; - return std::accumulate(ar.begin(), ar.end(), INIT_VALUE); - } - +long aVeryBigSum(const std::vector &ar) { + const long INIT_VALUE = 0L; + return std::accumulate(ar.begin(), ar.end(), INIT_VALUE); } + +} // namespace hackerrank::warmup diff --git a/src/lib/exercises/src/hackerrank/warmup/birthday_cake_candles.cpp b/src/lib/exercises/src/hackerrank/warmup/birthday_cake_candles.cpp index 07fdc58..c99a656 100644 --- a/src/lib/exercises/src/hackerrank/warmup/birthday_cake_candles.cpp +++ b/src/lib/exercises/src/hackerrank/warmup/birthday_cake_candles.cpp @@ -7,20 +7,20 @@ #include namespace hackerrank::warmup { - int birthdayCakeCandles(const std::vector& candles) { - int counter = 0; - int maximum = candles[0]; +int birthdayCakeCandles(const std::vector &candles) { + int counter = 0; + int maximum = candles[0]; - for (const int& element : candles) { - if (element == maximum) { - counter += 1; - } - if (element > maximum) { - maximum = element; - counter = 1; - } - } - - return counter; + for (const int &element : candles) { + if (element == maximum) { + counter += 1; + } + if (element > maximum) { + maximum = element; + counter = 1; } + } + + return counter; } +} // namespace hackerrank::warmup diff --git a/src/lib/exercises/src/hackerrank/warmup/compare_triplets.cpp b/src/lib/exercises/src/hackerrank/warmup/compare_triplets.cpp index 2281edd..45358bd 100644 --- a/src/lib/exercises/src/hackerrank/warmup/compare_triplets.cpp +++ b/src/lib/exercises/src/hackerrank/warmup/compare_triplets.cpp @@ -8,21 +8,22 @@ namespace hackerrank::warmup { - std::vector compareTriplets(const std::vector& a, const std::vector& b) { - std::vector awards = {0, 0}; +std::vector compareTriplets(const std::vector &a, + const std::vector &b) { + std::vector awards = {0, 0}; - int i = 0; - for (const int& value : a) { - if (value > b[i]) { - awards[0] = awards[0] + 1; - } - if (value < b[i]) { - awards[1] = awards[1] + 1; - } - - i += 1; - } - return awards; + int i = 0; + for (const int &value : a) { + if (value > b[i]) { + awards[0] = awards[0] + 1; + } + if (value < b[i]) { + awards[1] = awards[1] + 1; } + i += 1; + } + return awards; } + +} // namespace hackerrank::warmup diff --git a/src/lib/exercises/src/hackerrank/warmup/diagonal_difference.cpp b/src/lib/exercises/src/hackerrank/warmup/diagonal_difference.cpp index dc5d5db..3dc48da 100644 --- a/src/lib/exercises/src/hackerrank/warmup/diagonal_difference.cpp +++ b/src/lib/exercises/src/hackerrank/warmup/diagonal_difference.cpp @@ -4,25 +4,25 @@ * @link Problem definition [[docs/hackerrank/warmup/diagonal_difference.md]] */ -#include -#include #include #include +#include +#include namespace hackerrank::warmup { - int diagonalDifference(const std::vector>& arr) { - int diag1 = 0; - int diag2 = 0; - size_t last = arr.size() - 1L; +int diagonalDifference(const std::vector> &arr) { + int diag1 = 0; + int diag2 = 0; + size_t last = arr.size() - 1L; - for (int i = 0; i < arr.size(); i++) { - for (int j = 0; j < arr[i].size(); j++) { - if (i == j) { - diag1 += arr[i][j]; - diag2 += arr[last - i][j]; - } - } - } - return abs(diag1 - diag2); + for (int i = 0; i < arr.size(); i++) { + for (int j = 0; j < arr[i].size(); j++) { + if (i == j) { + diag1 += arr[i][j]; + diag2 += arr[last - i][j]; + } } + } + return abs(diag1 - diag2); } +} // namespace hackerrank::warmup diff --git a/src/lib/exercises/src/hackerrank/warmup/simple_array_sum.cpp b/src/lib/exercises/src/hackerrank/warmup/simple_array_sum.cpp index aebefd8..a2a2342 100644 --- a/src/lib/exercises/src/hackerrank/warmup/simple_array_sum.cpp +++ b/src/lib/exercises/src/hackerrank/warmup/simple_array_sum.cpp @@ -9,9 +9,9 @@ namespace hackerrank::warmup { - int simpleArraySum(const std::vector& ar) { - const int INIT_VALUE = 0; - return std::accumulate(ar.begin(), ar.end(), INIT_VALUE); - } - +int simpleArraySum(const std::vector &ar) { + const int INIT_VALUE = 0; + return std::accumulate(ar.begin(), ar.end(), INIT_VALUE); } + +} // namespace hackerrank::warmup diff --git a/src/tests/unit/lib/foo.test.cpp b/src/tests/unit/lib/foo.test.cpp index 9d2a727..16807b8 100644 --- a/src/tests/unit/lib/foo.test.cpp +++ b/src/tests/unit/lib/foo.test.cpp @@ -2,10 +2,9 @@ #include -TEST_CASE("adding numbers work", "[foo]") -{ - CHECK(foo::add(0, 0) == 0); - CHECK(foo::add(0, 7) == 7); - CHECK(foo::add(7, 0) == 7); - CHECK(foo::add(7, 7) == 14); +TEST_CASE("adding numbers work", "[foo]") { + CHECK(foo::add(0, 0) == 0); + CHECK(foo::add(0, 7) == 7); + CHECK(foo::add(7, 0) == 7); + CHECK(foo::add(7, 7) == 14); } diff --git a/src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.test.cpp b/src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.test.cpp index ff3cbfc..da48957 100644 --- a/src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.test.cpp +++ b/src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.test.cpp @@ -9,18 +9,19 @@ #include using json = nlohmann::json; -TEST_CASE("aVeryBigSum JSON Test Cases", "[warmup]") -{ - std::filesystem::path cwd = std::filesystem::current_path(); - std::string path = cwd.string() + "/unit/lib/hackerrank/warmup/a_very_big_sum.testcases.json"; +TEST_CASE("aVeryBigSum JSON Test Cases", "[warmup]") { + std::filesystem::path cwd = std::filesystem::current_path(); + std::string path = + cwd.string() + + "/unit/lib/hackerrank/warmup/a_very_big_sum.testcases.json"; - INFO("aVeryBigSum JSON test cases FILE: " << path); + INFO("aVeryBigSum JSON test cases FILE: " << path); - std::ifstream f(path); - json data = json::parse(f); + std::ifstream f(path); + json data = json::parse(f); - for (auto testcase : data) { - long result = hackerrank::warmup::aVeryBigSum(testcase["input"]); - CHECK(result == testcase["expected"]); - } + for (auto testcase : data) { + long result = hackerrank::warmup::aVeryBigSum(testcase["input"]); + CHECK(result == testcase["expected"]); + } } diff --git a/src/tests/unit/lib/hackerrank/warmup/birthday_cake_candles.test.cpp b/src/tests/unit/lib/hackerrank/warmup/birthday_cake_candles.test.cpp index 0a89092..5f87726 100644 --- a/src/tests/unit/lib/hackerrank/warmup/birthday_cake_candles.test.cpp +++ b/src/tests/unit/lib/hackerrank/warmup/birthday_cake_candles.test.cpp @@ -9,18 +9,19 @@ #include using json = nlohmann::json; -TEST_CASE("birthdayCakeCandles JSON Test Cases", "[warmup]") -{ - std::filesystem::path cwd = std::filesystem::current_path(); - std::string path = cwd.string() + "/unit/lib/hackerrank/warmup/birthday_cake_candles.testcases.json"; +TEST_CASE("birthdayCakeCandles JSON Test Cases", "[warmup]") { + std::filesystem::path cwd = std::filesystem::current_path(); + std::string path = + cwd.string() + + "/unit/lib/hackerrank/warmup/birthday_cake_candles.testcases.json"; - INFO("birthdayCakeCandles JSON test cases FILE: " << path); + INFO("birthdayCakeCandles JSON test cases FILE: " << path); - std::ifstream f(path); - json data = json::parse(f); + std::ifstream f(path); + json data = json::parse(f); - for (auto testcase : data) { - long result = hackerrank::warmup::birthdayCakeCandles(testcase["input"]); - CHECK(result == testcase["expected"]); - } + for (auto testcase : data) { + long result = hackerrank::warmup::birthdayCakeCandles(testcase["input"]); + CHECK(result == testcase["expected"]); + } } diff --git a/src/tests/unit/lib/hackerrank/warmup/compare_triplets.test.cpp b/src/tests/unit/lib/hackerrank/warmup/compare_triplets.test.cpp index a9bdc2a..06175d7 100644 --- a/src/tests/unit/lib/hackerrank/warmup/compare_triplets.test.cpp +++ b/src/tests/unit/lib/hackerrank/warmup/compare_triplets.test.cpp @@ -9,31 +9,29 @@ #include using json = nlohmann::json; -TEST_CASE("compareTriplets JSON Test Cases", "[warmup]") -{ - std::filesystem::path cwd = std::filesystem::current_path(); - std::string path = cwd.string() + "/unit/lib/hackerrank/warmup/compare_triplets.testcases.json"; - - INFO("compareTriplets JSON test cases FILE: " << path); - - std::ifstream f(path); - json data = json::parse(f); - - for (auto testcase : data) { - std::vector result = hackerrank::warmup::compareTriplets(testcase["a"], testcase["b"]); - CHECK(result == testcase["expected"]); - } +TEST_CASE("compareTriplets JSON Test Cases", "[warmup]") { + std::filesystem::path cwd = std::filesystem::current_path(); + std::string path = + cwd.string() + + "/unit/lib/hackerrank/warmup/compare_triplets.testcases.json"; + + INFO("compareTriplets JSON test cases FILE: " << path); + + std::ifstream f(path); + json data = json::parse(f); + + for (auto testcase : data) { + std::vector result = + hackerrank::warmup::compareTriplets(testcase["a"], testcase["b"]); + CHECK(result == testcase["expected"]); + } } -TEST_CASE("compareTriplets EDGE CASE empty input", "[warmup]") -{ - std::vector a; - std::vector b; +TEST_CASE("compareTriplets EDGE CASE empty input", "[warmup]") { + std::vector a; + std::vector b; - std::vector result = hackerrank::warmup::compareTriplets( - a, - b - ); + std::vector result = hackerrank::warmup::compareTriplets(a, b); - CHECK(result == std::vector{0, 0}); + CHECK(result == std::vector{0, 0}); } diff --git a/src/tests/unit/lib/hackerrank/warmup/diagonal_difference.test.cpp b/src/tests/unit/lib/hackerrank/warmup/diagonal_difference.test.cpp index ef29adb..adcd79b 100644 --- a/src/tests/unit/lib/hackerrank/warmup/diagonal_difference.test.cpp +++ b/src/tests/unit/lib/hackerrank/warmup/diagonal_difference.test.cpp @@ -9,18 +9,19 @@ #include using json = nlohmann::json; -TEST_CASE("diagonalDifference JSON Test Cases", "[warmup]") -{ - std::filesystem::path cwd = std::filesystem::current_path(); - std::string path = cwd.string() + "/unit/lib/hackerrank/warmup/diagonal_difference.testcases.json"; +TEST_CASE("diagonalDifference JSON Test Cases", "[warmup]") { + std::filesystem::path cwd = std::filesystem::current_path(); + std::string path = + cwd.string() + + "/unit/lib/hackerrank/warmup/diagonal_difference.testcases.json"; - INFO("diagonalDifference JSON test cases FILE: " << path); + INFO("diagonalDifference JSON test cases FILE: " << path); - std::ifstream f(path); - json data = json::parse(f); + std::ifstream f(path); + json data = json::parse(f); - for (auto testcase : data) { - long result = hackerrank::warmup::diagonalDifference(testcase["matrix"]); - CHECK(result == testcase["expected"]); - } + for (auto testcase : data) { + long result = hackerrank::warmup::diagonalDifference(testcase["matrix"]); + CHECK(result == testcase["expected"]); + } } diff --git a/src/tests/unit/lib/hackerrank/warmup/simple_array_sum.test.cpp b/src/tests/unit/lib/hackerrank/warmup/simple_array_sum.test.cpp index 02285e8..28bf670 100644 --- a/src/tests/unit/lib/hackerrank/warmup/simple_array_sum.test.cpp +++ b/src/tests/unit/lib/hackerrank/warmup/simple_array_sum.test.cpp @@ -1,25 +1,26 @@ #include #include -#include #include #include #include +#include using json = nlohmann::json; -TEST_CASE("simpleArraySum", "[warmup]") -{ - std::filesystem::path cwd = std::filesystem::current_path(); - std::string path = cwd.string() + "/unit/lib/hackerrank/warmup/simple_array_sum.testcases.json"; +TEST_CASE("simpleArraySum", "[warmup]") { + std::filesystem::path cwd = std::filesystem::current_path(); + std::string path = + cwd.string() + + "/unit/lib/hackerrank/warmup/simple_array_sum.testcases.json"; - INFO("simpleArraySum JSON test cases FILE: " << path); + INFO("simpleArraySum JSON test cases FILE: " << path); - std::ifstream f(path); - json data = json::parse(f); + std::ifstream f(path); + json data = json::parse(f); - for (auto testcase : data) { - int result = hackerrank::warmup::simpleArraySum(testcase["input"]); - CHECK(result == testcase["expected"]); - } + for (auto testcase : data) { + int result = hackerrank::warmup::simpleArraySum(testcase["input"]); + CHECK(result == testcase["expected"]); + } } From 85e7b3834d63d86ba58cd28e52cadadae150c119 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 12 Sep 2024 23:02:08 -0300 Subject: [PATCH 7/7] [CONFIG] [Docker] Ubuntu base image re-rewrite --- Dockerfile | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index 615f5d9..bc45c1a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04 AS init +FROM ubuntu:24.10 AS init ENV WORKDIR=/app WORKDIR ${WORKDIR} @@ -9,17 +9,12 @@ RUN apt-get -y update && \ FROM init AS builder -# build tools +ARG DEBIAN_FRONTEND=noninteractive +ENV TZ=Etc/UTC +# build tools RUN apt-get update && \ - apt-get -y install --no-install-recommends --no-install-suggests gnupg software-properties-common && \ - rm -rf /var/lib/apt/lists/* -ADD https://apt.llvm.org/llvm-snapshot.gpg.key llvm-snapshot.gpg.key -RUN apt-key add llvm-snapshot.gpg.key && \ - apt-add-repository "deb http://apt.llvm.org/noble/ llvm-toolchain-noble main" && \ - apt-get -y update && \ apt-get -y install --no-install-recommends --no-install-suggests build-essential cmake g++ make pkg-config && \ - apt-get -y install --no-install-recommends --no-install-suggests clang-format && \ rm -rf /var/lib/apt/lists/* # vcpkg Package Manager @@ -63,13 +58,25 @@ FROM builder AS development FROM builder AS lint -RUN apt-get -y update && \ - apt-get -y install --no-install-recommends --no-install-suggests dialog apt-utils && \ - apt-get -y install --no-install-recommends --no-install-suggests yamllint && \ - apt-get -y install --no-install-recommends --no-install-suggests nodejs npm && \ +RUN apt-get update && \ + apt-get -y install --no-install-recommends --no-install-suggests gnupg software-properties-common && \ + rm -rf /var/lib/apt/lists/* +ADD https://apt.llvm.org/llvm-snapshot.gpg.key llvm-snapshot.gpg.key +RUN apt-key add llvm-snapshot.gpg.key && \ + apt-add-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" && \ + apt-get -y update && \ + apt-get -y install --no-install-recommends --no-install-suggests clang-format && \ + rm -rf /var/lib/apt/lists/* + +ADD https://deb.nodesource.com/setup_22.x nodesource_setup.sh +RUN bash nodesource_setup.sh && \ + apt-get -y install --no-install-recommends --no-install-suggests nodejs && \ + npm install -g --ignore-scripts markdownlint-cli && \ + apt-get -y install --no-install-recommends --no-install-suggests python3 python3-pip && \ + rm /usr/lib/python3.*/EXTERNALLY-MANAGED && \ + pip install --no-cache-dir yamllint && \ apt-get -y install --no-install-recommends --no-install-suggests cppcheck && \ - rm -rf /var/lib/apt/lists/* && \ - npm install -g --ignore-scripts markdownlint-cli + rm -rf /var/lib/apt/lists/* # Code source COPY ./src ${WORKDIR}/src @@ -98,7 +105,7 @@ COPY --from=builder ${WORKDIR}/build ${WORKDIR}/ CMD ["make", "test"] -FROM ubuntu:24.04 AS production +FROM ubuntu:24.10 AS production ENV LOG_LEVEL=INFO ENV BRUTEFORCE=false