diff --git a/Assignment2.cpp b/Assignment2.cpp new file mode 160000 index 0000000..188b633 --- /dev/null +++ b/Assignment2.cpp @@ -0,0 +1 @@ +Subproject commit 188b633d5cc1d32622b4dd27b48c1683219be5c6 diff --git a/Assignment2/.idea/.name b/Assignment2/.idea/.name deleted file mode 100644 index 4c3058d..0000000 --- a/Assignment2/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -Assignment2 \ No newline at end of file diff --git a/Assignment2/Assignment2.cpp b/Assignment2/Assignment2.cpp deleted file mode 100644 index 3f1063a..0000000 --- a/Assignment2/Assignment2.cpp +++ /dev/null @@ -1,128 +0,0 @@ -#include -#include - -// -//If the default clang follows the the one true brace style is that not obviously the better brace style??? -// -class DistributionPair -{ -public: - DistributionPair(std::uint32_t minValue, std::uint32_t maxValue) : - minValue(minValue), - maxValue(maxValue), - count(0) - { - } - - std::uint32_t minValue; - std::uint32_t maxValue; - std::uint32_t count; -}; - - -std::vector generateUniformDistribution(std::uint32_t howMany, std::uint32_t min, std::uint32_t max, std::uint8_t numberBins); -std::vector generateNormalDistribution(std::uint32_t howMany, float mean, float stdev, std::uint8_t numberBins); -std::vector generatePoissonDistribution(std::uint32_t howMany, std::uint8_t howOften, std::uint8_t numberBins); -void plotDistribution(std::string title, const std::vector& distribution, const std::uint8_t maxPlotLineSize); -std::vector createBins (int min, int max, int binCount); - -std::random_device randomDevice; -std::default_random_engine randomEngine(randomDevice()); - - -int main() { - auto uniform = generateUniformDistribution(100000, 0, 79, 40); - plotDistribution("--- Uniform ---", uniform, 80); - - auto normal = generateNormalDistribution(100000, 50, 5, 40); - plotDistribution("--- Normal ---", normal, 80); - - auto poisson = generatePoissonDistribution(100000, 6, 40); - plotDistribution("--- Poisson ---", poisson, 80); - return 0; -} - - -std::vector generateUniformDistribution(std::uint32_t howMany, std::uint32_t min, std::uint32_t max, std::uint8_t numberBins){ - std::uniform_int_distribution distribution(min, max); - auto bins = createBins(min, max, numberBins); - for(int i = 0; i < howMany; i++){ - int number = distribution(randomEngine); - bins[number].count ++; - - } - return bins; -} - - - -std::vector generateNormalDistribution(std::uint32_t howMany, float mean, float stdev, std::uint8_t numberBins){ - int min = mean - (4 * stdev); - int max = mean + (4 * stdev) -1; - std::normal_distribution distribution(mean, stdev); - auto bins = createBins(min, max, numberBins); - - for(int i = 0; i < howMany; i++) { - double number = distribution(randomEngine); - int position = number - min / ((max - min) / float(numberBins)); - if (position > numberBins - 1) - bins[numberBins - 1].count++; - else if (position < 0) { - bins[0].count++; - } else { - bins[position].count++; - } - } - return bins; -} -std::vector generatePoissonDistribution(std::uint32_t howMany, std::uint8_t howOften, std::uint8_t numberBins){ - std::poisson_distribution distribution(howOften); - int min = 0; - int max = numberBins - 1; - auto bins = createBins(min, max, numberBins); - for(int i = 0; i < howMany; i++){ - int number = distribution(randomEngine); - //int position = number / (max / float(numberBins)); - if (number > numberBins - 1) - bins[numberBins - 1].count++; - else if (number < 0) { - bins[0].count++; - } else { - bins[number].count++; - } - - } - return bins; - -} - - -std::vector createBins (int min, int max, int binCount){ - std::vector myVector; - int difference = float(max - min + 1) / binCount; - for(int i = 0; i < binCount; i++){ - DistributionPair dpair((min + i) * difference, (min + i) * difference + difference - 1); - myVector.push_back(dpair); - } - return myVector; -} - - -void plotDistribution(std::string title, const std::vector& distribution, const std::uint8_t maxPlotLineSize){ - std::cout << title << std::endl; - auto max = 0; - for(auto currentBin : distribution){ - if(currentBin.count > max) - max = currentBin.count; - } - for(auto currentBin : distribution){ - int starCount = currentBin.count / float(max) * maxPlotLineSize; - std::cout << "[ " << currentBin.minValue << ", " << currentBin.maxValue << " ]" << " : "; - for(int i = 0; i < starCount; i++) - std::cout << "*"; - std::cout << std::endl; - } -} - - - diff --git a/Assignment2/CMakeLists.txt b/Assignment2/CMakeLists.txt deleted file mode 100644 index 953b945..0000000 --- a/Assignment2/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(Assignment2) - -set(CMAKE_CXX_STANDARD 17) -set(SOURCE_FILES - Assignment2.cpp) -add_executable(hw Assignment2.cpp) -add_executable(RandDistributions ${SOURCE_FILES}) - -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") - target_compile_options(RandDistributions PRIVATE /W4 /permissive-) -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - target_compile_options(RandDistributions PRIVATE -Wall -Wextra -pedantic) -endif() - -find_program(CLANG_FORMAT "clang-format") -if(CLANG_FORMAT) - unset(SOURCE_FILES_PATHS) - foreach(SOURCE_FILE ${SOURCE_FILES}) - get_source_file_property(WHERE ${SOURCE_FILE} LOCATION) - set(SOURCE_FILES_PATHS ${SOURCE_FILES_PATHS} ${WHERE}) - endforeach() - - add_custom_target( - ClangFormatCOMMAND - ${CLANG_FORMAT} - -i - -style=file - ${SOURCE_FILES_PATHS}) - add_dependencies(Assignment2 ClangFormat) -endif() \ No newline at end of file diff --git a/Assignment2/cmake-build-debug/Assignment2.cbp b/Assignment2/cmake-build-debug/Assignment2.cbp deleted file mode 100644 index 1ce435a..0000000 --- a/Assignment2/cmake-build-debug/Assignment2.cbp +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - diff --git a/Assignment2/cmake-build-debug/CMakeFiles/Makefile2 b/Assignment2/cmake-build-debug/CMakeFiles/Makefile2 deleted file mode 100644 index f6a4ede..0000000 --- a/Assignment2/cmake-build-debug/CMakeFiles/Makefile2 +++ /dev/null @@ -1,182 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.14 - -# Default target executed when no arguments are given to make. -default_target: all - -.PHONY : default_target - -# The main recursive all target -all: - -.PHONY : all - -# The main recursive preinstall target -preinstall: - -.PHONY : preinstall - -# The main recursive clean target -clean: - -.PHONY : clean - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake - -# The command to remove a file. -RM = /Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /Users/bradybodily/Repositories/CS3460/Assignment2.cpp - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug - -#============================================================================= -# Target rules for target CMakeFiles/ClangFormatCOMMAND.dir - -# All Build rule for target. -CMakeFiles/ClangFormatCOMMAND.dir/all: - $(MAKE) -f CMakeFiles/ClangFormatCOMMAND.dir/build.make CMakeFiles/ClangFormatCOMMAND.dir/depend - $(MAKE) -f CMakeFiles/ClangFormatCOMMAND.dir/build.make CMakeFiles/ClangFormatCOMMAND.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles --progress-num= "Built target ClangFormatCOMMAND" -.PHONY : CMakeFiles/ClangFormatCOMMAND.dir/all - -# Build rule for subdir invocation for target. -CMakeFiles/ClangFormatCOMMAND.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles 0 - $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ClangFormatCOMMAND.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles 0 -.PHONY : CMakeFiles/ClangFormatCOMMAND.dir/rule - -# Convenience name for target. -ClangFormatCOMMAND: CMakeFiles/ClangFormatCOMMAND.dir/rule - -.PHONY : ClangFormatCOMMAND - -# clean rule for target. -CMakeFiles/ClangFormatCOMMAND.dir/clean: - $(MAKE) -f CMakeFiles/ClangFormatCOMMAND.dir/build.make CMakeFiles/ClangFormatCOMMAND.dir/clean -.PHONY : CMakeFiles/ClangFormatCOMMAND.dir/clean - -# clean rule for target. -clean: CMakeFiles/ClangFormatCOMMAND.dir/clean - -.PHONY : clean - -#============================================================================= -# Target rules for target CMakeFiles/RandDistributions.dir - -# All Build rule for target. -CMakeFiles/RandDistributions.dir/all: - $(MAKE) -f CMakeFiles/RandDistributions.dir/build.make CMakeFiles/RandDistributions.dir/depend - $(MAKE) -f CMakeFiles/RandDistributions.dir/build.make CMakeFiles/RandDistributions.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles --progress-num=1,2 "Built target RandDistributions" -.PHONY : CMakeFiles/RandDistributions.dir/all - -# Include target in all. -all: CMakeFiles/RandDistributions.dir/all - -.PHONY : all - -# Build rule for subdir invocation for target. -CMakeFiles/RandDistributions.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles 2 - $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/RandDistributions.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles 0 -.PHONY : CMakeFiles/RandDistributions.dir/rule - -# Convenience name for target. -RandDistributions: CMakeFiles/RandDistributions.dir/rule - -.PHONY : RandDistributions - -# clean rule for target. -CMakeFiles/RandDistributions.dir/clean: - $(MAKE) -f CMakeFiles/RandDistributions.dir/build.make CMakeFiles/RandDistributions.dir/clean -.PHONY : CMakeFiles/RandDistributions.dir/clean - -# clean rule for target. -clean: CMakeFiles/RandDistributions.dir/clean - -.PHONY : clean - -#============================================================================= -# Target rules for target CMakeFiles/hw.dir - -# All Build rule for target. -CMakeFiles/hw.dir/all: - $(MAKE) -f CMakeFiles/hw.dir/build.make CMakeFiles/hw.dir/depend - $(MAKE) -f CMakeFiles/hw.dir/build.make CMakeFiles/hw.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles --progress-num=3,4 "Built target hw" -.PHONY : CMakeFiles/hw.dir/all - -# Include target in all. -all: CMakeFiles/hw.dir/all - -.PHONY : all - -# Build rule for subdir invocation for target. -CMakeFiles/hw.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles 2 - $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/hw.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles 0 -.PHONY : CMakeFiles/hw.dir/rule - -# Convenience name for target. -hw: CMakeFiles/hw.dir/rule - -.PHONY : hw - -# clean rule for target. -CMakeFiles/hw.dir/clean: - $(MAKE) -f CMakeFiles/hw.dir/build.make CMakeFiles/hw.dir/clean -.PHONY : CMakeFiles/hw.dir/clean - -# clean rule for target. -clean: CMakeFiles/hw.dir/clean - -.PHONY : clean - -#============================================================================= -# Special targets to cleanup operation of make. - -# Special rule to run CMake to check the build system integrity. -# No rule that depends on this can have commands that come from listfiles -# because they might be regenerated. -cmake_check_build_system: - $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 -.PHONY : cmake_check_build_system - diff --git a/Assignment2/cmake-build-debug/CMakeFiles/TargetDirectories.txt b/Assignment2/cmake-build-debug/CMakeFiles/TargetDirectories.txt deleted file mode 100644 index 838ecf2..0000000 --- a/Assignment2/cmake-build-debug/CMakeFiles/TargetDirectories.txt +++ /dev/null @@ -1,5 +0,0 @@ -/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles/ClangFormatCOMMAND.dir -/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles/rebuild_cache.dir -/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles/edit_cache.dir -/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles/RandDistributions.dir -/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles/hw.dir diff --git a/Assignment2/cmake-build-debug/CMakeFiles/clion-log.txt b/Assignment2/cmake-build-debug/CMakeFiles/clion-log.txt deleted file mode 100644 index 2086d5b..0000000 --- a/Assignment2/cmake-build-debug/CMakeFiles/clion-log.txt +++ /dev/null @@ -1,12 +0,0 @@ -/Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /Users/bradybodily/Repositories/CS3460/Assignment2.cpp -CMake Error at CMakeLists.txt:30 (add_dependencies): - Cannot add target-level dependencies to non-existent target "Assignment2". - - The add_dependencies works for top-level logical targets created by the - add_executable, add_library, or add_custom_target commands. If you want to - add file-level dependencies see the DEPENDS option of the add_custom_target - and add_custom_command commands. - - --- Configuring incomplete, errors occurred! -See also "/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles/CMakeOutput.log". diff --git a/Assignment2/cmake-build-debug/CMakeFiles/progress.marks b/Assignment2/cmake-build-debug/CMakeFiles/progress.marks deleted file mode 100644 index b8626c4..0000000 --- a/Assignment2/cmake-build-debug/CMakeFiles/progress.marks +++ /dev/null @@ -1 +0,0 @@ -4 diff --git a/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/Assignment2.cpp.o b/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/Assignment2.cpp.o deleted file mode 100644 index dbf0723..0000000 Binary files a/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/Assignment2.cpp.o and /dev/null differ diff --git a/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/build.make b/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/build.make deleted file mode 100644 index 9d58f09..0000000 --- a/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/build.make +++ /dev/null @@ -1,98 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.14 - -# Delete rule output on recipe failure. -.DELETE_ON_ERROR: - - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake - -# The command to remove a file. -RM = /Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /Users/bradybodily/Repositories/CS3460/Assignment2.cpp - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug - -# Include any dependencies generated for this target. -include CMakeFiles/untitled.dir/depend.make - -# Include the progress variables for this target. -include CMakeFiles/untitled.dir/progress.make - -# Include the compile flags for this target's objects. -include CMakeFiles/untitled.dir/flags.make - -CMakeFiles/untitled.dir/Assignment2.cpp.o: CMakeFiles/untitled.dir/flags.make -CMakeFiles/untitled.dir/Assignment2.cpp.o: ../Assignment2.cpp - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/untitled.dir/Assignment2.cpp.o" - /Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/untitled.dir/Assignment2.cpp.o -c /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/Assignment2.cpp - -CMakeFiles/untitled.dir/Assignment2.cpp.i: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/untitled.dir/Assignment2.cpp.i" - /Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/Assignment2.cpp > CMakeFiles/untitled.dir/Assignment2.cpp.i - -CMakeFiles/untitled.dir/Assignment2.cpp.s: cmake_force - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/untitled.dir/Assignment2.cpp.s" - /Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/Assignment2.cpp -o CMakeFiles/untitled.dir/Assignment2.cpp.s - -# Object files for target untitled -untitled_OBJECTS = \ -"CMakeFiles/untitled.dir/Assignment2.cpp.o" - -# External object files for target untitled -untitled_EXTERNAL_OBJECTS = - -untitled: CMakeFiles/untitled.dir/Assignment2.cpp.o -untitled: CMakeFiles/untitled.dir/build.make -untitled: CMakeFiles/untitled.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable untitled" - $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/untitled.dir/link.txt --verbose=$(VERBOSE) - -# Rule to build all files generated by this target. -CMakeFiles/untitled.dir/build: untitled - -.PHONY : CMakeFiles/untitled.dir/build - -CMakeFiles/untitled.dir/clean: - $(CMAKE_COMMAND) -P CMakeFiles/untitled.dir/cmake_clean.cmake -.PHONY : CMakeFiles/untitled.dir/clean - -CMakeFiles/untitled.dir/depend: - cd /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /Users/bradybodily/Repositories/CS3460/Assignment2.cpp /Users/bradybodily/Repositories/CS3460/Assignment2.cpp /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/cmake-build-debug/CMakeFiles/untitled.dir/DependInfo.cmake --color=$(COLOR) -.PHONY : CMakeFiles/untitled.dir/depend - diff --git a/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/cmake_clean.cmake b/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/cmake_clean.cmake deleted file mode 100644 index 9658723..0000000 --- a/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/cmake_clean.cmake +++ /dev/null @@ -1,10 +0,0 @@ -file(REMOVE_RECURSE - "CMakeFiles/untitled.dir/Assignment2.cpp.o" - "untitled.pdb" - "untitled" -) - -# Per-language clean rules from dependency scanning. -foreach(lang CXX) - include(CMakeFiles/untitled.dir/cmake_clean_${lang}.cmake OPTIONAL) -endforeach() diff --git a/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/depend.internal b/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/depend.internal deleted file mode 100644 index 640bbcd..0000000 --- a/Assignment2/cmake-build-debug/CMakeFiles/untitled.dir/depend.internal +++ /dev/null @@ -1,5 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.14 - -CMakeFiles/untitled.dir/Assignment2.cpp.o - /Users/bradybodily/Repositories/CS3460/Assignment2.cpp/Assignment2.cpp diff --git a/Assignment2/cmake-build-debug/untitled b/Assignment2/cmake-build-debug/untitled deleted file mode 100755 index bd6a797..0000000 Binary files a/Assignment2/cmake-build-debug/untitled and /dev/null differ diff --git a/Hw2/Assignment2.cpp b/Hw2/Assignment2.cpp index fd74868..a17bb4a 100644 --- a/Hw2/Assignment2.cpp +++ b/Hw2/Assignment2.cpp @@ -1,279 +1,151 @@ -#include -#include -#include -#include -#include - -// -// If the default clang follows the the one true brace style is that not -// obviously the better brace style??? -// -class DistributionPair -{ - public: - DistributionPair(std::uint32_t minValue, std::uint32_t maxValue) : - minValue(minValue), maxValue(maxValue), count(0) {} - - std::uint32_t minValue; - std::uint32_t maxValue; - std::uint32_t count; -}; - -std::vector -generateUniformDistribution(std::uint32_t howMany, std::uint32_t min, - std::uint32_t max, std::uint8_t numberBins); -std::vector -generateNormalDistribution(std::uint32_t howMany, float mean, float stdev, - std::uint8_t numberBins); -std::vector -generatePoissonDistribution(std::uint32_t howMany, std::uint8_t howOften, - std::uint8_t numberBins); -void plotDistribution(std::string title, - const std::vector& distribution, - const std::uint8_t maxPlotLineSize); -std::vector createBins(int min, int max, int binCount); - -std::random_device randomDevice; -std::default_random_engine randomEngine(randomDevice()); - - - - - - -// ------------------------------------------------------------------ -// -// Testing Code -// -// ------------------------------------------------------------------ -#include -#include -#include -#include - -namespace testing::detail -{ -using namespace std::string_literals; - -using Bins = std::vector>; -using DistFunc = std::function()>; - -#define CS3460_ASSERT_EQ(expected, actual, message) \ - if (expected != actual) \ - { \ - fail(message, "[ Expected", expected, "but got", actual, "]"); \ - return; \ - } - -#define CS3460_CASE(x) \ - [] { return x; }; \ - std::cout << " Case " << #x << "\n"; - -template -void failInternal(const Message& message) -{ - std::cout << message << " "; -} - -template -void failInternal(const Message& message, const Messages&... messages) -{ - failInternal(message); - failInternal(messages...); -} - -template -void fail(const Messages&... messages) -{ - std::cout << " Assertion failed: "; - failInternal(messages...); - std::cout << "\n"; -} - -Bins generateBins(const std::uint32_t min, const std::uint32_t max, const std::uint8_t numberBins) -{ - const auto binRange = (max - min) / numberBins; - auto minBin = min; - auto maxBin = min + binRange; - - Bins results(numberBins); - for (std::uint8_t bin = 0u; bin < numberBins; bin++) - { - results[bin] = {minBin, maxBin}; - minBin = maxBin + 1; - maxBin = minBin + binRange; - } - - return results; -} - -void returnsTheExpectedBins(const DistFunc& func, const Bins& bins) -{ - const auto result = func(); - CS3460_ASSERT_EQ(bins.size(), result.size(), "Wrong number of bins"); - for (auto i = 0u; i < bins.size(); i++) - { - CS3460_ASSERT_EQ(bins[i].first, result[i].minValue, "Wrong minimum value for bin "s + std::to_string(i)); - CS3460_ASSERT_EQ(bins[i].second, result[i].maxValue, "Wrong maximum value for bin "s + std::to_string(i)); - } -} - -void hasTheCorrectTotalAcrossAllBins(const DistFunc& func, const std::uint32_t howMany) -{ - const auto result = func(); - const auto add_counts = [](std::uint32_t total, const DistributionPair& bin) { return total + bin.count; }; - CS3460_ASSERT_EQ(howMany, std::accumulate(result.cbegin(), result.cend(), 0u, add_counts), - "Wrong number of elements across all bins"); -} - -void testUniformDistribution() -{ - std::cout << "Testing generateUniformDistribution\n"; - auto func = CS3460_CASE(generateUniformDistribution(100000, 0, 79, 40)); - returnsTheExpectedBins(func, generateBins(0, 79, 40)); - hasTheCorrectTotalAcrossAllBins(func, 100000); -} - -void testNormalDistribution() -{ - std::cout << "Testing generateNormalDistribution\n"; - auto func = CS3460_CASE(generateNormalDistribution(100000, 50, 5, 40)); - returnsTheExpectedBins(func, generateBins(30, 69, 40)); - hasTheCorrectTotalAcrossAllBins(func, 100000); -} - -void testPoissonDistribution() -{ - std::cout << "Testing generatePoissonDistribution\n"; - auto func = CS3460_CASE(generatePoissonDistribution(100000, 6, 40)); - returnsTheExpectedBins(func, generateBins(0, 39, 40)); - hasTheCorrectTotalAcrossAllBins(func, 100000); -} -} // namespace testing::detail - -void test() -{ - using namespace testing::detail; - - testUniformDistribution(); - testNormalDistribution(); - testPoissonDistribution(); - - std::cout << "\n\n"; -} - -int main() -{ - auto uniform = generateUniformDistribution(100000, 0, 79, 40); - plotDistribution("--- Uniform ---", uniform, 80); - - auto normal = generateNormalDistribution(100000, 50, 5, 40); - plotDistribution("--- Normal ---", normal, 80); - - auto poisson = generatePoissonDistribution(100000, 6, 40); - plotDistribution("--- Poisson ---", poisson, 80); - - test(); - return 0; -} - -std::vector -generateUniformDistribution(std::uint32_t howMany, std::uint32_t min, - std::uint32_t max, std::uint8_t numberBins) -{ - std::uniform_int_distribution distribution(min, max); - auto bins = createBins(min, max, numberBins); - for (int i = 0; i < static_cast(howMany); i++) - { - float number = distribution(randomEngine); - - for(int i = 0; i <= numberBins; i++) - { - if(bins[i].maxValue >= number && bins[i].minValue <= number) - bins[i].count++; - } - } - return bins; -} - -std::vector -generateNormalDistribution(std::uint32_t howMany, float mean, float stdev, - std::uint8_t numberBins) -{ - int min = static_cast(mean - (4 * stdev)); - int max = static_cast(mean + (4 * stdev) - 1); - std::normal_distribution distribution(mean, stdev); - auto bins = createBins(min, max, numberBins); - - for (int i = 0; i < static_cast(howMany); i++) - { - double number = distribution(randomEngine); - int position = - static_cast(number - min / ((max - min) / float(numberBins))); - if (position > numberBins - 1) - bins[numberBins - 1].count++; - else if (position < 0) - bins[0].count++; - else - bins[position].count++; - } - return bins; -} -std::vector -generatePoissonDistribution(std::uint32_t howMany, std::uint8_t howOften, - std::uint8_t numberBins) -{ - std::poisson_distribution distribution(howOften); - int min = 0; - int max = numberBins - 1; - auto bins = createBins(min, max, numberBins); - for (int i = 0; i < static_cast(howMany); i++) - { - int number = distribution(randomEngine); - if (number > numberBins - 1) - bins[numberBins - 1].count++; - else if (number < 0) - bins[0].count++; - else - bins[number].count++; - } - return bins; -} - -std::vector createBins(int min, int max, int binCount) -{ - std::vector myVector; - int difference = static_cast(float(max - min + 1) / binCount); - for (int i = 0; i < binCount; i++) - { - DistributionPair dpair((min + i) * difference, - (min + i) * difference + difference - 1); - myVector.push_back(dpair); - } - return myVector; -} - -void plotDistribution(std::string title, - const std::vector& distribution, - const std::uint8_t maxPlotLineSize) -{ - std::cout << title << std::endl; - auto max = 0; - for (auto currentBin : distribution) - { - if (static_cast(currentBin.count) > static_cast(max)) - max = currentBin.count; - } - for (auto currentBin : distribution) - { - int starCount = - static_cast(currentBin.count / float(max) * maxPlotLineSize); - std::string info = "[ " + std::to_string(currentBin.minValue) + ", " - + std::to_string(currentBin.maxValue) + " ] : "; - std::string starString; - for (int i = 0; i < starCount; i++) - starString += "*"; - std::cout << std::setw(15) << info << starString; - std::cout << std::endl; - } -} +#include +#include +#include +#include +#include + +// +// If the default clang follows the the one true brace style is that not +// obviously the better brace style??? +// +class DistributionPair +{ + public: + DistributionPair(std::uint32_t minValue, std::uint32_t maxValue) : + minValue(minValue), maxValue(maxValue), count(0) {} + + std::uint32_t minValue; + std::uint32_t maxValue; + std::uint32_t count; +}; + +std::vector +generateUniformDistribution(std::uint32_t howMany, std::uint32_t min, + std::uint32_t max, std::uint8_t numberBins); +std::vector +generateNormalDistribution(std::uint32_t howMany, float mean, float stdev, + std::uint8_t numberBins); +std::vector +generatePoissonDistribution(std::uint32_t howMany, std::uint8_t howOften, + std::uint8_t numberBins); +void plotDistribution(std::string title, + const std::vector& distribution, + const std::uint8_t maxPlotLineSize); +std::vector createBins(int min, int max, int binCount); + +std::random_device randomDevice; +std::default_random_engine randomEngine(randomDevice()); + +int main() +{ + auto uniform = generateUniformDistribution(100000, 0, 79, 40); + plotDistribution("--- Uniform ---", uniform, 80); + + auto normal = generateNormalDistribution(100000, 50, 5, 40); + plotDistribution("--- Normal ---", normal, 80); + + auto poisson = generatePoissonDistribution(100000, 6, 40); + plotDistribution("--- Poisson ---", poisson, 80); + + return 0; +} + +std::vector +generateUniformDistribution(std::uint32_t howMany, std::uint32_t min, + std::uint32_t max, std::uint8_t numberBins) +{ + std::uniform_int_distribution distribution(min, max); + auto bins = createBins(min, max, numberBins); + for (int i = 0; i < static_cast(howMany); i++) + { + int number = distribution(randomEngine); + + for (int j = 0; j <= numberBins; j++) + { + if (static_cast(bins[j].maxValue) >= number && static_cast(bins[j].minValue) <= number) + bins[j].count++; + } + } + return bins; +} + +std::vector +generateNormalDistribution(std::uint32_t howMany, float mean, float stdev, + std::uint8_t numberBins) +{ + int min = static_cast(mean - (4 * stdev)); + int max = static_cast(mean + (4 * stdev) - 1); + std::normal_distribution distribution(mean, stdev); + auto bins = createBins(min, max, numberBins); + + for (int i = 0; i < static_cast(howMany); i++) + { + double number = distribution(randomEngine); + int position = + static_cast(number - min / ((max - min) / float(numberBins))); + if (position > numberBins - 1) + bins[numberBins - 1].count++; + else if (position < 0) + bins[0].count++; + else + bins[position].count++; + } + return bins; +} +std::vector +generatePoissonDistribution(std::uint32_t howMany, std::uint8_t howOften, + std::uint8_t numberBins) +{ + std::poisson_distribution distribution(howOften); + int min = 0; + int max = numberBins - 1; + auto bins = createBins(min, max, numberBins); + for (int i = 0; i < static_cast(howMany); i++) + { + int number = distribution(randomEngine); + if (number > numberBins - 1) + bins[numberBins - 1].count++; + else if (number < 0) + bins[0].count++; + else + bins[number].count++; + } + return bins; +} + +std::vector createBins(int min, int max, int binCount) +{ + std::vector myVector; + int difference = static_cast(float(max - min + 1) / binCount); + for (int i = 0; i < binCount; i++) + { + DistributionPair dpair((min + i) * difference, + (min + i) * difference + difference - 1); + myVector.push_back(dpair); + } + return myVector; +} + +void plotDistribution(std::string title, + const std::vector& distribution, + const std::uint8_t maxPlotLineSize) +{ + std::cout << title << std::endl; + auto max = 0; + for (auto currentBin : distribution) + { + if (static_cast(currentBin.count) > static_cast(max)) + max = currentBin.count; + } + for (auto currentBin : distribution) + { + int starCount = + static_cast(currentBin.count / float(max) * maxPlotLineSize); + std::string info = "[ " + std::to_string(currentBin.minValue) + ", " + std::to_string(currentBin.maxValue) + " ] : "; + std::string starString; + for (int i = 0; i < starCount; i++) + starString += "*"; + std::cout << std::setw(15) << info << starString; + std::cout << std::endl; + } +} diff --git a/Hw2/CMakeLists.txt b/Hw2/CMakeLists.txt index 041c218..3032320 100644 --- a/Hw2/CMakeLists.txt +++ b/Hw2/CMakeLists.txt @@ -1,14 +1,31 @@ cmake_minimum_required(VERSION 3.14) project(Assignment2) - set(CMAKE_CXX_STANDARD 17) set(SOURCE_FILES Assignment2.cpp) add_executable(RandDistributions ${SOURCE_FILES}) + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") target_compile_options(RandomDistributions PRIVATE /W4 /permissive-) elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") target_compile_options(RandomDistributions PRIVATE -Wall -Wextra -pedantic) endif() + +find_program(CLANG_FORMAT "clang-format") +if(CLANG_FORMAT) + unset(SOURCE_FILES_PATHS) + foreach(SOURCE_FILE ${SOURCE_FILES}) + get_source_file_property(WHERE ${SOURCE_FILE} LOCATION) + set(SOURCE_FILES_PATHS ${SOURCE_FILES_PATHS} ${WHERE}) + endforeach() + + add_custom_target( + ClangFormat COMMAND + ${CLANG_FORMAT} + -i + -style=file + ${SOURCE_FILES_PATHS}) + add_dependencies(RandDistributions ClangFormat) +endif() diff --git a/Assignment2/_clang-format.txt b/Hw2/_clang-format similarity index 100% rename from Assignment2/_clang-format.txt rename to Hw2/_clang-format diff --git a/Hw2/cmake-build-debug/Assignment2.cbp b/Hw2/cmake-build-debug/Assignment2.cbp index a2ef45c..5ad6e31 100644 --- a/Hw2/cmake-build-debug/Assignment2.cbp +++ b/Hw2/cmake-build-debug/Assignment2.cbp @@ -37,6 +37,16 @@ + +