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
91 changes: 91 additions & 0 deletions .github/workflows/hw5-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: HW-5 Array template CI

env:
DIR: Homework_5_array_template

on:
push:
paths:
- 'Homework_5_array_template/**'
pull_request:
branches: [main]
paths:
- 'Homework_5_array_template/**'

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_5_array_template -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_5_array_template
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_5_array_template
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_5_array_template
make -j4

- name: Run tests
run: |
cd Homework_5_array_template
make test
Binary file added Homework_2/text-editor
Binary file not shown.
Binary file added Homework_2/text-editor-tests
Binary file not shown.
Binary file added Homework_3/bank-system
Binary file not shown.
Binary file added Homework_4/str-op
Binary file not shown.
20 changes: 20 additions & 0 deletions Homework_5_array_template/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
CXX ?= g++-14
CXXFLAGS ?= -O2
LDFLAGS ?=

all: array-template

rebuild: clean all

array-template: array-template.cpp
$(CXX) $(CXXFLAGS) -o array-template array-template.cpp

test: array-template
./array-template

clean:
rm array-template

rebuild: clean all

.PHONY: all test clean
80 changes: 80 additions & 0 deletions Homework_5_array_template/array-template.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#include <algorithm>
#include <iostream>

template <class T, size_t size>
class Array {
T array[size];

public:
Array(){};

Array(T* b) {
for (size_t i = 0; i < size; ++i) {
array[i] = b[i];
}
}

void show() {
for (size_t i = 0; i < size; ++i) {
std::cout << array[i] << " ";
}
std::cout << std::endl;
}

T minimum() {
T min_val = array[0];
for (size_t i = 1; i < size; ++i) {
if (array[i] < min_val) {
min_val = array[i];
}
}
return min_val;
}

T minimum(Array<T, size>& m) {
T min_val = m.array[0];
for (size_t i = 1; i < size; ++i) {
if (m.array[i] < min_val) {
min_val = m.array[i];
}
}
return min_val;
}

T& operator[](size_t index) {
if (index >= size) {
throw std::out_of_range("Index out of range");
}
return array[index];
}

size_t getSize() const { return size; }
};

int main() {
int data1[] = {5, 2, 8, 1, 9};
Array<int, 5> arr1(data1);

std::cout << "Array 1: ";
arr1.show();
std::cout << "Minimum in array 1: " << arr1.minimum() << std::endl;

double data2[] = {3.14, 2.71, 1.41, 1.73};
Array<double, 4> arr2(data2);

std::cout << "\nArray 2: ";
arr2.show();
std::cout << "Minimum in array 2: " << arr2.minimum() << std::endl;

int data3[] = {10, 3, 7, 4, 6};
Array<int, 5> arr3(data3);

std::cout << "\nArray 3: ";
arr3.show();
std::cout << "Minimum in array 3 (using overloaded method): "
<< arr1.minimum(arr3) << std::endl;

std::cout << "\nElement at index 2 of array 1: " << arr1[2] << std::endl;

return 0;
}