From 354e7c8ccb9e7622d6cf5ceeb0f500e44c27253e Mon Sep 17 00:00:00 2001 From: Korsakov Vladislav Date: Tue, 7 Oct 2025 15:54:45 +0300 Subject: [PATCH 1/7] HW-3 --- .github/workflows/hw3-ci.yml | 92 ++++++++++++++++++++++++++++++++++++ .gitignore | 3 +- Homework_3/Makefile | 19 ++++++++ Homework_3/bank-system.cpp | 84 ++++++++++++++++++++++++++++++++ 4 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/hw3-ci.yml create mode 100644 Homework_3/Makefile create mode 100644 Homework_3/bank-system.cpp diff --git a/.github/workflows/hw3-ci.yml b/.github/workflows/hw3-ci.yml new file mode 100644 index 0000000..d2fae28 --- /dev/null +++ b/.github/workflows/hw3-ci.yml @@ -0,0 +1,92 @@ +name: HW-3 Bank System CI + +on: + push: + paths: + - 'Homework_3/**' + pull_request: + branches: [main] + paths: + - 'Homework_3/**' + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install clang-format + run: sudo apt-get update && sudo apt-get install -y clang-format + + - name: Check Google Style + run: find ./Homework_3 -name '*.cpp' -o -name '*.h' -o -name '*.hpp' | xargs clang-format --dry-run --Werror + + build: + runs-on: ubuntu-latest + strategy: + matrix: + sanitizer: [none, address, undefined] + exclude: + - sanitizer: none + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + build-essential \ + clang \ + - name: Build with sanitizers + run: | + if [ "${{ matrix.sanitizer }}" = "address" ]; then + export CXX="clang++" + export CXXFLAGS="-fsanitize=address -fno-omit-frame-pointer -g" + export LDFLAGS="-fsanitize=address" + elif [ "${{ matrix.sanitizer }}" = "undefined" ]; then + export CXX="clang++" + export CXXFLAGS="-fsanitize=undefined -fno-omit-frame-pointer -g" + export LDFLAGS="-fsanitize=undefined" + fi + + cd Homework_3 + make -j4 + + - name: Run tests with sanitizers + run: | + if [ "${{ matrix.sanitizer }}" = "address" ]; then + export ASAN_OPTIONS=detect_leaks=1:halt_on_error=1 + elif [ "${{ matrix.sanitizer }}" = "undefined" ]; then + export UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 + fi + + cd Homework_3 + make -j4 + + build-normal: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y build-essential g++-14 + + - name: Build + run: | + cd Homework_3 + make -j4 + + - name: Run tests + run: | + cd Homework_3 + make test + + + + diff --git a/.gitignore b/.gitignore index dfb3d8f..494f05e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ Homework_1/output.txt Homework_1/rpn-eval - +Homework_3/bank-system +Homework_4/str-op diff --git a/Homework_3/Makefile b/Homework_3/Makefile new file mode 100644 index 0000000..e33e1bf --- /dev/null +++ b/Homework_3/Makefile @@ -0,0 +1,19 @@ + +CXX ?= g++-14 +CXXFLAGS ?= -O2 +LDFLAGS ?= + +all: bank-system + +rebuild: clean all + +bank-system: bank-system.cpp + $(CXX) $(CXXFLAGS) -o bank-system bank-system.cpp + +clean: + rm bank-system + +test: bank-system + ./bank-system + +.PHONY: all test clean diff --git a/Homework_3/bank-system.cpp b/Homework_3/bank-system.cpp new file mode 100644 index 0000000..2ef312a --- /dev/null +++ b/Homework_3/bank-system.cpp @@ -0,0 +1,84 @@ +#include +#include +#include +#include + +using std::string; + +class BankAccount{ + private: + string accountNumber; + double balance; + string accountHolder; + + public: + BankAccount(string accountNumber, double balance,string accountHolder) : + accountNumber(accountNumber), balance(balance), accountHolder(accountHolder){} + + void deposit(double amount){ + balance += amount; + } + void withdraw(double amount){ + if(balance >= amount){ + balance -= amount; + } + else {std::cout << "Insufficient funds" << std::endl;} + } + double getBalance() const { + return balance; + } + string getAccountHolder() const { + return accountHolder; + } + string getAccountNumber() const { + return accountNumber; + } + void printAccountinfo() const { + std::cout << "Account:" << getAccountHolder() << std::endl; + std::cout << "ID:" << getAccountNumber() << std::endl; + std::cout << "Balance:" << getBalance() << std::endl; + } +}; +class Bank { +private: + std::vector accounts; + +public: + void addAccount(const BankAccount& account) { + accounts.push_back(account); + } + + double getTotalBalance() const { + double total = 0.0; + for (const auto& acc : accounts) { + total += acc.getBalance(); + } + return total; + } + + void printAllAccounts() const { + for (const auto& acc : accounts) { + acc.printAccountinfo(); + std::cout << "-----------------" << std::endl; + } + } +}; + +int main(){ + BankAccount vasya ("123", 0, "vasya"); + BankAccount petya("001", 1000, "petya"); + + vasya.deposit(500); + petya.withdraw(100); + petya.withdraw(1000); + + Bank bank; + bank.addAccount(vasya); + bank.addAccount(petya); + std::cout << bank.getTotalBalance() << std::endl; + bank.printAllAccounts(); + + return 0; +} + + From e6d7611e8f89602299f7b7d6742195d948c6cc69 Mon Sep 17 00:00:00 2001 From: Korsakov Vladislav Date: Tue, 7 Oct 2025 16:11:58 +0300 Subject: [PATCH 2/7] HW-4 --- .github/workflows/hw4-ci.yml | 92 ++++++++++++++++++++++++++++++++++++ Homework_4/Makefile | 20 ++++++++ Homework_4/str-op.cpp | 44 +++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 .github/workflows/hw4-ci.yml create mode 100644 Homework_4/Makefile create mode 100644 Homework_4/str-op.cpp diff --git a/.github/workflows/hw4-ci.yml b/.github/workflows/hw4-ci.yml new file mode 100644 index 0000000..9d11113 --- /dev/null +++ b/.github/workflows/hw4-ci.yml @@ -0,0 +1,92 @@ +name: HW-4 String operator CI + +on: + push: + paths: + - 'Homework_4/**' + pull_request: + branches: [main] + paths: + - 'Homework_4/**' + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install clang-format + run: sudo apt-get update && sudo apt-get install -y clang-format + + - name: Check Google Style + run: find ./Homework_4 -name '*.cpp' -o -name '*.h' -o -name '*.hpp' | xargs clang-format --dry-run --Werror + + build: + runs-on: ubuntu-latest + strategy: + matrix: + sanitizer: [none, address, undefined] + exclude: + - sanitizer: none + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + build-essential \ + clang \ + - name: Build with sanitizers + run: | + if [ "${{ matrix.sanitizer }}" = "address" ]; then + export CXX="clang++" + export CXXFLAGS="-fsanitize=address -fno-omit-frame-pointer -g" + export LDFLAGS="-fsanitize=address" + elif [ "${{ matrix.sanitizer }}" = "undefined" ]; then + export CXX="clang++" + export CXXFLAGS="-fsanitize=undefined -fno-omit-frame-pointer -g" + export LDFLAGS="-fsanitize=undefined" + fi + + cd Homework_4 + make -j4 + + - name: Run tests with sanitizers + run: | + if [ "${{ matrix.sanitizer }}" = "address" ]; then + export ASAN_OPTIONS=detect_leaks=1:halt_on_error=1 + elif [ "${{ matrix.sanitizer }}" = "undefined" ]; then + export UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 + fi + + cd Homework_4 + make -j4 + + build-normal: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y build-essential g++-14 + + - name: Build + run: | + cd Homework_4 + make -j4 + + - name: Run tests + run: | + cd Homework_4 + make test + + + + diff --git a/Homework_4/Makefile b/Homework_4/Makefile new file mode 100644 index 0000000..8febca4 --- /dev/null +++ b/Homework_4/Makefile @@ -0,0 +1,20 @@ + +CXX ?= g++-14 +CXXFLAGS ?= -O2 +LDFLAGS ?= +MYPROGRAM = str-op + +all: $(MYPROGRAM) + +rebuild: clean all + +$(MYPROGRAM): $(MYPROGRAM).cpp + $(CXX) $(CXXFLAGS) -o $(MYPROGRAM) $(MYPROGRAM).cpp + +clean: + rm $(MYPROGRAM) + +test: $(MYPROGRAM) + ./$(MYPROGRAM) + +.PHONY: all test clean diff --git a/Homework_4/str-op.cpp b/Homework_4/str-op.cpp new file mode 100644 index 0000000..aef5abf --- /dev/null +++ b/Homework_4/str-op.cpp @@ -0,0 +1,44 @@ +#include +#include + +using std::string; + +class String { + string str; + public: + String(const string& str):str(str){} + + class StrProxy { + const String& parent; + size_t start; + public: + StrProxy(const String& s, size_t i): parent(s), start(i){} + + String operator[](size_t end) const { + size_t len = end - start; + string substr = parent.str.substr(start, len); + return String(substr); + } + + + }; + + StrProxy operator[](size_t start) const { + return StrProxy(*this, start); + } + const string& get() const {return str;} + +}; + +int main(){ + String string("hello"); + std::cout << "hello\n"; + String substr = string[1][4]; + std::cout << "substr 'ell':"<< substr.get() << "\n"; + String str = string[1][2]; + std::cout << "a char:"<< str.get() << "\n"; + String empty = string[1][1]; + std::cout << "empty:" << empty.get() << "\n"; + + +} From be160e3288796da042cdd3ae7f25fc5ac5ba386b Mon Sep 17 00:00:00 2001 From: Korsakov Vladislav Date: Tue, 7 Oct 2025 17:07:51 +0300 Subject: [PATCH 3/7] google style --- Homework_3/bank-system.cpp | 121 +++++++++++++++++-------------------- Homework_4/str-op.cpp | 63 +++++++++---------- 2 files changed, 85 insertions(+), 99 deletions(-) diff --git a/Homework_3/bank-system.cpp b/Homework_3/bank-system.cpp index 2ef312a..affdf9f 100644 --- a/Homework_3/bank-system.cpp +++ b/Homework_3/bank-system.cpp @@ -1,84 +1,75 @@ #include +#include #include #include -#include using std::string; -class BankAccount{ - private: - string accountNumber; - double balance; - string accountHolder; +class BankAccount { + private: + string accountNumber; + double balance; + string accountHolder; - public: - BankAccount(string accountNumber, double balance,string accountHolder) : - accountNumber(accountNumber), balance(balance), accountHolder(accountHolder){} + public: + BankAccount(string accountNumber, double balance, string accountHolder) + : accountNumber(accountNumber), + balance(balance), + accountHolder(accountHolder) {} - void deposit(double amount){ - balance += amount; - } - void withdraw(double amount){ - if(balance >= amount){ - balance -= amount; - } - else {std::cout << "Insufficient funds" << std::endl;} - } - double getBalance() const { - return balance; - } - string getAccountHolder() const { - return accountHolder; - } - string getAccountNumber() const { - return accountNumber; - } - void printAccountinfo() const { - std::cout << "Account:" << getAccountHolder() << std::endl; - std::cout << "ID:" << getAccountNumber() << std::endl; - std::cout << "Balance:" << getBalance() << std::endl; - } + void deposit(double amount) { balance += amount; } + void withdraw(double amount) { + if (balance >= amount) { + balance -= amount; + } else { + std::cout << "Insufficient funds" << std::endl; + } + } + double getBalance() const { return balance; } + string getAccountHolder() const { return accountHolder; } + string getAccountNumber() const { return accountNumber; } + void printAccountinfo() const { + std::cout << "Account:" << getAccountHolder() << std::endl; + std::cout << "ID:" << getAccountNumber() << std::endl; + std::cout << "Balance:" << getBalance() << std::endl; + } }; class Bank { -private: - std::vector accounts; + private: + std::vector accounts; -public: - void addAccount(const BankAccount& account) { - accounts.push_back(account); - } + public: + void addAccount(const BankAccount& account) { accounts.push_back(account); } - double getTotalBalance() const { - double total = 0.0; - for (const auto& acc : accounts) { - total += acc.getBalance(); - } - return total; + double getTotalBalance() const { + double total = 0.0; + for (const auto& acc : accounts) { + total += acc.getBalance(); } + return total; + } - void printAllAccounts() const { - for (const auto& acc : accounts) { - acc.printAccountinfo(); - std::cout << "-----------------" << std::endl; - } + void printAllAccounts() const { + for (const auto& acc : accounts) { + acc.printAccountinfo(); + std::cout << "-----------------" << std::endl; } + } }; -int main(){ - BankAccount vasya ("123", 0, "vasya"); - BankAccount petya("001", 1000, "petya"); - - vasya.deposit(500); - petya.withdraw(100); - petya.withdraw(1000); - - Bank bank; - bank.addAccount(vasya); - bank.addAccount(petya); - std::cout << bank.getTotalBalance() << std::endl; - bank.printAllAccounts(); +int main() { + BankAccount vasya("123", 0, "vasya"); + BankAccount petya("001", 1000, "petya"); - return 0; -} - + vasya.deposit(500); + petya.withdraw(100); + petya.withdraw(1000); + + Bank bank; + bank.addAccount(vasya); + bank.addAccount(petya); + std::cout << bank.getTotalBalance() << std::endl; + bank.printAllAccounts(); + return 0; +} diff --git a/Homework_4/str-op.cpp b/Homework_4/str-op.cpp index aef5abf..2ad7581 100644 --- a/Homework_4/str-op.cpp +++ b/Homework_4/str-op.cpp @@ -4,41 +4,36 @@ using std::string; class String { - string str; - public: - String(const string& str):str(str){} - - class StrProxy { - const String& parent; - size_t start; - public: - StrProxy(const String& s, size_t i): parent(s), start(i){} - - String operator[](size_t end) const { - size_t len = end - start; - string substr = parent.str.substr(start, len); - return String(substr); - } - - - }; - - StrProxy operator[](size_t start) const { - return StrProxy(*this, start); - } - const string& get() const {return str;} + string str; -}; + public: + String(const string& str) : str(str) {} + + class StrProxy { + const String& parent; + size_t start; + + public: + StrProxy(const String& s, size_t i) : parent(s), start(i) {} -int main(){ - String string("hello"); - std::cout << "hello\n"; - String substr = string[1][4]; - std::cout << "substr 'ell':"<< substr.get() << "\n"; - String str = string[1][2]; - std::cout << "a char:"<< str.get() << "\n"; - String empty = string[1][1]; - std::cout << "empty:" << empty.get() << "\n"; - + String operator[](size_t end) const { + size_t len = end - start; + string substr = parent.str.substr(start, len); + return String(substr); + } + }; + + StrProxy operator[](size_t start) const { return StrProxy(*this, start); } + const string& get() const { return str; } +}; +int main() { + String string("hello"); + std::cout << "hello\n"; + String substr = string[1][4]; + std::cout << "substr 'ell':" << substr.get() << "\n"; + String str = string[1][2]; + std::cout << "a char:" << str.get() << "\n"; + String empty = string[1][1]; + std::cout << "empty:" << empty.get() << "\n"; } From b5291bc0b3e75b616d856a1aaba29fe711c07583 Mon Sep 17 00:00:00 2001 From: Korsakov Vladislav Date: Mon, 15 Dec 2025 20:32:07 +0300 Subject: [PATCH 4/7] tests --- Homework_3/Makefile | 19 +++-- Homework_3/src/bank-system.cpp | 61 ++++++++++++++ Homework_3/src/bank-system.h | 34 ++++++++ Homework_3/src/main.cpp | 18 +++++ Homework_3/tests/bank-system-tests.cpp | 107 +++++++++++++++++++++++++ 5 files changed, 232 insertions(+), 7 deletions(-) create mode 100644 Homework_3/src/bank-system.cpp create mode 100644 Homework_3/src/bank-system.h create mode 100644 Homework_3/src/main.cpp create mode 100644 Homework_3/tests/bank-system-tests.cpp diff --git a/Homework_3/Makefile b/Homework_3/Makefile index e33e1bf..14e5b0b 100644 --- a/Homework_3/Makefile +++ b/Homework_3/Makefile @@ -1,19 +1,24 @@ CXX ?= g++-14 -CXXFLAGS ?= -O2 -LDFLAGS ?= +CXXFLAGS ?= -O2 -I./src +LDFLAGS ?= -lgtest -lgtest_main -pthread all: bank-system rebuild: clean all -bank-system: bank-system.cpp - $(CXX) $(CXXFLAGS) -o bank-system bank-system.cpp +bank-system: src/bank-system.cpp src/main.cpp + $(CXX) $(CXXFLAGS) -o bank-system src/bank-system.cpp src/main.cpp + +bank-system-tests: tests/bank-system-tests.cpp src/bank-system.cpp + $(CXX) $(CXXFLAGS) -o bank-system-tests src/bank-system.cpp tests/bank-system-tests.cpp $(LDFLAGS) + +test: bank-system-tests + ./bank-system-tests clean: - rm bank-system + rm bank-system bank-system-tests -test: bank-system - ./bank-system +rebuild: clean all .PHONY: all test clean diff --git a/Homework_3/src/bank-system.cpp b/Homework_3/src/bank-system.cpp new file mode 100644 index 0000000..9bc9aff --- /dev/null +++ b/Homework_3/src/bank-system.cpp @@ -0,0 +1,61 @@ +#include "bank-system.h" + +#include +#include +#include +#include + +BankAccount::BankAccount(std::string accountNumber, double balance, + std::string accountHolder) + : accountNumber(accountNumber), + balance(balance), + accountHolder(accountHolder) {} + +void BankAccount::deposit(double amount) { + balance += amount; +} + +void BankAccount::withdraw(double amount) { + if (balance >= amount) { + balance -= amount; + } else { + std::cout << "Insufficient funds" << std::endl; + } +} + +double BankAccount::getBalance() const { + return balance; +} + +std::string BankAccount::getAccountHolder() const { + return accountHolder; +} + +std::string BankAccount::getAccountNumber() const { + return accountNumber; +} + +void BankAccount::printAccountinfo() const { + std::cout << "Account:" << getAccountHolder() << std::endl; + std::cout << "ID:" << getAccountNumber() << std::endl; + std::cout << "Balance:" << getBalance() << std::endl; +} + +void Bank::addAccount(const BankAccount& account) { + accounts.push_back(account); +} + +double Bank::getTotalBalance() const { + double total = 0.0; + for (const auto& acc : accounts) { + total += acc.getBalance(); + } + return total; +} + +void Bank::printAllAccounts() const { + for (const auto& acc : accounts) { + acc.printAccountinfo(); + std::cout << "-----------------" << std::endl; + } +} diff --git a/Homework_3/src/bank-system.h b/Homework_3/src/bank-system.h new file mode 100644 index 0000000..889a458 --- /dev/null +++ b/Homework_3/src/bank-system.h @@ -0,0 +1,34 @@ +#ifndef BANK_SYSTEM_H +#define BANK_SYSTEM_H + +#include +#include +#include + +class BankAccount { + private: + std::string accountNumber; + double balance; + std::string accountHolder; + + public: + BankAccount(std::string accountNumber, double balance, std::string accountHolder); + void deposit(double amount); + void withdraw(double amount); + double getBalance() const; + std::string getAccountHolder() const; + std::string getAccountNumber() const; + void printAccountinfo() const; +}; + +class Bank { + private: + std::vector accounts; + + public: + void addAccount(const BankAccount& account); + double getTotalBalance() const; + void printAllAccounts() const; +}; + +#endif diff --git a/Homework_3/src/main.cpp b/Homework_3/src/main.cpp new file mode 100644 index 0000000..51f4bbd --- /dev/null +++ b/Homework_3/src/main.cpp @@ -0,0 +1,18 @@ +#include "bank-system.h" + +int main() { + BankAccount vasya("123", 0, "vasya"); + BankAccount petya("001", 1000, "petya"); + + vasya.deposit(500); + petya.withdraw(100); + petya.withdraw(1000); + + Bank bank; + bank.addAccount(vasya); + bank.addAccount(petya); + std::cout << bank.getTotalBalance() << std::endl; + bank.printAllAccounts(); + + return 0; +} diff --git a/Homework_3/tests/bank-system-tests.cpp b/Homework_3/tests/bank-system-tests.cpp new file mode 100644 index 0000000..f1f439f --- /dev/null +++ b/Homework_3/tests/bank-system-tests.cpp @@ -0,0 +1,107 @@ +#include +#include +#include "bank-system.h" + +TEST(BankAccountTest, CreateAccountAndGetters) { + BankAccount account("12345", 1000.0, "Иван Иванов"); + + EXPECT_EQ(account.getAccountNumber(), "12345"); + EXPECT_EQ(account.getAccountHolder(), "Иван Иванов"); + EXPECT_DOUBLE_EQ(account.getBalance(), 1000.0); +} + +TEST(BankAccountTest, SuccessfulDeposit) { + BankAccount account("123", 500.0, "Вася"); + account.deposit(250.5); + + EXPECT_DOUBLE_EQ(account.getBalance(), 750.5); +} + +TEST(BankAccountTest, SuccessfulWithdrawal) { + BankAccount account("456", 1000.0, "Петя"); + account.withdraw(300.0); + + EXPECT_DOUBLE_EQ(account.getBalance(), 700.0); +} + +TEST(BankAccountTest, InsufficientFundsWithdrawal) { + BankAccount account("789", 100.0, "Маша"); + + std::stringstream buffer; + std::streambuf* old = std::cout.rdbuf(buffer.rdbuf()); + + account.withdraw(200.0); + + std::cout.rdbuf(old); + + EXPECT_DOUBLE_EQ(account.getBalance(), 100.0); + + EXPECT_TRUE(buffer.str().find("Insufficient funds") != std::string::npos); +} + +TEST(BankAccountTest, NegativeAmountOperations) { + BankAccount account("999", 500.0, "Оля"); + + account.deposit(-100.0); + EXPECT_DOUBLE_EQ(account.getBalance(), 400.0); // 500 + (-100) = 400 + + account.withdraw(-50.0); + EXPECT_DOUBLE_EQ(account.getBalance(), 450.0); // 400 - (-50) = 450 +} + +TEST(BankTest, AddAccountsAndTotalBalance) { + Bank bank; + + BankAccount account1("001", 100.0, "Клиент1"); + BankAccount account2("002", 200.0, "Клиент2"); + BankAccount account3("003", 300.0, "Клиент3"); + + bank.addAccount(account1); + bank.addAccount(account2); + bank.addAccount(account3); + + EXPECT_DOUBLE_EQ(bank.getTotalBalance(), 600.0); // 100 + 200 + 300 = 600 +} + +TEST(BankTest, PrintAllAccounts) { + Bank bank; + + BankAccount account1("111", 500.0, "Алексей"); + BankAccount account2("222", 750.5, "Мария"); + + bank.addAccount(account1); + bank.addAccount(account2); + + std::stringstream buffer; + std::streambuf* old = std::cout.rdbuf(buffer.rdbuf()); + + bank.printAllAccounts(); + + std::cout.rdbuf(old); + + std::string output = buffer.str(); + + EXPECT_TRUE(output.find("Алексей") != std::string::npos); + EXPECT_TRUE(output.find("Мария") != std::string::npos); + EXPECT_TRUE(output.find("111") != std::string::npos); + EXPECT_TRUE(output.find("222") != std::string::npos); + EXPECT_TRUE(output.find("500") != std::string::npos); + EXPECT_TRUE(output.find("750.5") != std::string::npos); + EXPECT_TRUE(output.find("-----------------") != std::string::npos); +} + +TEST(BankAccountTest, MultipleOperationsSequence) { + BankAccount account("777", 1000.0, "Сергей"); + + account.deposit(500.0); + account.withdraw(200.0); + account.withdraw(100.0); + account.deposit(300.0); + + EXPECT_DOUBLE_EQ(account.getBalance(), 1500.0); // 1000 + 500 - 200 - 100 + 300 = 1500 +} + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} From b201fb9b34f5b5e92f62d9399dbf38d19275a279 Mon Sep 17 00:00:00 2001 From: Korsakov Vladislav Date: Mon, 15 Dec 2025 20:43:52 +0300 Subject: [PATCH 5/7] Update hw3-ci.yml --- .github/workflows/hw3-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/hw3-ci.yml b/.github/workflows/hw3-ci.yml index d2fae28..5d695d9 100644 --- a/.github/workflows/hw3-ci.yml +++ b/.github/workflows/hw3-ci.yml @@ -76,6 +76,7 @@ jobs: run: | sudo apt-get update sudo apt-get install -y build-essential g++-14 + sudo apt-get install -y libgtest-dev - name: Build run: | From 55aa9ef686d8dffb01996575b6734f314e6111aa Mon Sep 17 00:00:00 2001 From: Korsakov Vladislav Date: Mon, 15 Dec 2025 20:44:28 +0300 Subject: [PATCH 6/7] Google style --- Homework_3/tests/bank-system-tests.cpp | 159 +++++++++++++------------ 1 file changed, 81 insertions(+), 78 deletions(-) diff --git a/Homework_3/tests/bank-system-tests.cpp b/Homework_3/tests/bank-system-tests.cpp index f1f439f..aa2e270 100644 --- a/Homework_3/tests/bank-system-tests.cpp +++ b/Homework_3/tests/bank-system-tests.cpp @@ -1,107 +1,110 @@ #include + #include + #include "bank-system.h" TEST(BankAccountTest, CreateAccountAndGetters) { - BankAccount account("12345", 1000.0, "Иван Иванов"); - - EXPECT_EQ(account.getAccountNumber(), "12345"); - EXPECT_EQ(account.getAccountHolder(), "Иван Иванов"); - EXPECT_DOUBLE_EQ(account.getBalance(), 1000.0); + BankAccount account("12345", 1000.0, "Иван Иванов"); + + EXPECT_EQ(account.getAccountNumber(), "12345"); + EXPECT_EQ(account.getAccountHolder(), "Иван Иванов"); + EXPECT_DOUBLE_EQ(account.getBalance(), 1000.0); } TEST(BankAccountTest, SuccessfulDeposit) { - BankAccount account("123", 500.0, "Вася"); - account.deposit(250.5); - - EXPECT_DOUBLE_EQ(account.getBalance(), 750.5); + BankAccount account("123", 500.0, "Вася"); + account.deposit(250.5); + + EXPECT_DOUBLE_EQ(account.getBalance(), 750.5); } TEST(BankAccountTest, SuccessfulWithdrawal) { - BankAccount account("456", 1000.0, "Петя"); - account.withdraw(300.0); - - EXPECT_DOUBLE_EQ(account.getBalance(), 700.0); + BankAccount account("456", 1000.0, "Петя"); + account.withdraw(300.0); + + EXPECT_DOUBLE_EQ(account.getBalance(), 700.0); } TEST(BankAccountTest, InsufficientFundsWithdrawal) { - BankAccount account("789", 100.0, "Маша"); - - std::stringstream buffer; - std::streambuf* old = std::cout.rdbuf(buffer.rdbuf()); - - account.withdraw(200.0); - - std::cout.rdbuf(old); - - EXPECT_DOUBLE_EQ(account.getBalance(), 100.0); - - EXPECT_TRUE(buffer.str().find("Insufficient funds") != std::string::npos); + BankAccount account("789", 100.0, "Маша"); + + std::stringstream buffer; + std::streambuf* old = std::cout.rdbuf(buffer.rdbuf()); + + account.withdraw(200.0); + + std::cout.rdbuf(old); + + EXPECT_DOUBLE_EQ(account.getBalance(), 100.0); + + EXPECT_TRUE(buffer.str().find("Insufficient funds") != std::string::npos); } TEST(BankAccountTest, NegativeAmountOperations) { - BankAccount account("999", 500.0, "Оля"); - - account.deposit(-100.0); - EXPECT_DOUBLE_EQ(account.getBalance(), 400.0); // 500 + (-100) = 400 - - account.withdraw(-50.0); - EXPECT_DOUBLE_EQ(account.getBalance(), 450.0); // 400 - (-50) = 450 + BankAccount account("999", 500.0, "Оля"); + + account.deposit(-100.0); + EXPECT_DOUBLE_EQ(account.getBalance(), 400.0); // 500 + (-100) = 400 + + account.withdraw(-50.0); + EXPECT_DOUBLE_EQ(account.getBalance(), 450.0); // 400 - (-50) = 450 } TEST(BankTest, AddAccountsAndTotalBalance) { - Bank bank; - - BankAccount account1("001", 100.0, "Клиент1"); - BankAccount account2("002", 200.0, "Клиент2"); - BankAccount account3("003", 300.0, "Клиент3"); - - bank.addAccount(account1); - bank.addAccount(account2); - bank.addAccount(account3); - - EXPECT_DOUBLE_EQ(bank.getTotalBalance(), 600.0); // 100 + 200 + 300 = 600 + Bank bank; + + BankAccount account1("001", 100.0, "Клиент1"); + BankAccount account2("002", 200.0, "Клиент2"); + BankAccount account3("003", 300.0, "Клиент3"); + + bank.addAccount(account1); + bank.addAccount(account2); + bank.addAccount(account3); + + EXPECT_DOUBLE_EQ(bank.getTotalBalance(), 600.0); // 100 + 200 + 300 = 600 } TEST(BankTest, PrintAllAccounts) { - Bank bank; - - BankAccount account1("111", 500.0, "Алексей"); - BankAccount account2("222", 750.5, "Мария"); - - bank.addAccount(account1); - bank.addAccount(account2); - - std::stringstream buffer; - std::streambuf* old = std::cout.rdbuf(buffer.rdbuf()); - - bank.printAllAccounts(); - - std::cout.rdbuf(old); - - std::string output = buffer.str(); - - EXPECT_TRUE(output.find("Алексей") != std::string::npos); - EXPECT_TRUE(output.find("Мария") != std::string::npos); - EXPECT_TRUE(output.find("111") != std::string::npos); - EXPECT_TRUE(output.find("222") != std::string::npos); - EXPECT_TRUE(output.find("500") != std::string::npos); - EXPECT_TRUE(output.find("750.5") != std::string::npos); - EXPECT_TRUE(output.find("-----------------") != std::string::npos); + Bank bank; + + BankAccount account1("111", 500.0, "Алексей"); + BankAccount account2("222", 750.5, "Мария"); + + bank.addAccount(account1); + bank.addAccount(account2); + + std::stringstream buffer; + std::streambuf* old = std::cout.rdbuf(buffer.rdbuf()); + + bank.printAllAccounts(); + + std::cout.rdbuf(old); + + std::string output = buffer.str(); + + EXPECT_TRUE(output.find("Алексей") != std::string::npos); + EXPECT_TRUE(output.find("Мария") != std::string::npos); + EXPECT_TRUE(output.find("111") != std::string::npos); + EXPECT_TRUE(output.find("222") != std::string::npos); + EXPECT_TRUE(output.find("500") != std::string::npos); + EXPECT_TRUE(output.find("750.5") != std::string::npos); + EXPECT_TRUE(output.find("-----------------") != std::string::npos); } TEST(BankAccountTest, MultipleOperationsSequence) { - BankAccount account("777", 1000.0, "Сергей"); - - account.deposit(500.0); - account.withdraw(200.0); - account.withdraw(100.0); - account.deposit(300.0); - - EXPECT_DOUBLE_EQ(account.getBalance(), 1500.0); // 1000 + 500 - 200 - 100 + 300 = 1500 + BankAccount account("777", 1000.0, "Сергей"); + + account.deposit(500.0); + account.withdraw(200.0); + account.withdraw(100.0); + account.deposit(300.0); + + EXPECT_DOUBLE_EQ(account.getBalance(), + 1500.0); // 1000 + 500 - 200 - 100 + 300 = 1500 } -int main(int argc, char **argv) { - testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); } From 60dd5702115e019eb233f30f84dd424361d5def5 Mon Sep 17 00:00:00 2001 From: Korsakov Vladislav Date: Mon, 15 Dec 2025 20:48:03 +0300 Subject: [PATCH 7/7] Google style 2 --- Homework_3/src/bank-system.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Homework_3/src/bank-system.h b/Homework_3/src/bank-system.h index 889a458..0190a42 100644 --- a/Homework_3/src/bank-system.h +++ b/Homework_3/src/bank-system.h @@ -12,7 +12,8 @@ class BankAccount { std::string accountHolder; public: - BankAccount(std::string accountNumber, double balance, std::string accountHolder); + BankAccount(std::string accountNumber, double balance, + std::string accountHolder); void deposit(double amount); void withdraw(double amount); double getBalance() const;