Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,18 @@ out/
build/
.gradle/
.DS_Store

# C++ build artifacts
**/CMakeCache.txt
**/CMakeFiles/
**/Makefile
**/cmake_install.cmake
**/CTestTestfile.cmake
**/_deps/
**/lib/
**/*.o
**/*.d
**/sample_test_*

# C build artifacts
**/*.a
20 changes: 10 additions & 10 deletions c/src/supermarket.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,34 +76,34 @@ void handle_offers(struct cart_t* cart, struct receipt_t* receipt, struct specia
int x = 1;

if (offer->type == ThreeForTwo) {
x = 3;
x = THREE_FOR_TWO_QUANTITY;
} else if (offer->type == TwoForAmount) {
x = 2;
if (quantityAsInt >= 2) {
double total = offer->argument * (quantityAsInt / x) + quantityAsInt % 2 * unitPrice;
x = TWO_FOR_OFFER_QUANTITY;
if (quantityAsInt >= TWO_FOR_OFFER_QUANTITY) {
double total = offer->argument * (quantityAsInt / x) + quantityAsInt % TWO_FOR_OFFER_QUANTITY * unitPrice;
double discountN = unitPrice * quantity - total;
char description[MAX_NAME_LENGTH];
sprintf(description, "2 for %f", offer->argument);
discount = discount_create(description, -discountN, &product);
}
} if (offer->type == FiveForAmount) {
x = 5;
x = FIVE_FOR_OFFER_QUANTITY;
}
int numberOfXs = quantityAsInt / x;
if (offer->type == ThreeForTwo && quantityAsInt > 2) {
double discountAmount = quantity * unitPrice - ((numberOfXs * 2 * unitPrice) + quantityAsInt % 3 * unitPrice);
if (offer->type == ThreeForTwo && quantityAsInt > TWO_FOR_OFFER_QUANTITY) {
double discountAmount = quantity * unitPrice - ((numberOfXs * TWO_FOR_OFFER_QUANTITY * unitPrice) + quantityAsInt % THREE_FOR_TWO_QUANTITY * unitPrice);
char description[MAX_NAME_LENGTH];
sprintf(description, "3 for 2");
discount = discount_create(description, -discountAmount, &product);
}
if (offer->type == TenPercentDiscount) {
char description[MAX_NAME_LENGTH];
sprintf(description, "%.0f%% off", offer->argument);
discount = discount_create(description, -quantity * unitPrice * offer->argument / 100.0, &product);
discount = discount_create(description, -quantity * unitPrice * offer->argument / PERCENTAGE_DIVISOR, &product);

}
if (offer->type == FiveForAmount && quantityAsInt >= 5) {
double discountTotal = unitPrice * quantity - (offer->argument * numberOfXs + quantityAsInt % 5 * unitPrice);
if (offer->type == FiveForAmount && quantityAsInt >= FIVE_FOR_OFFER_QUANTITY) {
double discountTotal = unitPrice * quantity - (offer->argument * numberOfXs + quantityAsInt % FIVE_FOR_OFFER_QUANTITY * unitPrice);
char description[MAX_NAME_LENGTH];
sprintf(description, "%d for %f", x, offer->argument);
discount = discount_create(description, -discountTotal, &product);
Expand Down
8 changes: 8 additions & 0 deletions c/src/supermarket.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@ enum SpecialOfferType {
#define MAX_NAME_LENGTH 100
#define MAX_PRODUCTS 100

// Special offer quantity constants
#define TWO_FOR_OFFER_QUANTITY 2
#define THREE_FOR_TWO_QUANTITY 3
#define FIVE_FOR_OFFER_QUANTITY 5

// Percentage conversion constant
#define PERCENTAGE_DIVISOR 100.0

struct product_t {
char name[MAX_NAME_LENGTH];
enum unit unit;
Expand Down
16 changes: 16 additions & 0 deletions cpp/src/CMakeFiles/CMakeDirectoryInformation.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.31

# Relative path conversion top directories.
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp")
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp")

# Force unix paths in dependencies.
set(CMAKE_FORCE_UNIX_PATHS 1)


# The C and CXX include file regular expressions for this directory.
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
1 change: 1 addition & 0 deletions cpp/src/CMakeFiles/progress.marks
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
11
32 changes: 32 additions & 0 deletions cpp/src/CMakeFiles/src.dir/DependInfo.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

# Consider dependencies only in project.
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)

# The set of languages for which implicit dependencies are needed:
set(CMAKE_DEPENDS_LANGUAGES
)

# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
"/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/Discount.cpp" "src/CMakeFiles/src.dir/Discount.cpp.o" "gcc" "src/CMakeFiles/src.dir/Discount.cpp.o.d"
"/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/FakeCatalog.cpp" "src/CMakeFiles/src.dir/FakeCatalog.cpp.o" "gcc" "src/CMakeFiles/src.dir/FakeCatalog.cpp.o.d"
"/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/Offer.cpp" "src/CMakeFiles/src.dir/Offer.cpp.o" "gcc" "src/CMakeFiles/src.dir/Offer.cpp.o.d"
"/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/Product.cpp" "src/CMakeFiles/src.dir/Product.cpp.o" "gcc" "src/CMakeFiles/src.dir/Product.cpp.o.d"
"/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/ProductQuantity.cpp" "src/CMakeFiles/src.dir/ProductQuantity.cpp.o" "gcc" "src/CMakeFiles/src.dir/ProductQuantity.cpp.o.d"
"/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/Receipt.cpp" "src/CMakeFiles/src.dir/Receipt.cpp.o" "gcc" "src/CMakeFiles/src.dir/Receipt.cpp.o.d"
"/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/ReceiptItem.cpp" "src/CMakeFiles/src.dir/ReceiptItem.cpp.o" "gcc" "src/CMakeFiles/src.dir/ReceiptItem.cpp.o.d"
"/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/ReceiptPrinter.cpp" "src/CMakeFiles/src.dir/ReceiptPrinter.cpp.o" "gcc" "src/CMakeFiles/src.dir/ReceiptPrinter.cpp.o.d"
"/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/ShoppingCart.cpp" "src/CMakeFiles/src.dir/ShoppingCart.cpp.o" "gcc" "src/CMakeFiles/src.dir/ShoppingCart.cpp.o.d"
"/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/Teller.cpp" "src/CMakeFiles/src.dir/Teller.cpp.o" "gcc" "src/CMakeFiles/src.dir/Teller.cpp.o.d"
)

# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
)

# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
)

# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
Binary file added cpp/src/CMakeFiles/src.dir/Discount.cpp.o
Binary file not shown.
126 changes: 126 additions & 0 deletions cpp/src/CMakeFiles/src.dir/Discount.cpp.o.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
src/CMakeFiles/src.dir/Discount.cpp.o: \
/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/Discount.cpp \
/usr/include/stdc-predef.h \
/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/Discount.h \
/usr/include/c++/13/string /usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/c++/13/type_traits /usr/include/c++/13/compare \
/usr/include/c++/13/concepts /usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/new /usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/move.h \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/stl_iterator.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/refwrap.h /usr/include/c++/13/bits/invoke.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/initializer_list \
/usr/include/c++/13/bits/basic_string.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/c++/13/cerrno /usr/include/errno.h \
/usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
/usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/uses_allocator_args.h /usr/include/c++/13/tuple \
/usr/include/c++/13/bits/ranges_util.h \
/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/Product.h \
/home/runner/work/Refactoring-Kata/Refactoring-Kata/cpp/src/ProductUnit.h
Binary file added cpp/src/CMakeFiles/src.dir/FakeCatalog.cpp.o
Binary file not shown.
Loading