Skip to content
Merged
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
6 changes: 3 additions & 3 deletions .github/workflows/hw2-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
paths:
- 'Homework_2/**'
pull_request:
branches: [main, new_vim]
branches: [main]
paths:
- 'Homework_2/**'

Expand Down Expand Up @@ -53,7 +53,7 @@ jobs:
fi

cd Homework_2
make text-editor -j4
make -j4

- name: Run tests with sanitizers
run: |
Expand All @@ -64,7 +64,7 @@ jobs:
fi

cd Homework_2
make text-editor -j4
make -j4

build-normal:
runs-on: ubuntu-latest
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/hw3-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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: |
Expand Down
19 changes: 12 additions & 7 deletions Homework_3/Makefile
Original file line number Diff line number Diff line change
@@ -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
61 changes: 61 additions & 0 deletions Homework_3/src/bank-system.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#include "bank-system.h"

#include <iostream>
#include <optional>
#include <string>
#include <vector>

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;
}
}
35 changes: 35 additions & 0 deletions Homework_3/src/bank-system.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#ifndef BANK_SYSTEM_H
#define BANK_SYSTEM_H

#include <iostream>
#include <string>
#include <vector>

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<BankAccount> accounts;

public:
void addAccount(const BankAccount& account);
double getTotalBalance() const;
void printAllAccounts() const;
};

#endif
18 changes: 18 additions & 0 deletions Homework_3/src/main.cpp
Original file line number Diff line number Diff line change
@@ -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;
}
110 changes: 110 additions & 0 deletions Homework_3/tests/bank-system-tests.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#include <gtest/gtest.h>

#include <sstream>

#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();
}