From 218ac81f292ff47046781f6d927af0b090e95e5d Mon Sep 17 00:00:00 2001 From: prat33k-dev Date: Sun, 19 Sep 2021 01:01:10 -0400 Subject: [PATCH 01/17] Initial commit --- .gitmodules | 6 - .travis.yml | 40 - .vscode/.cmaketools.json | 10 - .vscode/c_cpp_properties.json | 33 - .vscode/settings.json | 26 - .ycm_extra_conf.py | 147 - .../Accelerated_C++_3_5/.gitignore | 0 .../Accelerated_C++_3_5/CMakeLists.txt | 3 +- .../UML_diagram/AcceleratedC++_3_5.pdf | Bin 0 -> 12781 bytes .../app/Accelerated_C++_3_5.cpp | 59 + Week 3/Accelerated_C++_3_5/app/CMakeLists.txt | 4 + .../cmake}/CodeCoverage.cmake | 0 Week 3/Accelerated_C++_3_5/readme.md | 1 + .../Accelerated_C++_3_5/test}/CMakeLists.txt | 0 .../Accelerated_C++_3_5/test}/main.cpp | 0 .../Accelerated_C++_3_5/test}/test.cpp | 0 Week 3/Accelerated_C++_4_5/.gitignore | 11 + Week 3/Accelerated_C++_4_5/CMakeLists.txt | 27 + .../UML_diagram/Accelerated_C++_4_5.pdf | Bin 0 -> 10955 bytes .../app/Accelerated_C++_4_5.cpp | 56 + Week 3/Accelerated_C++_4_5/app/CMakeLists.txt | 4 + .../cmake/CodeCoverage.cmake | 203 + Week 3/Accelerated_C++_4_5/readme.md | 1 + .../Accelerated_C++_4_5/test/CMakeLists.txt | 11 + Week 3/Accelerated_C++_4_5/test/main.cpp | 6 + Week 3/Accelerated_C++_4_5/test/test.cpp | 5 + Week 3/Accelerated_C++_4_7/.gitignore | 11 + Week 3/Accelerated_C++_4_7/CMakeLists.txt | 27 + .../UML_diagram/Accelerated_C++_4_7.pdf | Bin 0 -> 9586 bytes .../app/Accelerated_C++_4_7.cpp | 29 + Week 3/Accelerated_C++_4_7/app/CMakeLists.txt | 4 + .../cmake/CodeCoverage.cmake | 203 + Week 3/Accelerated_C++_4_7/readme.md | 1 + .../Accelerated_C++_4_7/test/CMakeLists.txt | 11 + Week 3/Accelerated_C++_4_7/test/main.cpp | 6 + Week 3/Accelerated_C++_4_7/test/test.cpp | 5 + Week 3/Accelerated_C++_6_9/.gitignore | 11 + .../UML_diagram/Accelerated_C++_6_9.pdf | Bin 0 -> 9715 bytes .../app/Accelerated_C++_6_9.cpp | 30 + Week 3/Accelerated_C++_6_9/app/CMakeLists.txt | 4 + .../cmake/CodeCoverage.cmake | 203 + Week 3/Accelerated_C++_6_9/readme.md | 1 + .../Accelerated_C++_6_9/test/CMakeLists.txt | 11 + Week 3/Accelerated_C++_6_9/test/main.cpp | 6 + Week 3/Accelerated_C++_6_9/test/test.cpp | 5 + Week 3/SoftwareEngineering_3_10/.gitignore | 11 + .../SoftwareEngineering_3_10/CMakeLists.txt | 26 + .../UML_diagram/SoftwareEngineering_3_10.pdf | Bin 0 -> 12093 bytes .../app/CMakeLists.txt | 4 + .../app/SoftwareEngineering_3_10.cpp | 42 + .../cmake/CodeCoverage.cmake | 203 + .../include/SoftwareEngineering_3_10.h | 93 + Week 3/SoftwareEngineering_3_10/readme.md | 1 + .../test/CMakeLists.txt | 11 + Week 3/SoftwareEngineering_3_10/test/main.cpp | 6 + Week 3/SoftwareEngineering_3_10/test/test.cpp | 5 + Week 3/readme.md | 17 + Week 3/week_3.pdf | Bin 0 -> 312973 bytes app/CMakeLists.txt | 4 - app/main.cpp | 8 - include/lib.hpp | 8 - readme.md | 126 - vendor/googletest/.gitignore | 2 - vendor/googletest/.travis.yml | 46 - vendor/googletest/CMakeLists.txt | 16 - vendor/googletest/README.md | 142 - vendor/googletest/appveyor.yml | 71 - vendor/googletest/googlemock/CHANGES | 126 - vendor/googletest/googlemock/CMakeLists.txt | 202 - vendor/googletest/googlemock/CONTRIBUTORS | 40 - vendor/googletest/googlemock/LICENSE | 28 - vendor/googletest/googlemock/Makefile.am | 224 - vendor/googletest/googlemock/README.md | 333 - vendor/googletest/googlemock/build-aux/.keep | 0 vendor/googletest/googlemock/configure.ac | 146 - .../googletest/googlemock/docs/CheatSheet.md | 562 -- vendor/googletest/googlemock/docs/CookBook.md | 3675 -------- .../googletest/googlemock/docs/DesignDoc.md | 280 - vendor/googletest/googlemock/docs/DevGuide.md | 132 - .../googlemock/docs/Documentation.md | 12 - .../googletest/googlemock/docs/ForDummies.md | 439 - .../docs/FrequentlyAskedQuestions.md | 628 -- .../googletest/googlemock/docs/KnownIssues.md | 19 - .../googlemock/docs/v1_5/CheatSheet.md | 525 -- .../googlemock/docs/v1_5/CookBook.md | 3250 ------- .../googlemock/docs/v1_5/Documentation.md | 11 - .../googlemock/docs/v1_5/ForDummies.md | 439 - .../docs/v1_5/FrequentlyAskedQuestions.md | 624 -- .../googlemock/docs/v1_6/CheatSheet.md | 534 -- .../googlemock/docs/v1_6/CookBook.md | 3342 ------- .../googlemock/docs/v1_6/Documentation.md | 12 - .../googlemock/docs/v1_6/ForDummies.md | 439 - .../docs/v1_6/FrequentlyAskedQuestions.md | 628 -- .../googlemock/docs/v1_7/CheatSheet.md | 556 -- .../googlemock/docs/v1_7/CookBook.md | 3432 -------- .../googlemock/docs/v1_7/Documentation.md | 12 - .../googlemock/docs/v1_7/ForDummies.md | 439 - .../docs/v1_7/FrequentlyAskedQuestions.md | 628 -- .../googlemock/include/gmock/gmock-actions.h | 1205 --- .../include/gmock/gmock-cardinalities.h | 147 - .../include/gmock/gmock-generated-actions.h | 2377 ----- .../gmock/gmock-generated-actions.h.pump | 794 -- .../gmock/gmock-generated-function-mockers.h | 1095 --- .../gmock-generated-function-mockers.h.pump | 291 - .../include/gmock/gmock-generated-matchers.h | 2179 ----- .../gmock/gmock-generated-matchers.h.pump | 672 -- .../gmock/gmock-generated-nice-strict.h | 397 - .../gmock/gmock-generated-nice-strict.h.pump | 161 - .../googlemock/include/gmock/gmock-matchers.h | 4399 ---------- .../include/gmock/gmock-more-actions.h | 246 - .../include/gmock/gmock-more-matchers.h | 58 - .../include/gmock/gmock-spec-builders.h | 1847 ---- .../googlemock/include/gmock/gmock.h | 94 - .../internal/custom/gmock-generated-actions.h | 8 - .../custom/gmock-generated-actions.h.pump | 10 - .../gmock/internal/custom/gmock-matchers.h | 39 - .../gmock/internal/custom/gmock-port.h | 46 - .../internal/gmock-generated-internal-utils.h | 279 - .../gmock-generated-internal-utils.h.pump | 136 - .../gmock/internal/gmock-internal-utils.h | 511 -- .../include/gmock/internal/gmock-port.h | 91 - vendor/googletest/googlemock/make/Makefile | 101 - .../googletest/googlemock/msvc/2005/gmock.sln | 32 - .../googlemock/msvc/2005/gmock.vcproj | 191 - .../googlemock/msvc/2005/gmock_config.vsprops | 15 - .../googlemock/msvc/2005/gmock_main.vcproj | 187 - .../googlemock/msvc/2005/gmock_test.vcproj | 201 - .../googletest/googlemock/msvc/2010/gmock.sln | 32 - .../googlemock/msvc/2010/gmock.vcxproj | 82 - .../googlemock/msvc/2010/gmock_config.props | 19 - .../googlemock/msvc/2010/gmock_main.vcxproj | 88 - .../googlemock/msvc/2010/gmock_test.vcxproj | 101 - .../googletest/googlemock/msvc/2015/gmock.sln | 32 - .../googlemock/msvc/2015/gmock.vcxproj | 84 - .../googlemock/msvc/2015/gmock_config.props | 19 - .../googlemock/msvc/2015/gmock_main.vcxproj | 90 - .../googlemock/msvc/2015/gmock_test.vcxproj | 103 - .../googlemock/scripts/fuse_gmock_files.py | 240 - .../googlemock/scripts/generator/LICENSE | 203 - .../googlemock/scripts/generator/README | 35 - .../scripts/generator/README.cppclean | 115 - .../scripts/generator/cpp/__init__.py | 0 .../googlemock/scripts/generator/cpp/ast.py | 1733 ---- .../scripts/generator/cpp/gmock_class.py | 227 - .../scripts/generator/cpp/gmock_class_test.py | 448 - .../scripts/generator/cpp/keywords.py | 59 - .../scripts/generator/cpp/tokenize.py | 287 - .../googlemock/scripts/generator/cpp/utils.py | 41 - .../googlemock/scripts/generator/gmock_gen.py | 31 - .../googlemock/scripts/gmock-config.in | 303 - .../googlemock/scripts/gmock_doctor.py | 640 -- .../googletest/googlemock/scripts/upload.py | 1387 --- .../googlemock/scripts/upload_gmock.py | 78 - vendor/googletest/googlemock/src/gmock-all.cc | 47 - .../googlemock/src/gmock-cardinalities.cc | 156 - .../googlemock/src/gmock-internal-utils.cc | 174 - .../googlemock/src/gmock-matchers.cc | 498 -- .../googlemock/src/gmock-spec-builders.cc | 823 -- vendor/googletest/googlemock/src/gmock.cc | 183 - .../googletest/googlemock/src/gmock_main.cc | 54 - .../googlemock/test/gmock-actions_test.cc | 1411 --- .../test/gmock-cardinalities_test.cc | 428 - .../test/gmock-generated-actions_test.cc | 1228 --- .../gmock-generated-function-mockers_test.cc | 622 -- .../gmock-generated-internal-utils_test.cc | 127 - .../test/gmock-generated-matchers_test.cc | 1286 --- .../test/gmock-internal-utils_test.cc | 699 -- .../googlemock/test/gmock-matchers_test.cc | 5652 ------------ .../test/gmock-more-actions_test.cc | 708 -- .../googlemock/test/gmock-nice-strict_test.cc | 424 - .../googlemock/test/gmock-port_test.cc | 43 - .../test/gmock-spec-builders_test.cc | 2644 ------ .../googlemock/test/gmock_all_test.cc | 51 - .../googlemock/test/gmock_ex_test.cc | 81 - .../googlemock/test/gmock_leak_test.py | 108 - .../googlemock/test/gmock_leak_test_.cc | 100 - .../googlemock/test/gmock_link2_test.cc | 40 - .../googlemock/test/gmock_link_test.cc | 40 - .../googlemock/test/gmock_link_test.h | 669 -- .../googlemock/test/gmock_output_test.py | 180 - .../googlemock/test/gmock_output_test_.cc | 291 - .../test/gmock_output_test_golden.txt | 310 - .../googlemock/test/gmock_stress_test.cc | 322 - .../googletest/googlemock/test/gmock_test.cc | 220 - .../googlemock/test/gmock_test_utils.py | 112 - vendor/googletest/googletest/.gitignore | 2 - vendor/googletest/googletest/CHANGES | 157 - vendor/googletest/googletest/CMakeLists.txt | 286 - vendor/googletest/googletest/CONTRIBUTORS | 37 - vendor/googletest/googletest/LICENSE | 28 - vendor/googletest/googletest/Makefile.am | 310 - vendor/googletest/googletest/README.md | 280 - vendor/googletest/googletest/build-aux/.keep | 0 .../googletest/cmake/internal_utils.cmake | 256 - .../googletest/codegear/gtest.cbproj | 138 - .../googletest/codegear/gtest.groupproj | 54 - .../googletest/codegear/gtest_all.cc | 38 - .../googletest/codegear/gtest_link.cc | 40 - .../googletest/codegear/gtest_main.cbproj | 82 - .../googletest/codegear/gtest_unittest.cbproj | 88 - vendor/googletest/googletest/configure.ac | 68 - .../googletest/docs/AdvancedGuide.md | 2182 ----- vendor/googletest/googletest/docs/DevGuide.md | 126 - .../googletest/docs/Documentation.md | 14 - vendor/googletest/googletest/docs/FAQ.md | 1087 --- vendor/googletest/googletest/docs/Primer.md | 502 -- .../googletest/googletest/docs/PumpManual.md | 177 - vendor/googletest/googletest/docs/Samples.md | 14 - .../googletest/docs/V1_5_AdvancedGuide.md | 2096 ----- .../googletest/docs/V1_5_Documentation.md | 12 - vendor/googletest/googletest/docs/V1_5_FAQ.md | 886 -- .../googletest/googletest/docs/V1_5_Primer.md | 497 -- .../googletest/docs/V1_5_PumpManual.md | 177 - .../googletest/docs/V1_5_XcodeGuide.md | 93 - .../googletest/docs/V1_6_AdvancedGuide.md | 2178 ----- .../googletest/docs/V1_6_Documentation.md | 14 - vendor/googletest/googletest/docs/V1_6_FAQ.md | 1038 --- .../googletest/googletest/docs/V1_6_Primer.md | 501 -- .../googletest/docs/V1_6_PumpManual.md | 177 - .../googletest/docs/V1_6_Samples.md | 14 - .../googletest/docs/V1_6_XcodeGuide.md | 93 - .../googletest/docs/V1_7_AdvancedGuide.md | 2181 ----- .../googletest/docs/V1_7_Documentation.md | 14 - vendor/googletest/googletest/docs/V1_7_FAQ.md | 1082 --- .../googletest/googletest/docs/V1_7_Primer.md | 501 -- .../googletest/docs/V1_7_PumpManual.md | 177 - .../googletest/docs/V1_7_Samples.md | 14 - .../googletest/docs/V1_7_XcodeGuide.md | 93 - .../googletest/googletest/docs/XcodeGuide.md | 93 - .../include/gtest/gtest-death-test.h | 294 - .../googletest/include/gtest/gtest-message.h | 250 - .../include/gtest/gtest-param-test.h | 1444 --- .../include/gtest/gtest-param-test.h.pump | 510 -- .../googletest/include/gtest/gtest-printers.h | 993 --- .../googletest/include/gtest/gtest-spi.h | 232 - .../include/gtest/gtest-test-part.h | 179 - .../include/gtest/gtest-typed-test.h | 263 - .../googletest/include/gtest/gtest.h | 2236 ----- .../include/gtest/gtest_pred_impl.h | 358 - .../googletest/include/gtest/gtest_prod.h | 58 - .../gtest/internal/custom/gtest-port.h | 69 - .../gtest/internal/custom/gtest-printers.h | 42 - .../include/gtest/internal/custom/gtest.h | 41 - .../internal/gtest-death-test-internal.h | 319 - .../include/gtest/internal/gtest-filepath.h | 206 - .../include/gtest/internal/gtest-internal.h | 1238 --- .../include/gtest/internal/gtest-linked_ptr.h | 243 - .../internal/gtest-param-util-generated.h | 5146 ----------- .../gtest-param-util-generated.h.pump | 286 - .../include/gtest/internal/gtest-param-util.h | 731 -- .../include/gtest/internal/gtest-port-arch.h | 93 - .../include/gtest/internal/gtest-port.h | 2560 ------ .../include/gtest/internal/gtest-string.h | 167 - .../include/gtest/internal/gtest-tuple.h | 1020 --- .../include/gtest/internal/gtest-tuple.h.pump | 347 - .../include/gtest/internal/gtest-type-util.h | 3331 ------- .../gtest/internal/gtest-type-util.h.pump | 297 - .../googletest/googletest/m4/acx_pthread.m4 | 363 - vendor/googletest/googletest/m4/gtest.m4 | 74 - vendor/googletest/googletest/make/Makefile | 82 - .../googletest/googletest/msvc/gtest-md.sln | 45 - .../googletest/msvc/gtest-md.vcproj | 126 - vendor/googletest/googletest/msvc/gtest.sln | 45 - .../googletest/googletest/msvc/gtest.vcproj | 126 - .../googletest/msvc/gtest_main-md.vcproj | 129 - .../googletest/msvc/gtest_main.vcproj | 129 - .../googletest/msvc/gtest_prod_test-md.vcproj | 164 - .../googletest/msvc/gtest_prod_test.vcproj | 164 - .../googletest/msvc/gtest_unittest-md.vcproj | 147 - .../googletest/msvc/gtest_unittest.vcproj | 147 - .../googletest/samples/prime_tables.h | 123 - .../googletest/googletest/samples/sample1.cc | 68 - .../googletest/googletest/samples/sample1.h | 43 - .../googletest/samples/sample10_unittest.cc | 144 - .../googletest/samples/sample1_unittest.cc | 153 - .../googletest/googletest/samples/sample2.cc | 56 - .../googletest/googletest/samples/sample2.h | 85 - .../googletest/samples/sample2_unittest.cc | 109 - .../googletest/samples/sample3-inl.h | 172 - .../googletest/samples/sample3_unittest.cc | 151 - .../googletest/googletest/samples/sample4.cc | 46 - .../googletest/googletest/samples/sample4.h | 53 - .../googletest/samples/sample4_unittest.cc | 45 - .../googletest/samples/sample5_unittest.cc | 199 - .../googletest/samples/sample6_unittest.cc | 224 - .../googletest/samples/sample7_unittest.cc | 130 - .../googletest/samples/sample8_unittest.cc | 173 - .../googletest/samples/sample9_unittest.cc | 160 - .../googletest/googletest/scripts/common.py | 83 - .../googletest/scripts/fuse_gtest_files.py | 253 - .../googletest/scripts/gen_gtest_pred_impl.py | 730 -- .../googletest/scripts/gtest-config.in | 274 - vendor/googletest/googletest/scripts/pump.py | 855 -- .../googletest/scripts/release_docs.py | 158 - .../googletest/scripts/test/Makefile | 59 - .../googletest/googletest/scripts/upload.py | 1387 --- .../googletest/scripts/upload_gtest.py | 78 - vendor/googletest/googletest/src/gtest-all.cc | 48 - .../googletest/src/gtest-death-test.cc | 1342 --- .../googletest/src/gtest-filepath.cc | 387 - .../googletest/src/gtest-internal-inl.h | 1183 --- .../googletest/googletest/src/gtest-port.cc | 1259 --- .../googletest/src/gtest-printers.cc | 373 - .../googletest/src/gtest-test-part.cc | 110 - .../googletest/src/gtest-typed-test.cc | 118 - vendor/googletest/googletest/src/gtest.cc | 5388 ------------ .../googletest/googletest/src/gtest_main.cc | 38 - .../test/gtest-death-test_ex_test.cc | 93 - .../googletest/test/gtest-death-test_test.cc | 1427 --- .../googletest/test/gtest-filepath_test.cc | 662 -- .../googletest/test/gtest-linked_ptr_test.cc | 154 - .../googletest/test/gtest-listener_test.cc | 311 - .../googletest/test/gtest-message_test.cc | 159 - .../googletest/test/gtest-options_test.cc | 215 - .../googletest/test/gtest-param-test2_test.cc | 65 - .../googletest/test/gtest-param-test_test.cc | 1055 --- .../googletest/test/gtest-param-test_test.h | 57 - .../googletest/test/gtest-port_test.cc | 1311 --- .../googletest/test/gtest-printers_test.cc | 1635 ---- .../googletest/test/gtest-test-part_test.cc | 208 - .../googletest/test/gtest-tuple_test.cc | 320 - .../googletest/test/gtest-typed-test2_test.cc | 45 - .../googletest/test/gtest-typed-test_test.cc | 380 - .../googletest/test/gtest-typed-test_test.h | 66 - .../test/gtest-unittest-api_test.cc | 341 - .../googletest/test/gtest_all_test.cc | 47 - .../test/gtest_break_on_failure_unittest.py | 212 - .../test/gtest_break_on_failure_unittest_.cc | 88 - .../test/gtest_catch_exceptions_test.py | 237 - .../test/gtest_catch_exceptions_test_.cc | 311 - .../googletest/test/gtest_color_test.py | 130 - .../googletest/test/gtest_color_test_.cc | 71 - .../googletest/test/gtest_env_var_test.py | 117 - .../googletest/test/gtest_env_var_test_.cc | 126 - .../googletest/test/gtest_environment_test.cc | 192 - .../googletest/test/gtest_filter_unittest.py | 636 -- .../googletest/test/gtest_filter_unittest_.cc | 140 - .../googletest/test/gtest_help_test.py | 172 - .../googletest/test/gtest_help_test_.cc | 46 - .../test/gtest_list_tests_unittest.py | 207 - .../test/gtest_list_tests_unittest_.cc | 157 - .../googletest/test/gtest_main_unittest.cc | 45 - .../googletest/test/gtest_no_test_unittest.cc | 56 - .../googletest/test/gtest_output_test.py | 340 - .../googletest/test/gtest_output_test_.cc | 1062 --- .../test/gtest_output_test_golden_lin.txt | 743 -- .../test/gtest_pred_impl_unittest.cc | 2427 ------ .../test/gtest_premature_exit_test.cc | 127 - .../googletest/test/gtest_prod_test.cc | 57 - .../googletest/test/gtest_repeat_test.cc | 253 - .../googletest/test/gtest_shuffle_test.py | 325 - .../googletest/test/gtest_shuffle_test_.cc | 103 - .../googletest/test/gtest_sole_header_test.cc | 57 - .../googletest/test/gtest_stress_test.cc | 256 - .../googletest/test/gtest_test_utils.py | 320 - .../test/gtest_throw_on_failure_ex_test.cc | 92 - .../test/gtest_throw_on_failure_test.py | 171 - .../test/gtest_throw_on_failure_test_.cc | 72 - .../test/gtest_uninitialized_test.py | 70 - .../test/gtest_uninitialized_test_.cc | 43 - .../googletest/test/gtest_unittest.cc | 7706 ----------------- .../test/gtest_xml_outfile1_test_.cc | 49 - .../test/gtest_xml_outfile2_test_.cc | 49 - .../test/gtest_xml_outfiles_test.py | 132 - .../test/gtest_xml_output_unittest.py | 308 - .../test/gtest_xml_output_unittest_.cc | 181 - .../googletest/test/gtest_xml_test_utils.py | 194 - .../googletest/googletest/test/production.cc | 36 - .../googletest/googletest/test/production.h | 55 - .../xcode/Config/DebugProject.xcconfig | 30 - .../xcode/Config/FrameworkTarget.xcconfig | 17 - .../googletest/xcode/Config/General.xcconfig | 41 - .../xcode/Config/ReleaseProject.xcconfig | 32 - .../xcode/Config/StaticLibraryTarget.xcconfig | 18 - .../xcode/Config/TestTarget.xcconfig | 8 - .../googletest/xcode/Resources/Info.plist | 30 - .../xcode/Samples/FrameworkSample/Info.plist | 28 - .../WidgetFramework.xcodeproj/project.pbxproj | 457 - .../xcode/Samples/FrameworkSample/runtests.sh | 62 - .../xcode/Samples/FrameworkSample/widget.cc | 63 - .../xcode/Samples/FrameworkSample/widget.h | 59 - .../Samples/FrameworkSample/widget_test.cc | 68 - .../googletest/xcode/Scripts/runtests.sh | 65 - .../xcode/Scripts/versiongenerate.py | 100 - .../xcode/gtest.xcodeproj/project.pbxproj | 1135 --- vendor/googletest/travis.sh | 15 - 386 files changed, 1376 insertions(+), 154219 deletions(-) delete mode 100644 .gitmodules delete mode 100644 .travis.yml delete mode 100644 .vscode/.cmaketools.json delete mode 100644 .vscode/c_cpp_properties.json delete mode 100644 .vscode/settings.json delete mode 100644 .ycm_extra_conf.py rename .gitignore => Week 3/Accelerated_C++_3_5/.gitignore (100%) rename CMakeLists.txt => Week 3/Accelerated_C++_3_5/CMakeLists.txt (89%) create mode 100644 Week 3/Accelerated_C++_3_5/UML_diagram/AcceleratedC++_3_5.pdf create mode 100644 Week 3/Accelerated_C++_3_5/app/Accelerated_C++_3_5.cpp create mode 100644 Week 3/Accelerated_C++_3_5/app/CMakeLists.txt rename {cmake => Week 3/Accelerated_C++_3_5/cmake}/CodeCoverage.cmake (100%) create mode 100644 Week 3/Accelerated_C++_3_5/readme.md rename {test => Week 3/Accelerated_C++_3_5/test}/CMakeLists.txt (100%) rename {test => Week 3/Accelerated_C++_3_5/test}/main.cpp (100%) rename {test => Week 3/Accelerated_C++_3_5/test}/test.cpp (100%) create mode 100644 Week 3/Accelerated_C++_4_5/.gitignore create mode 100644 Week 3/Accelerated_C++_4_5/CMakeLists.txt create mode 100644 Week 3/Accelerated_C++_4_5/UML_diagram/Accelerated_C++_4_5.pdf create mode 100644 Week 3/Accelerated_C++_4_5/app/Accelerated_C++_4_5.cpp create mode 100644 Week 3/Accelerated_C++_4_5/app/CMakeLists.txt create mode 100644 Week 3/Accelerated_C++_4_5/cmake/CodeCoverage.cmake create mode 100644 Week 3/Accelerated_C++_4_5/readme.md create mode 100644 Week 3/Accelerated_C++_4_5/test/CMakeLists.txt create mode 100644 Week 3/Accelerated_C++_4_5/test/main.cpp create mode 100644 Week 3/Accelerated_C++_4_5/test/test.cpp create mode 100644 Week 3/Accelerated_C++_4_7/.gitignore create mode 100644 Week 3/Accelerated_C++_4_7/CMakeLists.txt create mode 100644 Week 3/Accelerated_C++_4_7/UML_diagram/Accelerated_C++_4_7.pdf create mode 100644 Week 3/Accelerated_C++_4_7/app/Accelerated_C++_4_7.cpp create mode 100644 Week 3/Accelerated_C++_4_7/app/CMakeLists.txt create mode 100644 Week 3/Accelerated_C++_4_7/cmake/CodeCoverage.cmake create mode 100644 Week 3/Accelerated_C++_4_7/readme.md create mode 100644 Week 3/Accelerated_C++_4_7/test/CMakeLists.txt create mode 100644 Week 3/Accelerated_C++_4_7/test/main.cpp create mode 100644 Week 3/Accelerated_C++_4_7/test/test.cpp create mode 100644 Week 3/Accelerated_C++_6_9/.gitignore create mode 100644 Week 3/Accelerated_C++_6_9/UML_diagram/Accelerated_C++_6_9.pdf create mode 100644 Week 3/Accelerated_C++_6_9/app/Accelerated_C++_6_9.cpp create mode 100644 Week 3/Accelerated_C++_6_9/app/CMakeLists.txt create mode 100644 Week 3/Accelerated_C++_6_9/cmake/CodeCoverage.cmake create mode 100644 Week 3/Accelerated_C++_6_9/readme.md create mode 100644 Week 3/Accelerated_C++_6_9/test/CMakeLists.txt create mode 100644 Week 3/Accelerated_C++_6_9/test/main.cpp create mode 100644 Week 3/Accelerated_C++_6_9/test/test.cpp create mode 100644 Week 3/SoftwareEngineering_3_10/.gitignore create mode 100644 Week 3/SoftwareEngineering_3_10/CMakeLists.txt create mode 100644 Week 3/SoftwareEngineering_3_10/UML_diagram/SoftwareEngineering_3_10.pdf create mode 100644 Week 3/SoftwareEngineering_3_10/app/CMakeLists.txt create mode 100644 Week 3/SoftwareEngineering_3_10/app/SoftwareEngineering_3_10.cpp create mode 100644 Week 3/SoftwareEngineering_3_10/cmake/CodeCoverage.cmake create mode 100644 Week 3/SoftwareEngineering_3_10/include/SoftwareEngineering_3_10.h create mode 100644 Week 3/SoftwareEngineering_3_10/readme.md create mode 100644 Week 3/SoftwareEngineering_3_10/test/CMakeLists.txt create mode 100644 Week 3/SoftwareEngineering_3_10/test/main.cpp create mode 100644 Week 3/SoftwareEngineering_3_10/test/test.cpp create mode 100644 Week 3/readme.md create mode 100644 Week 3/week_3.pdf delete mode 100644 app/CMakeLists.txt delete mode 100644 app/main.cpp delete mode 100644 include/lib.hpp delete mode 100644 readme.md delete mode 100644 vendor/googletest/.gitignore delete mode 100644 vendor/googletest/.travis.yml delete mode 100644 vendor/googletest/CMakeLists.txt delete mode 100644 vendor/googletest/README.md delete mode 100644 vendor/googletest/appveyor.yml delete mode 100644 vendor/googletest/googlemock/CHANGES delete mode 100644 vendor/googletest/googlemock/CMakeLists.txt delete mode 100644 vendor/googletest/googlemock/CONTRIBUTORS delete mode 100644 vendor/googletest/googlemock/LICENSE delete mode 100644 vendor/googletest/googlemock/Makefile.am delete mode 100644 vendor/googletest/googlemock/README.md delete mode 100644 vendor/googletest/googlemock/build-aux/.keep delete mode 100644 vendor/googletest/googlemock/configure.ac delete mode 100644 vendor/googletest/googlemock/docs/CheatSheet.md delete mode 100644 vendor/googletest/googlemock/docs/CookBook.md delete mode 100644 vendor/googletest/googlemock/docs/DesignDoc.md delete mode 100644 vendor/googletest/googlemock/docs/DevGuide.md delete mode 100644 vendor/googletest/googlemock/docs/Documentation.md delete mode 100644 vendor/googletest/googlemock/docs/ForDummies.md delete mode 100644 vendor/googletest/googlemock/docs/FrequentlyAskedQuestions.md delete mode 100644 vendor/googletest/googlemock/docs/KnownIssues.md delete mode 100644 vendor/googletest/googlemock/docs/v1_5/CheatSheet.md delete mode 100644 vendor/googletest/googlemock/docs/v1_5/CookBook.md delete mode 100644 vendor/googletest/googlemock/docs/v1_5/Documentation.md delete mode 100644 vendor/googletest/googlemock/docs/v1_5/ForDummies.md delete mode 100644 vendor/googletest/googlemock/docs/v1_5/FrequentlyAskedQuestions.md delete mode 100644 vendor/googletest/googlemock/docs/v1_6/CheatSheet.md delete mode 100644 vendor/googletest/googlemock/docs/v1_6/CookBook.md delete mode 100644 vendor/googletest/googlemock/docs/v1_6/Documentation.md delete mode 100644 vendor/googletest/googlemock/docs/v1_6/ForDummies.md delete mode 100644 vendor/googletest/googlemock/docs/v1_6/FrequentlyAskedQuestions.md delete mode 100644 vendor/googletest/googlemock/docs/v1_7/CheatSheet.md delete mode 100644 vendor/googletest/googlemock/docs/v1_7/CookBook.md delete mode 100644 vendor/googletest/googlemock/docs/v1_7/Documentation.md delete mode 100644 vendor/googletest/googlemock/docs/v1_7/ForDummies.md delete mode 100644 vendor/googletest/googlemock/docs/v1_7/FrequentlyAskedQuestions.md delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-actions.h delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-cardinalities.h delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-generated-actions.h delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-generated-actions.h.pump delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h.pump delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-generated-matchers.h delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-generated-matchers.h.pump delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-generated-nice-strict.h delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-generated-nice-strict.h.pump delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-matchers.h delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-more-actions.h delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-more-matchers.h delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock-spec-builders.h delete mode 100644 vendor/googletest/googlemock/include/gmock/gmock.h delete mode 100644 vendor/googletest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h delete mode 100644 vendor/googletest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h.pump delete mode 100644 vendor/googletest/googlemock/include/gmock/internal/custom/gmock-matchers.h delete mode 100644 vendor/googletest/googlemock/include/gmock/internal/custom/gmock-port.h delete mode 100644 vendor/googletest/googlemock/include/gmock/internal/gmock-generated-internal-utils.h delete mode 100644 vendor/googletest/googlemock/include/gmock/internal/gmock-generated-internal-utils.h.pump delete mode 100644 vendor/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h delete mode 100644 vendor/googletest/googlemock/include/gmock/internal/gmock-port.h delete mode 100644 vendor/googletest/googlemock/make/Makefile delete mode 100644 vendor/googletest/googlemock/msvc/2005/gmock.sln delete mode 100644 vendor/googletest/googlemock/msvc/2005/gmock.vcproj delete mode 100644 vendor/googletest/googlemock/msvc/2005/gmock_config.vsprops delete mode 100644 vendor/googletest/googlemock/msvc/2005/gmock_main.vcproj delete mode 100644 vendor/googletest/googlemock/msvc/2005/gmock_test.vcproj delete mode 100644 vendor/googletest/googlemock/msvc/2010/gmock.sln delete mode 100644 vendor/googletest/googlemock/msvc/2010/gmock.vcxproj delete mode 100644 vendor/googletest/googlemock/msvc/2010/gmock_config.props delete mode 100644 vendor/googletest/googlemock/msvc/2010/gmock_main.vcxproj delete mode 100644 vendor/googletest/googlemock/msvc/2010/gmock_test.vcxproj delete mode 100644 vendor/googletest/googlemock/msvc/2015/gmock.sln delete mode 100644 vendor/googletest/googlemock/msvc/2015/gmock.vcxproj delete mode 100644 vendor/googletest/googlemock/msvc/2015/gmock_config.props delete mode 100644 vendor/googletest/googlemock/msvc/2015/gmock_main.vcxproj delete mode 100644 vendor/googletest/googlemock/msvc/2015/gmock_test.vcxproj delete mode 100755 vendor/googletest/googlemock/scripts/fuse_gmock_files.py delete mode 100644 vendor/googletest/googlemock/scripts/generator/LICENSE delete mode 100644 vendor/googletest/googlemock/scripts/generator/README delete mode 100644 vendor/googletest/googlemock/scripts/generator/README.cppclean delete mode 100755 vendor/googletest/googlemock/scripts/generator/cpp/__init__.py delete mode 100755 vendor/googletest/googlemock/scripts/generator/cpp/ast.py delete mode 100755 vendor/googletest/googlemock/scripts/generator/cpp/gmock_class.py delete mode 100755 vendor/googletest/googlemock/scripts/generator/cpp/gmock_class_test.py delete mode 100755 vendor/googletest/googlemock/scripts/generator/cpp/keywords.py delete mode 100755 vendor/googletest/googlemock/scripts/generator/cpp/tokenize.py delete mode 100755 vendor/googletest/googlemock/scripts/generator/cpp/utils.py delete mode 100755 vendor/googletest/googlemock/scripts/generator/gmock_gen.py delete mode 100755 vendor/googletest/googlemock/scripts/gmock-config.in delete mode 100755 vendor/googletest/googlemock/scripts/gmock_doctor.py delete mode 100755 vendor/googletest/googlemock/scripts/upload.py delete mode 100755 vendor/googletest/googlemock/scripts/upload_gmock.py delete mode 100644 vendor/googletest/googlemock/src/gmock-all.cc delete mode 100644 vendor/googletest/googlemock/src/gmock-cardinalities.cc delete mode 100644 vendor/googletest/googlemock/src/gmock-internal-utils.cc delete mode 100644 vendor/googletest/googlemock/src/gmock-matchers.cc delete mode 100644 vendor/googletest/googlemock/src/gmock-spec-builders.cc delete mode 100644 vendor/googletest/googlemock/src/gmock.cc delete mode 100644 vendor/googletest/googlemock/src/gmock_main.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-actions_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-cardinalities_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-generated-actions_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-generated-function-mockers_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-generated-internal-utils_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-generated-matchers_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-internal-utils_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-matchers_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-more-actions_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-nice-strict_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-port_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock-spec-builders_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock_all_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock_ex_test.cc delete mode 100755 vendor/googletest/googlemock/test/gmock_leak_test.py delete mode 100644 vendor/googletest/googlemock/test/gmock_leak_test_.cc delete mode 100644 vendor/googletest/googlemock/test/gmock_link2_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock_link_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock_link_test.h delete mode 100755 vendor/googletest/googlemock/test/gmock_output_test.py delete mode 100644 vendor/googletest/googlemock/test/gmock_output_test_.cc delete mode 100644 vendor/googletest/googlemock/test/gmock_output_test_golden.txt delete mode 100644 vendor/googletest/googlemock/test/gmock_stress_test.cc delete mode 100644 vendor/googletest/googlemock/test/gmock_test.cc delete mode 100755 vendor/googletest/googlemock/test/gmock_test_utils.py delete mode 100644 vendor/googletest/googletest/.gitignore delete mode 100644 vendor/googletest/googletest/CHANGES delete mode 100644 vendor/googletest/googletest/CMakeLists.txt delete mode 100644 vendor/googletest/googletest/CONTRIBUTORS delete mode 100644 vendor/googletest/googletest/LICENSE delete mode 100644 vendor/googletest/googletest/Makefile.am delete mode 100644 vendor/googletest/googletest/README.md delete mode 100644 vendor/googletest/googletest/build-aux/.keep delete mode 100644 vendor/googletest/googletest/cmake/internal_utils.cmake delete mode 100644 vendor/googletest/googletest/codegear/gtest.cbproj delete mode 100644 vendor/googletest/googletest/codegear/gtest.groupproj delete mode 100644 vendor/googletest/googletest/codegear/gtest_all.cc delete mode 100644 vendor/googletest/googletest/codegear/gtest_link.cc delete mode 100644 vendor/googletest/googletest/codegear/gtest_main.cbproj delete mode 100644 vendor/googletest/googletest/codegear/gtest_unittest.cbproj delete mode 100644 vendor/googletest/googletest/configure.ac delete mode 100644 vendor/googletest/googletest/docs/AdvancedGuide.md delete mode 100644 vendor/googletest/googletest/docs/DevGuide.md delete mode 100644 vendor/googletest/googletest/docs/Documentation.md delete mode 100644 vendor/googletest/googletest/docs/FAQ.md delete mode 100644 vendor/googletest/googletest/docs/Primer.md delete mode 100644 vendor/googletest/googletest/docs/PumpManual.md delete mode 100644 vendor/googletest/googletest/docs/Samples.md delete mode 100644 vendor/googletest/googletest/docs/V1_5_AdvancedGuide.md delete mode 100644 vendor/googletest/googletest/docs/V1_5_Documentation.md delete mode 100644 vendor/googletest/googletest/docs/V1_5_FAQ.md delete mode 100644 vendor/googletest/googletest/docs/V1_5_Primer.md delete mode 100644 vendor/googletest/googletest/docs/V1_5_PumpManual.md delete mode 100644 vendor/googletest/googletest/docs/V1_5_XcodeGuide.md delete mode 100644 vendor/googletest/googletest/docs/V1_6_AdvancedGuide.md delete mode 100644 vendor/googletest/googletest/docs/V1_6_Documentation.md delete mode 100644 vendor/googletest/googletest/docs/V1_6_FAQ.md delete mode 100644 vendor/googletest/googletest/docs/V1_6_Primer.md delete mode 100644 vendor/googletest/googletest/docs/V1_6_PumpManual.md delete mode 100644 vendor/googletest/googletest/docs/V1_6_Samples.md delete mode 100644 vendor/googletest/googletest/docs/V1_6_XcodeGuide.md delete mode 100644 vendor/googletest/googletest/docs/V1_7_AdvancedGuide.md delete mode 100644 vendor/googletest/googletest/docs/V1_7_Documentation.md delete mode 100644 vendor/googletest/googletest/docs/V1_7_FAQ.md delete mode 100644 vendor/googletest/googletest/docs/V1_7_Primer.md delete mode 100644 vendor/googletest/googletest/docs/V1_7_PumpManual.md delete mode 100644 vendor/googletest/googletest/docs/V1_7_Samples.md delete mode 100644 vendor/googletest/googletest/docs/V1_7_XcodeGuide.md delete mode 100644 vendor/googletest/googletest/docs/XcodeGuide.md delete mode 100644 vendor/googletest/googletest/include/gtest/gtest-death-test.h delete mode 100644 vendor/googletest/googletest/include/gtest/gtest-message.h delete mode 100644 vendor/googletest/googletest/include/gtest/gtest-param-test.h delete mode 100644 vendor/googletest/googletest/include/gtest/gtest-param-test.h.pump delete mode 100644 vendor/googletest/googletest/include/gtest/gtest-printers.h delete mode 100644 vendor/googletest/googletest/include/gtest/gtest-spi.h delete mode 100644 vendor/googletest/googletest/include/gtest/gtest-test-part.h delete mode 100644 vendor/googletest/googletest/include/gtest/gtest-typed-test.h delete mode 100644 vendor/googletest/googletest/include/gtest/gtest.h delete mode 100644 vendor/googletest/googletest/include/gtest/gtest_pred_impl.h delete mode 100644 vendor/googletest/googletest/include/gtest/gtest_prod.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/custom/gtest-port.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/custom/gtest-printers.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/custom/gtest.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-filepath.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-internal.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-linked_ptr.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-param-util-generated.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-param-util-generated.h.pump delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-param-util.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-port-arch.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-port.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-string.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-tuple.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-tuple.h.pump delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-type-util.h delete mode 100644 vendor/googletest/googletest/include/gtest/internal/gtest-type-util.h.pump delete mode 100644 vendor/googletest/googletest/m4/acx_pthread.m4 delete mode 100644 vendor/googletest/googletest/m4/gtest.m4 delete mode 100644 vendor/googletest/googletest/make/Makefile delete mode 100644 vendor/googletest/googletest/msvc/gtest-md.sln delete mode 100644 vendor/googletest/googletest/msvc/gtest-md.vcproj delete mode 100644 vendor/googletest/googletest/msvc/gtest.sln delete mode 100644 vendor/googletest/googletest/msvc/gtest.vcproj delete mode 100644 vendor/googletest/googletest/msvc/gtest_main-md.vcproj delete mode 100644 vendor/googletest/googletest/msvc/gtest_main.vcproj delete mode 100644 vendor/googletest/googletest/msvc/gtest_prod_test-md.vcproj delete mode 100644 vendor/googletest/googletest/msvc/gtest_prod_test.vcproj delete mode 100644 vendor/googletest/googletest/msvc/gtest_unittest-md.vcproj delete mode 100644 vendor/googletest/googletest/msvc/gtest_unittest.vcproj delete mode 100644 vendor/googletest/googletest/samples/prime_tables.h delete mode 100644 vendor/googletest/googletest/samples/sample1.cc delete mode 100644 vendor/googletest/googletest/samples/sample1.h delete mode 100644 vendor/googletest/googletest/samples/sample10_unittest.cc delete mode 100644 vendor/googletest/googletest/samples/sample1_unittest.cc delete mode 100644 vendor/googletest/googletest/samples/sample2.cc delete mode 100644 vendor/googletest/googletest/samples/sample2.h delete mode 100644 vendor/googletest/googletest/samples/sample2_unittest.cc delete mode 100644 vendor/googletest/googletest/samples/sample3-inl.h delete mode 100644 vendor/googletest/googletest/samples/sample3_unittest.cc delete mode 100644 vendor/googletest/googletest/samples/sample4.cc delete mode 100644 vendor/googletest/googletest/samples/sample4.h delete mode 100644 vendor/googletest/googletest/samples/sample4_unittest.cc delete mode 100644 vendor/googletest/googletest/samples/sample5_unittest.cc delete mode 100644 vendor/googletest/googletest/samples/sample6_unittest.cc delete mode 100644 vendor/googletest/googletest/samples/sample7_unittest.cc delete mode 100644 vendor/googletest/googletest/samples/sample8_unittest.cc delete mode 100644 vendor/googletest/googletest/samples/sample9_unittest.cc delete mode 100644 vendor/googletest/googletest/scripts/common.py delete mode 100755 vendor/googletest/googletest/scripts/fuse_gtest_files.py delete mode 100755 vendor/googletest/googletest/scripts/gen_gtest_pred_impl.py delete mode 100755 vendor/googletest/googletest/scripts/gtest-config.in delete mode 100755 vendor/googletest/googletest/scripts/pump.py delete mode 100755 vendor/googletest/googletest/scripts/release_docs.py delete mode 100644 vendor/googletest/googletest/scripts/test/Makefile delete mode 100755 vendor/googletest/googletest/scripts/upload.py delete mode 100755 vendor/googletest/googletest/scripts/upload_gtest.py delete mode 100644 vendor/googletest/googletest/src/gtest-all.cc delete mode 100644 vendor/googletest/googletest/src/gtest-death-test.cc delete mode 100644 vendor/googletest/googletest/src/gtest-filepath.cc delete mode 100644 vendor/googletest/googletest/src/gtest-internal-inl.h delete mode 100644 vendor/googletest/googletest/src/gtest-port.cc delete mode 100644 vendor/googletest/googletest/src/gtest-printers.cc delete mode 100644 vendor/googletest/googletest/src/gtest-test-part.cc delete mode 100644 vendor/googletest/googletest/src/gtest-typed-test.cc delete mode 100644 vendor/googletest/googletest/src/gtest.cc delete mode 100644 vendor/googletest/googletest/src/gtest_main.cc delete mode 100644 vendor/googletest/googletest/test/gtest-death-test_ex_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-death-test_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-filepath_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-linked_ptr_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-listener_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-message_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-options_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-param-test2_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-param-test_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-param-test_test.h delete mode 100644 vendor/googletest/googletest/test/gtest-port_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-printers_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-test-part_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-tuple_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-typed-test2_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-typed-test_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest-typed-test_test.h delete mode 100644 vendor/googletest/googletest/test/gtest-unittest-api_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest_all_test.cc delete mode 100755 vendor/googletest/googletest/test/gtest_break_on_failure_unittest.py delete mode 100644 vendor/googletest/googletest/test/gtest_break_on_failure_unittest_.cc delete mode 100755 vendor/googletest/googletest/test/gtest_catch_exceptions_test.py delete mode 100644 vendor/googletest/googletest/test/gtest_catch_exceptions_test_.cc delete mode 100755 vendor/googletest/googletest/test/gtest_color_test.py delete mode 100644 vendor/googletest/googletest/test/gtest_color_test_.cc delete mode 100755 vendor/googletest/googletest/test/gtest_env_var_test.py delete mode 100644 vendor/googletest/googletest/test/gtest_env_var_test_.cc delete mode 100644 vendor/googletest/googletest/test/gtest_environment_test.cc delete mode 100755 vendor/googletest/googletest/test/gtest_filter_unittest.py delete mode 100644 vendor/googletest/googletest/test/gtest_filter_unittest_.cc delete mode 100755 vendor/googletest/googletest/test/gtest_help_test.py delete mode 100644 vendor/googletest/googletest/test/gtest_help_test_.cc delete mode 100755 vendor/googletest/googletest/test/gtest_list_tests_unittest.py delete mode 100644 vendor/googletest/googletest/test/gtest_list_tests_unittest_.cc delete mode 100644 vendor/googletest/googletest/test/gtest_main_unittest.cc delete mode 100644 vendor/googletest/googletest/test/gtest_no_test_unittest.cc delete mode 100755 vendor/googletest/googletest/test/gtest_output_test.py delete mode 100644 vendor/googletest/googletest/test/gtest_output_test_.cc delete mode 100644 vendor/googletest/googletest/test/gtest_output_test_golden_lin.txt delete mode 100644 vendor/googletest/googletest/test/gtest_pred_impl_unittest.cc delete mode 100644 vendor/googletest/googletest/test/gtest_premature_exit_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest_prod_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest_repeat_test.cc delete mode 100755 vendor/googletest/googletest/test/gtest_shuffle_test.py delete mode 100644 vendor/googletest/googletest/test/gtest_shuffle_test_.cc delete mode 100644 vendor/googletest/googletest/test/gtest_sole_header_test.cc delete mode 100644 vendor/googletest/googletest/test/gtest_stress_test.cc delete mode 100755 vendor/googletest/googletest/test/gtest_test_utils.py delete mode 100644 vendor/googletest/googletest/test/gtest_throw_on_failure_ex_test.cc delete mode 100755 vendor/googletest/googletest/test/gtest_throw_on_failure_test.py delete mode 100644 vendor/googletest/googletest/test/gtest_throw_on_failure_test_.cc delete mode 100755 vendor/googletest/googletest/test/gtest_uninitialized_test.py delete mode 100644 vendor/googletest/googletest/test/gtest_uninitialized_test_.cc delete mode 100644 vendor/googletest/googletest/test/gtest_unittest.cc delete mode 100644 vendor/googletest/googletest/test/gtest_xml_outfile1_test_.cc delete mode 100644 vendor/googletest/googletest/test/gtest_xml_outfile2_test_.cc delete mode 100755 vendor/googletest/googletest/test/gtest_xml_outfiles_test.py delete mode 100755 vendor/googletest/googletest/test/gtest_xml_output_unittest.py delete mode 100644 vendor/googletest/googletest/test/gtest_xml_output_unittest_.cc delete mode 100755 vendor/googletest/googletest/test/gtest_xml_test_utils.py delete mode 100644 vendor/googletest/googletest/test/production.cc delete mode 100644 vendor/googletest/googletest/test/production.h delete mode 100644 vendor/googletest/googletest/xcode/Config/DebugProject.xcconfig delete mode 100644 vendor/googletest/googletest/xcode/Config/FrameworkTarget.xcconfig delete mode 100644 vendor/googletest/googletest/xcode/Config/General.xcconfig delete mode 100644 vendor/googletest/googletest/xcode/Config/ReleaseProject.xcconfig delete mode 100644 vendor/googletest/googletest/xcode/Config/StaticLibraryTarget.xcconfig delete mode 100644 vendor/googletest/googletest/xcode/Config/TestTarget.xcconfig delete mode 100644 vendor/googletest/googletest/xcode/Resources/Info.plist delete mode 100644 vendor/googletest/googletest/xcode/Samples/FrameworkSample/Info.plist delete mode 100644 vendor/googletest/googletest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj delete mode 100644 vendor/googletest/googletest/xcode/Samples/FrameworkSample/runtests.sh delete mode 100644 vendor/googletest/googletest/xcode/Samples/FrameworkSample/widget.cc delete mode 100644 vendor/googletest/googletest/xcode/Samples/FrameworkSample/widget.h delete mode 100644 vendor/googletest/googletest/xcode/Samples/FrameworkSample/widget_test.cc delete mode 100644 vendor/googletest/googletest/xcode/Scripts/runtests.sh delete mode 100755 vendor/googletest/googletest/xcode/Scripts/versiongenerate.py delete mode 100644 vendor/googletest/googletest/xcode/gtest.xcodeproj/project.pbxproj delete mode 100755 vendor/googletest/travis.sh diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 88389197..00000000 --- a/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "vendor/googletest"] - path = vendor/googletest - url = https://github.com/google/googletest -[submodule "vendor/boost"] - path = vendor/boost - url = git@github.com:boostorg/boost.git diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 56dece5b..00000000 --- a/.travis.yml +++ /dev/null @@ -1,40 +0,0 @@ -# We need a decent ubuntu dist -sudo: required -dist: trusty - -# Modern cpp settings from -# http://genbattle.bitbucket.org/blog/2016/01/17/c++-travis-ci/ -language: cpp -matrix: - include: - - os: linux - compiler: gcc - addons: - apt: - sources: - - ubuntu-toolchain-r-test - - george-edison55-precise-backports - packages: - - g++-5 - - cmake - - cmake-data - env: COMPILER=g++-5 - -before_install: - - pip install --user cpp-coveralls -install: - - sudo apt-get install -y -qq lcov -script: - - export CXX=$COMPILER; - - mkdir build - - cd build - - cmake -DCOVERAGE=ON -DCMAKE_BUILD_TYPE=Debug ../ - - make - - make code_coverage - - test/cpp-test - -after_success: - - coveralls --root .. -E ".*external.*" -E ".*CMakeFiles.*" -E ".*test/.*.cpp.*" - -notifications: - email: false diff --git a/.vscode/.cmaketools.json b/.vscode/.cmaketools.json deleted file mode 100644 index 6dec4385..00000000 --- a/.vscode/.cmaketools.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "selectedBuildType": "Debug", - "variant": { - "label": "Release", - "keywordSettings": { - "buildType": "release" - }, - "description": "Enable optimizations, omit debug info" - } -} \ No newline at end of file diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index 7f19e678..00000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "configurations": [ - { - "name": "Mac", - "includePath": [ - "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1", - "${workspaceRoot}/vendor/gtest/include", - "${workspaceRoot}/vendor/boost", - "/usr/include" - ], - "browse" : { - "limitSymbolsToIncludedHeaders" : true, - "databaseFilename" : "" - } - }, - { - "name": "Linux", - "includePath": ["/usr/include"], - "browse" : { - "limitSymbolsToIncludedHeaders" : true, - "databaseFilename" : "" - } - }, - { - "name": "Win32", - "includePath": ["c:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include"], - "browse" : { - "limitSymbolsToIncludedHeaders" : true, - "databaseFilename" : "" - } - } - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 95395d85..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - // cpp general - "C_Cpp.clang_format_style": "visual studio", - - // cmake - "cmake.generator.all": "ninja", - "cmake.experimental.enableTargetDebugging": true, - - // ycmd - "ycmd.path": "../../3rdParty/ycmd", - "ycmd.debug": true, - "ycmd.confirm_extra_conf": false, - - // general - "files.exclude": { - "**/.git": true, - "**/.DS_Store": true, - "build/": true - }, - "recommendations": [ - "twxs.cmake", - "ms-vscode.cpptools", - "RichardHe.you-complete-me", - "vector-of-bool.cmake-tools" - ] -} diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py deleted file mode 100644 index a30bf784..00000000 --- a/.ycm_extra_conf.py +++ /dev/null @@ -1,147 +0,0 @@ -# Generated by YCM Generator at 2016-10-18 10:13:21.653665 - -# This file is NOT licensed under the GPLv3, which is the license for the rest -# of YouCompleteMe. -# -# Here's the license text for this file: -# -# This is free and unencumbered software released into the public domain. -# -# Anyone is free to copy, modify, publish, use, compile, sell, or -# distribute this software, either in source code form or as a compiled -# binary, for any purpose, commercial or non-commercial, and by any -# means. -# -# In jurisdictions that recognize copyright laws, the author or authors -# of this software dedicate any and all copyright interest in the -# software to the public domain. We make this dedication for the benefit -# of the public at large and to the detriment of our heirs and -# successors. We intend this dedication to be an overt act of -# relinquishment in perpetuity of all present and future rights to this -# software under copyright law. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. -# -# For more information, please refer to - -import os -import ycm_core - -flags = [ - '-x', - 'c++', - '-DGTEST_HAS_PTHREAD=1', - '-I/Users/david/code/scratch/cpp/include', - '-I/Users/david/code/scratch/cpp/test/../vendor/googletest/googletest/include', - '-I/Users/david/code/scratch/cpp/vendor/boost', - '-I/Users/david/code/scratch/cpp/vendor/googletest/googletest', - '-I/Users/david/code/scratch/cpp/vendor/googletest/googletest/include', - '-Wall', - '-Wextra', - '-Wpedantic', - '-std=c++14', -] - - -# Set this to the absolute path to the folder (NOT the file!) containing the -# compile_commands.json file to use that instead of 'flags'. See here for -# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html -# -# You can get CMake to generate this file for you by adding: -# set( CMAKE_EXPORT_COMPILE_COMMANDS 1 ) -# to your CMakeLists.txt file. -# -# Most projects will NOT need to set this to anything; you can just change the -# 'flags' list of compilation flags. Notice that YCM itself uses that approach. -compilation_database_folder = '' - -if os.path.exists( compilation_database_folder ): - database = ycm_core.CompilationDatabase( compilation_database_folder ) -else: - database = None - -SOURCE_EXTENSIONS = [ '.C', '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ] - -def DirectoryOfThisScript(): - return os.path.dirname( os.path.abspath( __file__ ) ) - - -def MakeRelativePathsInFlagsAbsolute( flags, working_directory ): - if not working_directory: - return list( flags ) - new_flags = [] - make_next_absolute = False - path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ] - for flag in flags: - new_flag = flag - - if make_next_absolute: - make_next_absolute = False - if not flag.startswith( '/' ): - new_flag = os.path.join( working_directory, flag ) - - for path_flag in path_flags: - if flag == path_flag: - make_next_absolute = True - break - - if flag.startswith( path_flag ): - path = flag[ len( path_flag ): ] - new_flag = path_flag + os.path.join( working_directory, path ) - break - - if new_flag: - new_flags.append( new_flag ) - return new_flags - - -def IsHeaderFile( filename ): - extension = os.path.splitext( filename )[ 1 ] - return extension in [ '.H', '.h', '.hxx', '.hpp', '.hh' ] - - -def GetCompilationInfoForFile( filename ): - # The compilation_commands.json file generated by CMake does not have entries - # for header files. So we do our best by asking the db for flags for a - # corresponding source file, if any. If one exists, the flags for that file - # should be good enough. - if IsHeaderFile( filename ): - basename = os.path.splitext( filename )[ 0 ] - for extension in SOURCE_EXTENSIONS: - replacement_file = basename + extension - if os.path.exists( replacement_file ): - compilation_info = database.GetCompilationInfoForFile( - replacement_file ) - if compilation_info.compiler_flags_: - return compilation_info - return None - return database.GetCompilationInfoForFile( filename ) - - -def FlagsForFile( filename, **kwargs ): - if database: - # Bear in mind that compilation_info.compiler_flags_ does NOT return a - # python list, but a "list-like" StringVec object - compilation_info = GetCompilationInfoForFile( filename ) - if not compilation_info: - return None - - final_flags = MakeRelativePathsInFlagsAbsolute( - compilation_info.compiler_flags_, - compilation_info.compiler_working_dir_ ) - - else: - relative_to = DirectoryOfThisScript() - final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to ) - - return { - 'flags': final_flags, - 'do_cache': True - } - diff --git a/.gitignore b/Week 3/Accelerated_C++_3_5/.gitignore similarity index 100% rename from .gitignore rename to Week 3/Accelerated_C++_3_5/.gitignore diff --git a/CMakeLists.txt b/Week 3/Accelerated_C++_3_5/CMakeLists.txt similarity index 89% rename from CMakeLists.txt rename to Week 3/Accelerated_C++_3_5/CMakeLists.txt index ccddcaf2..591cfbe8 100644 --- a/CMakeLists.txt +++ b/Week 3/Accelerated_C++_3_5/CMakeLists.txt @@ -7,11 +7,11 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) # We probably don't want this to run on every build. option(COVERAGE "Generate Coverage Data" OFF) + if (COVERAGE) include(CodeCoverage) set(LCOV_REMOVE_EXTRA "'vendor/*'") setup_target_for_coverage(code_coverage test/cpp-test coverage) - set(COVERAGE_SRCS app/main.cpp include/lib.hpp) SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") @@ -26,4 +26,3 @@ set(CMAKE_CXX_STANDARD 14) add_subdirectory(app) add_subdirectory(test) -add_subdirectory(vendor/googletest/googletest) diff --git a/Week 3/Accelerated_C++_3_5/UML_diagram/AcceleratedC++_3_5.pdf b/Week 3/Accelerated_C++_3_5/UML_diagram/AcceleratedC++_3_5.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2aea70bdee849ae01fc58f9fec42c02cf861a339 GIT binary patch literal 12781 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%0D&!-|K*!zNYha`djX3d2KYN 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 RBZ6Qi8uRZRH*Trl{vVCKm%;!5 literal 0 HcmV?d00001 diff --git a/Week 3/Accelerated_C++_3_5/app/Accelerated_C++_3_5.cpp b/Week 3/Accelerated_C++_3_5/app/Accelerated_C++_3_5.cpp new file mode 100644 index 00000000..e5ac423e --- /dev/null +++ b/Week 3/Accelerated_C++_3_5/app/Accelerated_C++_3_5.cpp @@ -0,0 +1,59 @@ +//! "Copyright [2021] None" +/** + * @file AcceleratedC++_3_5.cpp + * @author PratikBhujbal + * @date 16 September 2021 + * @brief Week3 assingment problem 3.5 from Accelerated C++ book + * @section DESCRIPTION + * + * This is a program that reads from a standard input stream + * for a list of students, homework grade and prints out the students' name and + * their corresponding final grade. + */ + +#include +#include +#include + +int main() { + std::vector studentNames; ///< Vector of student names + std::vector studentGrades; ///< Vector of student final grades + + bool pushList = true; + while ((pushList)) { + std::cout << "Enter Student name: " << std::endl; + std::string studentName; + std::cin >> studentName; + // Prompt user input for each student's name and grades + studentNames.push_back(studentName); + std::cout << "Enter your final exam grade (from 0-10):"; + int finalGrade; + std::cin >> finalGrade; + + std::cout << "Enter your Homework grade (from 0-10):"; + int homeworkGrade; ///< local int variables to hold homework grade + std::cin >> homeworkGrade; + double studentFinalGrade = 0.3 * homeworkGrade + 0.7 * finalGrade; + studentGrades.push_back(studentFinalGrade); + + // Ask user if needs to add more + std::cout << "Need to add more? (y/n)" << std::endl; + char answer; + std::cin >> answer; + if (answer == 'n' || answer == 'N') { + pushList = false; + std::cout << "Final Result:" << std::endl; + for (unsigned int i = 0; i < studentNames.size(); i++) { + std::cout << " " << std::endl; + std::cout << "Student Name: " << studentNames.at(i) << " " << "Grade: " + << studentGrades.at(i) << std::endl; + } + } else if (answer == 'y' || answer == 'Y') { + } else { + std::cout << "Please enter valid Input! " << std::endl; + pushList = false; + } + + return 0; + } +} diff --git a/Week 3/Accelerated_C++_3_5/app/CMakeLists.txt b/Week 3/Accelerated_C++_3_5/app/CMakeLists.txt new file mode 100644 index 00000000..2683ca84 --- /dev/null +++ b/Week 3/Accelerated_C++_3_5/app/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable(Accelerated_C++_3_5 Accelerated_C++_3_5.cpp) +include_directories( + ${CMAKE_SOURCE_DIR}/include +) diff --git a/cmake/CodeCoverage.cmake b/Week 3/Accelerated_C++_3_5/cmake/CodeCoverage.cmake similarity index 100% rename from cmake/CodeCoverage.cmake rename to Week 3/Accelerated_C++_3_5/cmake/CodeCoverage.cmake diff --git a/Week 3/Accelerated_C++_3_5/readme.md b/Week 3/Accelerated_C++_3_5/readme.md new file mode 100644 index 00000000..6ab4150e --- /dev/null +++ b/Week 3/Accelerated_C++_3_5/readme.md @@ -0,0 +1 @@ +## readme \ No newline at end of file diff --git a/test/CMakeLists.txt b/Week 3/Accelerated_C++_3_5/test/CMakeLists.txt similarity index 100% rename from test/CMakeLists.txt rename to Week 3/Accelerated_C++_3_5/test/CMakeLists.txt diff --git a/test/main.cpp b/Week 3/Accelerated_C++_3_5/test/main.cpp similarity index 100% rename from test/main.cpp rename to Week 3/Accelerated_C++_3_5/test/main.cpp diff --git a/test/test.cpp b/Week 3/Accelerated_C++_3_5/test/test.cpp similarity index 100% rename from test/test.cpp rename to Week 3/Accelerated_C++_3_5/test/test.cpp diff --git a/Week 3/Accelerated_C++_4_5/.gitignore b/Week 3/Accelerated_C++_4_5/.gitignore new file mode 100644 index 00000000..b2566ac7 --- /dev/null +++ b/Week 3/Accelerated_C++_4_5/.gitignore @@ -0,0 +1,11 @@ +# VS Code files +*.VC.db* + +# OS X files +.DS_Store + +# Build artifacts +build/ + +# Python +*.pyc diff --git a/Week 3/Accelerated_C++_4_5/CMakeLists.txt b/Week 3/Accelerated_C++_4_5/CMakeLists.txt new file mode 100644 index 00000000..6f640341 --- /dev/null +++ b/Week 3/Accelerated_C++_4_5/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 3.2.1) +project (scratch) + +# Add project cmake modules to path. +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) + +# We probably don't want this to run on every build. +option(COVERAGE "Generate Coverage Data" OFF) + +if (COVERAGE) + include(CodeCoverage) + set(LCOV_REMOVE_EXTRA "'vendor/*'") + setup_target_for_coverage(code_coverage test/cpp-test coverage) + + SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") + SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") + SET(CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage") +else() + set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -g") +endif() + +include(CMakeToolsHelpers OPTIONAL) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(CMAKE_CXX_STANDARD 14) + +add_subdirectory(app) +add_subdirectory(test) diff --git a/Week 3/Accelerated_C++_4_5/UML_diagram/Accelerated_C++_4_5.pdf b/Week 3/Accelerated_C++_4_5/UML_diagram/Accelerated_C++_4_5.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3b60518c318d48a671147b251fa76ffc1c43e995 GIT binary patch literal 10955 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 +#include +#include +#include +#include + +/** + * @brief Reads from input stream and stores the strings into a vector + * Also prints the total number of words entered and the frequency + * of each word. + * + * @param inputStream is the vector that will contain input stream + * @return void + */ +void inputWords() { + std::vector inputStream; ///< vector to store input stream + std::cout << "Enter the words- " << std::endl; + std::string word; + // getline function to read entire line stream from user input + getline(std::cin, word); + std::istringstream wordStream(word); + std::string words; + // Append the inputStream vector with the entered words + while (wordStream >> words) { + inputStream.push_back(words); + } + // Outputs total no. of words + std::cout << "Total number of words= " << inputStream.size() << std::endl; + // Calculate frequency by iterating over the vector + std::vector iter = inputStream; + do { + std::string val = iter[0]; + int freq = count(iter.begin(), iter.end(), val); + std::cout << val << " occurred " << freq << " time(s)" << std::endl; + iter.erase(std::remove(iter.begin(), iter.end(), val), iter.end()); + } while (iter.size() != 0); +} +int main() { + inputWords(); + return 0; +} diff --git a/Week 3/Accelerated_C++_4_5/app/CMakeLists.txt b/Week 3/Accelerated_C++_4_5/app/CMakeLists.txt new file mode 100644 index 00000000..6afd5d71 --- /dev/null +++ b/Week 3/Accelerated_C++_4_5/app/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable(Accelerated_C++_4_5 Accelerated_C++_4_5.cpp) +include_directories( + ${CMAKE_SOURCE_DIR}/include +) diff --git a/Week 3/Accelerated_C++_4_5/cmake/CodeCoverage.cmake b/Week 3/Accelerated_C++_4_5/cmake/CodeCoverage.cmake new file mode 100644 index 00000000..50dffc7d --- /dev/null +++ b/Week 3/Accelerated_C++_4_5/cmake/CodeCoverage.cmake @@ -0,0 +1,203 @@ +# Copyright (c) 2012 - 2015, Lars Bilke +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# +# +# 2012-01-31, Lars Bilke +# - Enable Code Coverage +# +# 2013-09-17, Joakim Söderberg +# - Added support for Clang. +# - Some additional usage instructions. +# +# USAGE: + +# 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here: +# http://stackoverflow.com/a/22404544/80480 +# +# 1. Copy this file into your cmake modules path. +# +# 2. Add the following line to your CMakeLists.txt: +# INCLUDE(CodeCoverage) +# +# 3. Set compiler flags to turn off optimization and enable coverage: +# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") +# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") +# +# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target +# which runs your test executable and produces a lcov code coverage report: +# Example: +# SETUP_TARGET_FOR_COVERAGE( +# my_coverage_target # Name for custom target. +# test_driver # Name of the test driver executable that runs the tests. +# # NOTE! This should always have a ZERO as exit code +# # otherwise the coverage generation will not complete. +# coverage # Name of output directory. +# ) +# +# If you need to exclude additional directories from the report, specify them +# using the LCOV_REMOVE_EXTRA variable before calling SETUP_TARGET_FOR_COVERAGE. +# For example: +# +# set(LCOV_REMOVE_EXTRA "'thirdparty/*'") +# +# 4. Build a Debug build: +# cmake -DCMAKE_BUILD_TYPE=Debug .. +# make +# make my_coverage_target +# +# + +# Check prereqs +FIND_PROGRAM( GCOV_PATH gcov ) +FIND_PROGRAM( LCOV_PATH lcov ) +FIND_PROGRAM( GENHTML_PATH genhtml ) +FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests) + +IF(NOT GCOV_PATH) + MESSAGE(FATAL_ERROR "gcov not found! Aborting...") +ENDIF() # NOT GCOV_PATH + +IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") + IF("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) + MESSAGE(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") + ENDIF() +ELSEIF(NOT CMAKE_COMPILER_IS_GNUCXX) + MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") +ENDIF() # CHECK VALID COMPILER + +SET(CMAKE_CXX_FLAGS_COVERAGE + "-g -O0 --coverage -fprofile-arcs -ftest-coverage" + CACHE STRING "Flags used by the C++ compiler during coverage builds." + FORCE ) +SET(CMAKE_C_FLAGS_COVERAGE + "-g -O0 --coverage -fprofile-arcs -ftest-coverage" + CACHE STRING "Flags used by the C compiler during coverage builds." + FORCE ) +SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE + "" + CACHE STRING "Flags used for linking binaries during coverage builds." + FORCE ) +SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE + "" + CACHE STRING "Flags used by the shared libraries linker during coverage builds." + FORCE ) +MARK_AS_ADVANCED( + CMAKE_CXX_FLAGS_COVERAGE + CMAKE_C_FLAGS_COVERAGE + CMAKE_EXE_LINKER_FLAGS_COVERAGE + CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) + +IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage")) + MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) +ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" + + +# Param _targetname The name of new the custom make target +# Param _testrunner The name of the target which runs the tests. +# MUST return ZERO always, even on errors. +# If not, no coverage report will be created! +# Param _outputname lcov output is generated as _outputname.info +# HTML report is generated in _outputname/index.html +# Optional fourth parameter is passed as arguments to _testrunner +# Pass them in list form, e.g.: "-j;2" for -j 2 +FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname) + + IF(NOT LCOV_PATH) + MESSAGE(FATAL_ERROR "lcov not found! Aborting...") + ENDIF() # NOT LCOV_PATH + + IF(NOT GENHTML_PATH) + MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") + ENDIF() # NOT GENHTML_PATH + + SET(coverage_info "${CMAKE_BINARY_DIR}/${_outputname}.info") + SET(coverage_cleaned "${coverage_info}.cleaned") + + SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}") + + # Setup target + ADD_CUSTOM_TARGET(${_targetname} + + # Cleanup lcov + ${LCOV_PATH} --directory . --zerocounters + + # Run tests + COMMAND ${test_command} ${ARGV3} + + # Capturing lcov counters and generating report + COMMAND ${LCOV_PATH} --directory . --capture --output-file ${coverage_info} + COMMAND ${LCOV_PATH} --remove ${coverage_info} 'tests/*' '/usr/*' ${LCOV_REMOVE_EXTRA} --output-file ${coverage_cleaned} + COMMAND ${GENHTML_PATH} -o ${_outputname} ${coverage_cleaned} + COMMAND ${CMAKE_COMMAND} -E remove ${coverage_info} ${coverage_cleaned} + + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." + ) + + # Show info where to find the report + ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD + COMMAND ; + COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report." + ) + +ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE + +# Param _targetname The name of new the custom make target +# Param _testrunner The name of the target which runs the tests +# Param _outputname cobertura output is generated as _outputname.xml +# Optional fourth parameter is passed as arguments to _testrunner +# Pass them in list form, e.g.: "-j;2" for -j 2 +FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname) + + IF(NOT PYTHON_EXECUTABLE) + MESSAGE(FATAL_ERROR "Python not found! Aborting...") + ENDIF() # NOT PYTHON_EXECUTABLE + + IF(NOT GCOVR_PATH) + MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") + ENDIF() # NOT GCOVR_PATH + + ADD_CUSTOM_TARGET(${_targetname} + + # Run tests + ${_testrunner} ${ARGV3} + + # Running gcovr + COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Running gcovr to produce Cobertura code coverage report." + ) + + # Show info where to find the report + ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD + COMMAND ; + COMMENT "Cobertura code coverage report saved in ${_outputname}.xml." + ) + +ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA diff --git a/Week 3/Accelerated_C++_4_5/readme.md b/Week 3/Accelerated_C++_4_5/readme.md new file mode 100644 index 00000000..6ab4150e --- /dev/null +++ b/Week 3/Accelerated_C++_4_5/readme.md @@ -0,0 +1 @@ +## readme \ No newline at end of file diff --git a/Week 3/Accelerated_C++_4_5/test/CMakeLists.txt b/Week 3/Accelerated_C++_4_5/test/CMakeLists.txt new file mode 100644 index 00000000..2b1cd4cb --- /dev/null +++ b/Week 3/Accelerated_C++_4_5/test/CMakeLists.txt @@ -0,0 +1,11 @@ +set(GTEST_SHUFFLE 1) + +add_executable( + cpp-test + main.cpp + test.cpp +) + +target_include_directories(cpp-test PUBLIC ../vendor/googletest/googletest/include + ${CMAKE_SOURCE_DIR}/include) +target_link_libraries(cpp-test PUBLIC gtest) diff --git a/Week 3/Accelerated_C++_4_5/test/main.cpp b/Week 3/Accelerated_C++_4_5/test/main.cpp new file mode 100644 index 00000000..697a9d70 --- /dev/null +++ b/Week 3/Accelerated_C++_4_5/test/main.cpp @@ -0,0 +1,6 @@ +#include + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/Week 3/Accelerated_C++_4_5/test/test.cpp b/Week 3/Accelerated_C++_4_5/test/test.cpp new file mode 100644 index 00000000..2c5cd069 --- /dev/null +++ b/Week 3/Accelerated_C++_4_5/test/test.cpp @@ -0,0 +1,5 @@ +#include + +TEST(dummy, should_pass) { + EXPECT_EQ(1, 1); +} diff --git a/Week 3/Accelerated_C++_4_7/.gitignore b/Week 3/Accelerated_C++_4_7/.gitignore new file mode 100644 index 00000000..b2566ac7 --- /dev/null +++ b/Week 3/Accelerated_C++_4_7/.gitignore @@ -0,0 +1,11 @@ +# VS Code files +*.VC.db* + +# OS X files +.DS_Store + +# Build artifacts +build/ + +# Python +*.pyc diff --git a/Week 3/Accelerated_C++_4_7/CMakeLists.txt b/Week 3/Accelerated_C++_4_7/CMakeLists.txt new file mode 100644 index 00000000..6f640341 --- /dev/null +++ b/Week 3/Accelerated_C++_4_7/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 3.2.1) +project (scratch) + +# Add project cmake modules to path. +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) + +# We probably don't want this to run on every build. +option(COVERAGE "Generate Coverage Data" OFF) + +if (COVERAGE) + include(CodeCoverage) + set(LCOV_REMOVE_EXTRA "'vendor/*'") + setup_target_for_coverage(code_coverage test/cpp-test coverage) + + SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") + SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") + SET(CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage") +else() + set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -g") +endif() + +include(CMakeToolsHelpers OPTIONAL) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(CMAKE_CXX_STANDARD 14) + +add_subdirectory(app) +add_subdirectory(test) diff --git a/Week 3/Accelerated_C++_4_7/UML_diagram/Accelerated_C++_4_7.pdf b/Week 3/Accelerated_C++_4_7/UML_diagram/Accelerated_C++_4_7.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a4bc6d2dd8f7febc4d36dc60aec0a06727ab7197 GIT binary patch literal 9586 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 LW)Kq6GSU8j&1$7k literal 0 HcmV?d00001 diff --git a/Week 3/Accelerated_C++_4_7/app/Accelerated_C++_4_7.cpp b/Week 3/Accelerated_C++_4_7/app/Accelerated_C++_4_7.cpp new file mode 100644 index 00000000..86ac15a6 --- /dev/null +++ b/Week 3/Accelerated_C++_4_7/app/Accelerated_C++_4_7.cpp @@ -0,0 +1,29 @@ +//! "Copyright [2021] None" +/** + * @file AcceleratedC++_4_5.cpp + * @author PratikBhujbal + * @date 16 September 2021 + * @brief Week3 assingment problem 4.7 from Accelerated C++ book + * @section DESCRIPTION + * + *This is a program that reads from a vector with initial values + *presented and outputs the average of the numbers. + * + */ + +// CPP Headers +#include +#include +#include +#include + +int main() { + std::vector inputNumbers = { 50, 60, 40.1, 87.0 }; + std::cout << "Average = "; + // Accumulate the numbers into average and divides with total size + std::cout + << (accumulate(inputNumbers.begin(), inputNumbers.end(), 0)) + / inputNumbers.size() + << std::endl; + return 0; +} diff --git a/Week 3/Accelerated_C++_4_7/app/CMakeLists.txt b/Week 3/Accelerated_C++_4_7/app/CMakeLists.txt new file mode 100644 index 00000000..007e1b47 --- /dev/null +++ b/Week 3/Accelerated_C++_4_7/app/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable(AcceleratedC++_4_7 Accelerated_C++_4_7.cpp) +include_directories( + ${CMAKE_SOURCE_DIR}/include +) diff --git a/Week 3/Accelerated_C++_4_7/cmake/CodeCoverage.cmake b/Week 3/Accelerated_C++_4_7/cmake/CodeCoverage.cmake new file mode 100644 index 00000000..50dffc7d --- /dev/null +++ b/Week 3/Accelerated_C++_4_7/cmake/CodeCoverage.cmake @@ -0,0 +1,203 @@ +# Copyright (c) 2012 - 2015, Lars Bilke +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# +# +# 2012-01-31, Lars Bilke +# - Enable Code Coverage +# +# 2013-09-17, Joakim Söderberg +# - Added support for Clang. +# - Some additional usage instructions. +# +# USAGE: + +# 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here: +# http://stackoverflow.com/a/22404544/80480 +# +# 1. Copy this file into your cmake modules path. +# +# 2. Add the following line to your CMakeLists.txt: +# INCLUDE(CodeCoverage) +# +# 3. Set compiler flags to turn off optimization and enable coverage: +# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") +# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") +# +# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target +# which runs your test executable and produces a lcov code coverage report: +# Example: +# SETUP_TARGET_FOR_COVERAGE( +# my_coverage_target # Name for custom target. +# test_driver # Name of the test driver executable that runs the tests. +# # NOTE! This should always have a ZERO as exit code +# # otherwise the coverage generation will not complete. +# coverage # Name of output directory. +# ) +# +# If you need to exclude additional directories from the report, specify them +# using the LCOV_REMOVE_EXTRA variable before calling SETUP_TARGET_FOR_COVERAGE. +# For example: +# +# set(LCOV_REMOVE_EXTRA "'thirdparty/*'") +# +# 4. Build a Debug build: +# cmake -DCMAKE_BUILD_TYPE=Debug .. +# make +# make my_coverage_target +# +# + +# Check prereqs +FIND_PROGRAM( GCOV_PATH gcov ) +FIND_PROGRAM( LCOV_PATH lcov ) +FIND_PROGRAM( GENHTML_PATH genhtml ) +FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests) + +IF(NOT GCOV_PATH) + MESSAGE(FATAL_ERROR "gcov not found! Aborting...") +ENDIF() # NOT GCOV_PATH + +IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") + IF("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) + MESSAGE(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") + ENDIF() +ELSEIF(NOT CMAKE_COMPILER_IS_GNUCXX) + MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") +ENDIF() # CHECK VALID COMPILER + +SET(CMAKE_CXX_FLAGS_COVERAGE + "-g -O0 --coverage -fprofile-arcs -ftest-coverage" + CACHE STRING "Flags used by the C++ compiler during coverage builds." + FORCE ) +SET(CMAKE_C_FLAGS_COVERAGE + "-g -O0 --coverage -fprofile-arcs -ftest-coverage" + CACHE STRING "Flags used by the C compiler during coverage builds." + FORCE ) +SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE + "" + CACHE STRING "Flags used for linking binaries during coverage builds." + FORCE ) +SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE + "" + CACHE STRING "Flags used by the shared libraries linker during coverage builds." + FORCE ) +MARK_AS_ADVANCED( + CMAKE_CXX_FLAGS_COVERAGE + CMAKE_C_FLAGS_COVERAGE + CMAKE_EXE_LINKER_FLAGS_COVERAGE + CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) + +IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage")) + MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) +ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" + + +# Param _targetname The name of new the custom make target +# Param _testrunner The name of the target which runs the tests. +# MUST return ZERO always, even on errors. +# If not, no coverage report will be created! +# Param _outputname lcov output is generated as _outputname.info +# HTML report is generated in _outputname/index.html +# Optional fourth parameter is passed as arguments to _testrunner +# Pass them in list form, e.g.: "-j;2" for -j 2 +FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname) + + IF(NOT LCOV_PATH) + MESSAGE(FATAL_ERROR "lcov not found! Aborting...") + ENDIF() # NOT LCOV_PATH + + IF(NOT GENHTML_PATH) + MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") + ENDIF() # NOT GENHTML_PATH + + SET(coverage_info "${CMAKE_BINARY_DIR}/${_outputname}.info") + SET(coverage_cleaned "${coverage_info}.cleaned") + + SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}") + + # Setup target + ADD_CUSTOM_TARGET(${_targetname} + + # Cleanup lcov + ${LCOV_PATH} --directory . --zerocounters + + # Run tests + COMMAND ${test_command} ${ARGV3} + + # Capturing lcov counters and generating report + COMMAND ${LCOV_PATH} --directory . --capture --output-file ${coverage_info} + COMMAND ${LCOV_PATH} --remove ${coverage_info} 'tests/*' '/usr/*' ${LCOV_REMOVE_EXTRA} --output-file ${coverage_cleaned} + COMMAND ${GENHTML_PATH} -o ${_outputname} ${coverage_cleaned} + COMMAND ${CMAKE_COMMAND} -E remove ${coverage_info} ${coverage_cleaned} + + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." + ) + + # Show info where to find the report + ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD + COMMAND ; + COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report." + ) + +ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE + +# Param _targetname The name of new the custom make target +# Param _testrunner The name of the target which runs the tests +# Param _outputname cobertura output is generated as _outputname.xml +# Optional fourth parameter is passed as arguments to _testrunner +# Pass them in list form, e.g.: "-j;2" for -j 2 +FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname) + + IF(NOT PYTHON_EXECUTABLE) + MESSAGE(FATAL_ERROR "Python not found! Aborting...") + ENDIF() # NOT PYTHON_EXECUTABLE + + IF(NOT GCOVR_PATH) + MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") + ENDIF() # NOT GCOVR_PATH + + ADD_CUSTOM_TARGET(${_targetname} + + # Run tests + ${_testrunner} ${ARGV3} + + # Running gcovr + COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Running gcovr to produce Cobertura code coverage report." + ) + + # Show info where to find the report + ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD + COMMAND ; + COMMENT "Cobertura code coverage report saved in ${_outputname}.xml." + ) + +ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA diff --git a/Week 3/Accelerated_C++_4_7/readme.md b/Week 3/Accelerated_C++_4_7/readme.md new file mode 100644 index 00000000..6ab4150e --- /dev/null +++ b/Week 3/Accelerated_C++_4_7/readme.md @@ -0,0 +1 @@ +## readme \ No newline at end of file diff --git a/Week 3/Accelerated_C++_4_7/test/CMakeLists.txt b/Week 3/Accelerated_C++_4_7/test/CMakeLists.txt new file mode 100644 index 00000000..2b1cd4cb --- /dev/null +++ b/Week 3/Accelerated_C++_4_7/test/CMakeLists.txt @@ -0,0 +1,11 @@ +set(GTEST_SHUFFLE 1) + +add_executable( + cpp-test + main.cpp + test.cpp +) + +target_include_directories(cpp-test PUBLIC ../vendor/googletest/googletest/include + ${CMAKE_SOURCE_DIR}/include) +target_link_libraries(cpp-test PUBLIC gtest) diff --git a/Week 3/Accelerated_C++_4_7/test/main.cpp b/Week 3/Accelerated_C++_4_7/test/main.cpp new file mode 100644 index 00000000..697a9d70 --- /dev/null +++ b/Week 3/Accelerated_C++_4_7/test/main.cpp @@ -0,0 +1,6 @@ +#include + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/Week 3/Accelerated_C++_4_7/test/test.cpp b/Week 3/Accelerated_C++_4_7/test/test.cpp new file mode 100644 index 00000000..2c5cd069 --- /dev/null +++ b/Week 3/Accelerated_C++_4_7/test/test.cpp @@ -0,0 +1,5 @@ +#include + +TEST(dummy, should_pass) { + EXPECT_EQ(1, 1); +} diff --git a/Week 3/Accelerated_C++_6_9/.gitignore b/Week 3/Accelerated_C++_6_9/.gitignore new file mode 100644 index 00000000..b2566ac7 --- /dev/null +++ b/Week 3/Accelerated_C++_6_9/.gitignore @@ -0,0 +1,11 @@ +# VS Code files +*.VC.db* + +# OS X files +.DS_Store + +# Build artifacts +build/ + +# Python +*.pyc diff --git a/Week 3/Accelerated_C++_6_9/UML_diagram/Accelerated_C++_6_9.pdf b/Week 3/Accelerated_C++_6_9/UML_diagram/Accelerated_C++_6_9.pdf new file mode 100644 index 0000000000000000000000000000000000000000..08dbc4d9a78d7aa976538465917bcec9576527b9 GIT binary patch literal 9715 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 +#include +#include +#include + +void unary_func(std::string i) { + std::cout << ' ' << i; +} +int main() { + std::vector inputWords = { "My", "Name", "is", "Pratik" }; + // Prints concatenated string + std::cout << "\nThe concatenate of all vector elements is: "; + for_each(inputWords.begin(), inputWords.end(), unary_func); + std::cout << '\n'; + return 0; +} diff --git a/Week 3/Accelerated_C++_6_9/app/CMakeLists.txt b/Week 3/Accelerated_C++_6_9/app/CMakeLists.txt new file mode 100644 index 00000000..652514f4 --- /dev/null +++ b/Week 3/Accelerated_C++_6_9/app/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable(Accelerated_C++_6_9 Accelerated_C++_6_9.cpp) +include_directories( + ${CMAKE_SOURCE_DIR}/include +) diff --git a/Week 3/Accelerated_C++_6_9/cmake/CodeCoverage.cmake b/Week 3/Accelerated_C++_6_9/cmake/CodeCoverage.cmake new file mode 100644 index 00000000..50dffc7d --- /dev/null +++ b/Week 3/Accelerated_C++_6_9/cmake/CodeCoverage.cmake @@ -0,0 +1,203 @@ +# Copyright (c) 2012 - 2015, Lars Bilke +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# +# +# 2012-01-31, Lars Bilke +# - Enable Code Coverage +# +# 2013-09-17, Joakim Söderberg +# - Added support for Clang. +# - Some additional usage instructions. +# +# USAGE: + +# 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here: +# http://stackoverflow.com/a/22404544/80480 +# +# 1. Copy this file into your cmake modules path. +# +# 2. Add the following line to your CMakeLists.txt: +# INCLUDE(CodeCoverage) +# +# 3. Set compiler flags to turn off optimization and enable coverage: +# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") +# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") +# +# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target +# which runs your test executable and produces a lcov code coverage report: +# Example: +# SETUP_TARGET_FOR_COVERAGE( +# my_coverage_target # Name for custom target. +# test_driver # Name of the test driver executable that runs the tests. +# # NOTE! This should always have a ZERO as exit code +# # otherwise the coverage generation will not complete. +# coverage # Name of output directory. +# ) +# +# If you need to exclude additional directories from the report, specify them +# using the LCOV_REMOVE_EXTRA variable before calling SETUP_TARGET_FOR_COVERAGE. +# For example: +# +# set(LCOV_REMOVE_EXTRA "'thirdparty/*'") +# +# 4. Build a Debug build: +# cmake -DCMAKE_BUILD_TYPE=Debug .. +# make +# make my_coverage_target +# +# + +# Check prereqs +FIND_PROGRAM( GCOV_PATH gcov ) +FIND_PROGRAM( LCOV_PATH lcov ) +FIND_PROGRAM( GENHTML_PATH genhtml ) +FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests) + +IF(NOT GCOV_PATH) + MESSAGE(FATAL_ERROR "gcov not found! Aborting...") +ENDIF() # NOT GCOV_PATH + +IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") + IF("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) + MESSAGE(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") + ENDIF() +ELSEIF(NOT CMAKE_COMPILER_IS_GNUCXX) + MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") +ENDIF() # CHECK VALID COMPILER + +SET(CMAKE_CXX_FLAGS_COVERAGE + "-g -O0 --coverage -fprofile-arcs -ftest-coverage" + CACHE STRING "Flags used by the C++ compiler during coverage builds." + FORCE ) +SET(CMAKE_C_FLAGS_COVERAGE + "-g -O0 --coverage -fprofile-arcs -ftest-coverage" + CACHE STRING "Flags used by the C compiler during coverage builds." + FORCE ) +SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE + "" + CACHE STRING "Flags used for linking binaries during coverage builds." + FORCE ) +SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE + "" + CACHE STRING "Flags used by the shared libraries linker during coverage builds." + FORCE ) +MARK_AS_ADVANCED( + CMAKE_CXX_FLAGS_COVERAGE + CMAKE_C_FLAGS_COVERAGE + CMAKE_EXE_LINKER_FLAGS_COVERAGE + CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) + +IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage")) + MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) +ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" + + +# Param _targetname The name of new the custom make target +# Param _testrunner The name of the target which runs the tests. +# MUST return ZERO always, even on errors. +# If not, no coverage report will be created! +# Param _outputname lcov output is generated as _outputname.info +# HTML report is generated in _outputname/index.html +# Optional fourth parameter is passed as arguments to _testrunner +# Pass them in list form, e.g.: "-j;2" for -j 2 +FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname) + + IF(NOT LCOV_PATH) + MESSAGE(FATAL_ERROR "lcov not found! Aborting...") + ENDIF() # NOT LCOV_PATH + + IF(NOT GENHTML_PATH) + MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") + ENDIF() # NOT GENHTML_PATH + + SET(coverage_info "${CMAKE_BINARY_DIR}/${_outputname}.info") + SET(coverage_cleaned "${coverage_info}.cleaned") + + SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}") + + # Setup target + ADD_CUSTOM_TARGET(${_targetname} + + # Cleanup lcov + ${LCOV_PATH} --directory . --zerocounters + + # Run tests + COMMAND ${test_command} ${ARGV3} + + # Capturing lcov counters and generating report + COMMAND ${LCOV_PATH} --directory . --capture --output-file ${coverage_info} + COMMAND ${LCOV_PATH} --remove ${coverage_info} 'tests/*' '/usr/*' ${LCOV_REMOVE_EXTRA} --output-file ${coverage_cleaned} + COMMAND ${GENHTML_PATH} -o ${_outputname} ${coverage_cleaned} + COMMAND ${CMAKE_COMMAND} -E remove ${coverage_info} ${coverage_cleaned} + + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." + ) + + # Show info where to find the report + ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD + COMMAND ; + COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report." + ) + +ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE + +# Param _targetname The name of new the custom make target +# Param _testrunner The name of the target which runs the tests +# Param _outputname cobertura output is generated as _outputname.xml +# Optional fourth parameter is passed as arguments to _testrunner +# Pass them in list form, e.g.: "-j;2" for -j 2 +FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname) + + IF(NOT PYTHON_EXECUTABLE) + MESSAGE(FATAL_ERROR "Python not found! Aborting...") + ENDIF() # NOT PYTHON_EXECUTABLE + + IF(NOT GCOVR_PATH) + MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") + ENDIF() # NOT GCOVR_PATH + + ADD_CUSTOM_TARGET(${_targetname} + + # Run tests + ${_testrunner} ${ARGV3} + + # Running gcovr + COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Running gcovr to produce Cobertura code coverage report." + ) + + # Show info where to find the report + ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD + COMMAND ; + COMMENT "Cobertura code coverage report saved in ${_outputname}.xml." + ) + +ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA diff --git a/Week 3/Accelerated_C++_6_9/readme.md b/Week 3/Accelerated_C++_6_9/readme.md new file mode 100644 index 00000000..6ab4150e --- /dev/null +++ b/Week 3/Accelerated_C++_6_9/readme.md @@ -0,0 +1 @@ +## readme \ No newline at end of file diff --git a/Week 3/Accelerated_C++_6_9/test/CMakeLists.txt b/Week 3/Accelerated_C++_6_9/test/CMakeLists.txt new file mode 100644 index 00000000..2b1cd4cb --- /dev/null +++ b/Week 3/Accelerated_C++_6_9/test/CMakeLists.txt @@ -0,0 +1,11 @@ +set(GTEST_SHUFFLE 1) + +add_executable( + cpp-test + main.cpp + test.cpp +) + +target_include_directories(cpp-test PUBLIC ../vendor/googletest/googletest/include + ${CMAKE_SOURCE_DIR}/include) +target_link_libraries(cpp-test PUBLIC gtest) diff --git a/Week 3/Accelerated_C++_6_9/test/main.cpp b/Week 3/Accelerated_C++_6_9/test/main.cpp new file mode 100644 index 00000000..697a9d70 --- /dev/null +++ b/Week 3/Accelerated_C++_6_9/test/main.cpp @@ -0,0 +1,6 @@ +#include + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/Week 3/Accelerated_C++_6_9/test/test.cpp b/Week 3/Accelerated_C++_6_9/test/test.cpp new file mode 100644 index 00000000..2c5cd069 --- /dev/null +++ b/Week 3/Accelerated_C++_6_9/test/test.cpp @@ -0,0 +1,5 @@ +#include + +TEST(dummy, should_pass) { + EXPECT_EQ(1, 1); +} diff --git a/Week 3/SoftwareEngineering_3_10/.gitignore b/Week 3/SoftwareEngineering_3_10/.gitignore new file mode 100644 index 00000000..b2566ac7 --- /dev/null +++ b/Week 3/SoftwareEngineering_3_10/.gitignore @@ -0,0 +1,11 @@ +# VS Code files +*.VC.db* + +# OS X files +.DS_Store + +# Build artifacts +build/ + +# Python +*.pyc diff --git a/Week 3/SoftwareEngineering_3_10/CMakeLists.txt b/Week 3/SoftwareEngineering_3_10/CMakeLists.txt new file mode 100644 index 00000000..9871031c --- /dev/null +++ b/Week 3/SoftwareEngineering_3_10/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.2.1) +project (scratch) + +# Add project cmake modules to path. +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) + +# We probably don't want this to run on every build. +option(COVERAGE "Generate Coverage Data" OFF) + +if (COVERAGE) + include(CodeCoverage) + set(LCOV_REMOVE_EXTRA "'vendor/*'") + setup_target_for_coverage(code_coverage test/cpp-test coverage) + SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") + SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") + SET(CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage") +else() + set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -g") +endif() + +include(CMakeToolsHelpers OPTIONAL) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(CMAKE_CXX_STANDARD 14) + +add_subdirectory(app) +add_subdirectory(test) diff --git a/Week 3/SoftwareEngineering_3_10/UML_diagram/SoftwareEngineering_3_10.pdf b/Week 3/SoftwareEngineering_3_10/UML_diagram/SoftwareEngineering_3_10.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f14138c2dcd19245754b000921c8723d9aa646aa GIT binary patch literal 12093 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 literal 0 HcmV?d00001 diff --git a/Week 3/SoftwareEngineering_3_10/app/CMakeLists.txt b/Week 3/SoftwareEngineering_3_10/app/CMakeLists.txt new file mode 100644 index 00000000..5a59a661 --- /dev/null +++ b/Week 3/SoftwareEngineering_3_10/app/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable(SoftwareEngineering_3_10 SoftwareEngineering_3_10.cpp) +include_directories( + ${CMAKE_SOURCE_DIR}/include +) diff --git a/Week 3/SoftwareEngineering_3_10/app/SoftwareEngineering_3_10.cpp b/Week 3/SoftwareEngineering_3_10/app/SoftwareEngineering_3_10.cpp new file mode 100644 index 00000000..c7108d88 --- /dev/null +++ b/Week 3/SoftwareEngineering_3_10/app/SoftwareEngineering_3_10.cpp @@ -0,0 +1,42 @@ +//! "Copyright [2021] None" +/* + * @file SoftwareEngineering_3_10.cpp + * @author PratikBhujbal + * @date 16 September 2021 + * @brief Week3 assingment problem 3.10 from SoftwareEngineering book + * @section DESCRIPTION + * This is a the main class for course grading. + * A method that computes the grade point average. + * And can change the student grade. + */ + +// CPP Header for class +#include + +#include + +int main() { + // Create class object + CourseGrading grading; + // Take input from user for grade modification and to calculate grade point + grading.ListAll(); + std::cout << "Choose what you want to do?" << " (1/2/3)" << std::endl; + std::cout << "1. Modify the grade." << std::endl; + std::cout << "2. Calculate the grade point average for class." << std::endl; + std::cout << "3. None." << std::endl; + int answer; + std::cin >> answer; + if (answer == 1) { + grading.ChangeGrade(); + } else if (answer == 2) { + grading.CalculateGradePoint(); + } else if (answer == 3) { + std::cout << "OK" << std::endl; + } else { + // Show invalid input if other than options + std::cout << "Invalid Input!! (PLease give 1/2/3 in integer form)." + << std::endl; + } + + return 0; +} diff --git a/Week 3/SoftwareEngineering_3_10/cmake/CodeCoverage.cmake b/Week 3/SoftwareEngineering_3_10/cmake/CodeCoverage.cmake new file mode 100644 index 00000000..50dffc7d --- /dev/null +++ b/Week 3/SoftwareEngineering_3_10/cmake/CodeCoverage.cmake @@ -0,0 +1,203 @@ +# Copyright (c) 2012 - 2015, Lars Bilke +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# +# +# 2012-01-31, Lars Bilke +# - Enable Code Coverage +# +# 2013-09-17, Joakim Söderberg +# - Added support for Clang. +# - Some additional usage instructions. +# +# USAGE: + +# 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here: +# http://stackoverflow.com/a/22404544/80480 +# +# 1. Copy this file into your cmake modules path. +# +# 2. Add the following line to your CMakeLists.txt: +# INCLUDE(CodeCoverage) +# +# 3. Set compiler flags to turn off optimization and enable coverage: +# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") +# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") +# +# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target +# which runs your test executable and produces a lcov code coverage report: +# Example: +# SETUP_TARGET_FOR_COVERAGE( +# my_coverage_target # Name for custom target. +# test_driver # Name of the test driver executable that runs the tests. +# # NOTE! This should always have a ZERO as exit code +# # otherwise the coverage generation will not complete. +# coverage # Name of output directory. +# ) +# +# If you need to exclude additional directories from the report, specify them +# using the LCOV_REMOVE_EXTRA variable before calling SETUP_TARGET_FOR_COVERAGE. +# For example: +# +# set(LCOV_REMOVE_EXTRA "'thirdparty/*'") +# +# 4. Build a Debug build: +# cmake -DCMAKE_BUILD_TYPE=Debug .. +# make +# make my_coverage_target +# +# + +# Check prereqs +FIND_PROGRAM( GCOV_PATH gcov ) +FIND_PROGRAM( LCOV_PATH lcov ) +FIND_PROGRAM( GENHTML_PATH genhtml ) +FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests) + +IF(NOT GCOV_PATH) + MESSAGE(FATAL_ERROR "gcov not found! Aborting...") +ENDIF() # NOT GCOV_PATH + +IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") + IF("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) + MESSAGE(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") + ENDIF() +ELSEIF(NOT CMAKE_COMPILER_IS_GNUCXX) + MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") +ENDIF() # CHECK VALID COMPILER + +SET(CMAKE_CXX_FLAGS_COVERAGE + "-g -O0 --coverage -fprofile-arcs -ftest-coverage" + CACHE STRING "Flags used by the C++ compiler during coverage builds." + FORCE ) +SET(CMAKE_C_FLAGS_COVERAGE + "-g -O0 --coverage -fprofile-arcs -ftest-coverage" + CACHE STRING "Flags used by the C compiler during coverage builds." + FORCE ) +SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE + "" + CACHE STRING "Flags used for linking binaries during coverage builds." + FORCE ) +SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE + "" + CACHE STRING "Flags used by the shared libraries linker during coverage builds." + FORCE ) +MARK_AS_ADVANCED( + CMAKE_CXX_FLAGS_COVERAGE + CMAKE_C_FLAGS_COVERAGE + CMAKE_EXE_LINKER_FLAGS_COVERAGE + CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) + +IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage")) + MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) +ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" + + +# Param _targetname The name of new the custom make target +# Param _testrunner The name of the target which runs the tests. +# MUST return ZERO always, even on errors. +# If not, no coverage report will be created! +# Param _outputname lcov output is generated as _outputname.info +# HTML report is generated in _outputname/index.html +# Optional fourth parameter is passed as arguments to _testrunner +# Pass them in list form, e.g.: "-j;2" for -j 2 +FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname) + + IF(NOT LCOV_PATH) + MESSAGE(FATAL_ERROR "lcov not found! Aborting...") + ENDIF() # NOT LCOV_PATH + + IF(NOT GENHTML_PATH) + MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") + ENDIF() # NOT GENHTML_PATH + + SET(coverage_info "${CMAKE_BINARY_DIR}/${_outputname}.info") + SET(coverage_cleaned "${coverage_info}.cleaned") + + SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}") + + # Setup target + ADD_CUSTOM_TARGET(${_targetname} + + # Cleanup lcov + ${LCOV_PATH} --directory . --zerocounters + + # Run tests + COMMAND ${test_command} ${ARGV3} + + # Capturing lcov counters and generating report + COMMAND ${LCOV_PATH} --directory . --capture --output-file ${coverage_info} + COMMAND ${LCOV_PATH} --remove ${coverage_info} 'tests/*' '/usr/*' ${LCOV_REMOVE_EXTRA} --output-file ${coverage_cleaned} + COMMAND ${GENHTML_PATH} -o ${_outputname} ${coverage_cleaned} + COMMAND ${CMAKE_COMMAND} -E remove ${coverage_info} ${coverage_cleaned} + + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." + ) + + # Show info where to find the report + ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD + COMMAND ; + COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report." + ) + +ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE + +# Param _targetname The name of new the custom make target +# Param _testrunner The name of the target which runs the tests +# Param _outputname cobertura output is generated as _outputname.xml +# Optional fourth parameter is passed as arguments to _testrunner +# Pass them in list form, e.g.: "-j;2" for -j 2 +FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname) + + IF(NOT PYTHON_EXECUTABLE) + MESSAGE(FATAL_ERROR "Python not found! Aborting...") + ENDIF() # NOT PYTHON_EXECUTABLE + + IF(NOT GCOVR_PATH) + MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") + ENDIF() # NOT GCOVR_PATH + + ADD_CUSTOM_TARGET(${_targetname} + + # Run tests + ${_testrunner} ${ARGV3} + + # Running gcovr + COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Running gcovr to produce Cobertura code coverage report." + ) + + # Show info where to find the report + ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD + COMMAND ; + COMMENT "Cobertura code coverage report saved in ${_outputname}.xml." + ) + +ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA diff --git a/Week 3/SoftwareEngineering_3_10/include/SoftwareEngineering_3_10.h b/Week 3/SoftwareEngineering_3_10/include/SoftwareEngineering_3_10.h new file mode 100644 index 00000000..c5104eb9 --- /dev/null +++ b/Week 3/SoftwareEngineering_3_10/include/SoftwareEngineering_3_10.h @@ -0,0 +1,93 @@ +//! "Copyright [2021] None" +/* + * @file SoftwareEngineering_3_10.h + * @author PratikBhujbal + * @date 16 September 2021 + * @brief Week3 assingment problem 3.10 from SoftwareEngineering book + * @section DESCRIPTION + * Header file for CourseGrading class + */ + +#ifndef INCLUDE_SOFTWAREENGINEERING_3_10_H_ +#define INCLUDE_SOFTWAREENGINEERING_3_10_H_ + +#include +#include +#include +#include +/** + * @brief Class for course grading + */ +class CourseGrading { + private: + std::vector studentName; ///< Vector for student names + std::vector studentGrade; ///< Vector for student grades + + public: + /** + * @brief Lists all the students and their grades + * + * @param none + * @return void + */ + void ListAll() { + studentName = { 0, 3, 6, 9, 12 }; + studentGrade = { 50, 80, 95, 55, 78 }; // Student grade from 0-100 + std::cout << "Here is the List of Students and their respective grades" + << std::endl; + for (unsigned int i = 0; i < studentName.size(); i++) { + std::cout << "StudentId " << studentName.at(i) << " " << "-- Grade " + << studentGrade.at(i) << std::endl; + } + } + /** + * @brief Function to change grade using student id + * + * @param studentName whose grade needs to be changed + * @param grade as new grade input in double + * @return updated list of student and their grades + */ + void ChangeGrade() { + std::cout << "Enter Student Id to modify grade for that student" + << std::endl; + int Studentid; + std::cin >> Studentid; + std::cout << "Enter grade (from 30-100)" << std::endl; + double grade; + std::cin >> grade; + + std::vector::iterator id; + id = std::find(studentName.begin(), studentName.end(), Studentid); + if (id != studentName.end()) { + studentGrade.at(id - studentName.begin()) = grade; + std::cout << "Revised Grade:" << std::endl; + // Iterates and prints student id with their grade + for (unsigned int i = 0; i < studentName.size(); i++) { + std::cout << "StudentId " << studentName.at(i) << " " << "-- Grade " + << studentGrade.at(i) << std::endl; + std::cout << " " << std::endl; + } + CalculateGradePoint(); + } else { + std::cout << "Invalid Student Id!!. Please Enter correct Id" << std::endl; + std::cout << " " << std::endl; + ChangeGrade(); + } + } + /** + * @brief Calculates average grade point for the class + * + * @param nonerade point + * @return averagge g + */ + void CalculateGradePoint() { + double averageGradePoint; + double sum = accumulate(studentGrade.begin(), studentGrade.end(), 0); + averageGradePoint = (sum) / studentGrade.size(); + std::cout << "Average Grade Point for the class= " << averageGradePoint + << std::endl; + } +}; + +#endif // INCLUDE_SOFTWAREENGINEERING_3_10_H_ + diff --git a/Week 3/SoftwareEngineering_3_10/readme.md b/Week 3/SoftwareEngineering_3_10/readme.md new file mode 100644 index 00000000..6ab4150e --- /dev/null +++ b/Week 3/SoftwareEngineering_3_10/readme.md @@ -0,0 +1 @@ +## readme \ No newline at end of file diff --git a/Week 3/SoftwareEngineering_3_10/test/CMakeLists.txt b/Week 3/SoftwareEngineering_3_10/test/CMakeLists.txt new file mode 100644 index 00000000..2b1cd4cb --- /dev/null +++ b/Week 3/SoftwareEngineering_3_10/test/CMakeLists.txt @@ -0,0 +1,11 @@ +set(GTEST_SHUFFLE 1) + +add_executable( + cpp-test + main.cpp + test.cpp +) + +target_include_directories(cpp-test PUBLIC ../vendor/googletest/googletest/include + ${CMAKE_SOURCE_DIR}/include) +target_link_libraries(cpp-test PUBLIC gtest) diff --git a/Week 3/SoftwareEngineering_3_10/test/main.cpp b/Week 3/SoftwareEngineering_3_10/test/main.cpp new file mode 100644 index 00000000..697a9d70 --- /dev/null +++ b/Week 3/SoftwareEngineering_3_10/test/main.cpp @@ -0,0 +1,6 @@ +#include + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/Week 3/SoftwareEngineering_3_10/test/test.cpp b/Week 3/SoftwareEngineering_3_10/test/test.cpp new file mode 100644 index 00000000..2c5cd069 --- /dev/null +++ b/Week 3/SoftwareEngineering_3_10/test/test.cpp @@ -0,0 +1,5 @@ +#include + +TEST(dummy, should_pass) { + EXPECT_EQ(1, 1); +} diff --git a/Week 3/readme.md b/Week 3/readme.md new file mode 100644 index 00000000..d997b361 --- /dev/null +++ b/Week 3/readme.md @@ -0,0 +1,17 @@ +## Week 3- Assignment + +The folder contains solution source files for the following programming exercises: +- Accelerated C++ exercise 3-5 +- Accelerated C++ exercise 4-5 +- Accelerated C++ exercise 4-7 +- Accelerated C++ exercise 6-9 +- Software Engineering exercise 3.10 + +And written responses (week_3.pdf) for : +- Software Engineering 3.13 +- Software Engineering 3.14 +- Software Engineering 3.15 +- Software Engineering 4.1 +- Software Engineering 4.2 +- Software Engineering 4.3 +- Software Engineering 4.5 \ No newline at end of file diff --git a/Week 3/week_3.pdf b/Week 3/week_3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..47f7a9a6c8f00a147145deb1c09bf787b609162e GIT binary patch literal 312973 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
C$1F2pXt09H@p2gaZFI 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%0DSc5QH6`~J#6*_ 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