diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..18d3c7c
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,13 @@
+# For more information see:
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[Makefile]
+indent_style = tab
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..6313b56
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto eol=lf
diff --git a/.github/ISSUE_TEMPLATE/BUG.md b/.github/ISSUE_TEMPLATE/BUG.md
new file mode 100644
index 0000000..e1fc7e7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/BUG.md
@@ -0,0 +1,20 @@
+---
+name: '🐛 Bug Report'
+about: 'Report an unexpected problem or unintended behavior.'
+title: '[Bug]'
+labels: 'bug'
+---
+
+
+
+## Steps To Reproduce
+
+1. Step 1
+2. Step 2
+
+## The current behavior
+
+## The expected behavior
diff --git a/.github/ISSUE_TEMPLATE/DOCUMENTATION.md b/.github/ISSUE_TEMPLATE/DOCUMENTATION.md
new file mode 100644
index 0000000..9fc2734
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/DOCUMENTATION.md
@@ -0,0 +1,18 @@
+---
+name: '📜 Documentation'
+about: 'Correct spelling errors, improvements or additions to documentation files (README, CONTRIBUTING...).'
+title: '[Documentation]'
+labels: 'documentation'
+---
+
+
+
+## Documentation
+
+
+
+
+
+
+
+## Proposal
diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md
new file mode 100644
index 0000000..3307418
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md
@@ -0,0 +1,20 @@
+---
+name: '✨ Feature Request'
+about: 'Suggest a new feature idea.'
+title: '[Feature]'
+labels: 'feature request'
+---
+
+
+
+## Description
+
+
+
+## Describe the solution you'd like
+
+
+
+## Describe alternatives you've considered
+
+
diff --git a/.github/ISSUE_TEMPLATE/IMPROVEMENT.md b/.github/ISSUE_TEMPLATE/IMPROVEMENT.md
new file mode 100644
index 0000000..b5bdbb7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/IMPROVEMENT.md
@@ -0,0 +1,20 @@
+---
+name: '🔧 Improvement'
+about: 'Improve structure/format/performance/refactor/tests of the code.'
+title: '[Improvement]'
+labels: 'improvement'
+---
+
+
+
+## Type of Improvement
+
+
+
+
+
+
+
+
+
+## Proposal
diff --git a/.github/ISSUE_TEMPLATE/QUESTION.md b/.github/ISSUE_TEMPLATE/QUESTION.md
new file mode 100644
index 0000000..c18eaa3
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/QUESTION.md
@@ -0,0 +1,8 @@
+---
+name: '🙋 Question'
+about: 'Further information is requested.'
+title: '[Question]'
+labels: 'question'
+---
+
+### Question
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..4d499f7
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,7 @@
+
+
+## What changes this PR introduce?
+
+## List any relevant issue numbers
+
+## Is there anything you'd like reviewers to focus on?
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..3806a2e
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,22 @@
+name: 'CI'
+
+on:
+ push:
+ branches: [develop]
+ pull_request:
+ branches: [master, develop]
+
+jobs:
+ ci:
+ runs-on: 'ubuntu-latest'
+ steps:
+ - uses: 'actions/checkout@v3.0.0'
+
+ - name: 'Install Build Tools'
+ run: 'sudo apt-get install --yes build-essential gcc make clang-format'
+
+ - run: 'make'
+ - run: 'make run'
+ - run: 'make test'
+ - run: 'make lint'
+ - run: 'make clean'
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..2549bf0
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,41 @@
+name: 'Release'
+
+on:
+ push:
+ branches: [master]
+
+jobs:
+ release:
+ runs-on: 'ubuntu-latest'
+ steps:
+ - uses: 'actions/checkout@v3.1.0'
+ with:
+ fetch-depth: 0
+ persist-credentials: false
+
+ - name: 'Import GPG key'
+ uses: 'crazy-max/ghaction-import-gpg@v4'
+ with:
+ gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
+ git_user_signingkey: true
+ git_commit_gpgsign: true
+
+ - name: 'Install Build Tools'
+ run: 'apt-get install --yes build-essential gcc make clang-format'
+
+ - run: 'make set_version'
+
+ - name: 'Use Node.js'
+ uses: 'actions/setup-node@v3.1.0'
+ with:
+ node-version: 'lts/*'
+
+ - name: 'Install Release Tools'
+ run: 'npm install --global semantic-release @semantic-release/git @semantic-release/exec @saithodev/semantic-release-backmerge'
+
+ - name: 'Release'
+ run: 'semantic-release'
+ env:
+ GH_TOKEN: ${{ secrets.GH_TOKEN }}
+ GIT_COMMITTER_NAME: ${{ secrets.GIT_NAME }}
+ GIT_COMMITTER_EMAIL: ${{ secrets.GIT_EMAIL }}
diff --git a/.releaserc.json b/.releaserc.json
new file mode 100644
index 0000000..4b685bd
--- /dev/null
+++ b/.releaserc.json
@@ -0,0 +1,39 @@
+{
+ "branches": ["master"],
+ "plugins": [
+ [
+ "@semantic-release/commit-analyzer",
+ {
+ "preset": "conventionalcommits"
+ }
+ ],
+ [
+ "@semantic-release/release-notes-generator",
+ {
+ "preset": "conventionalcommits"
+ }
+ ],
+ [
+ "@semantic-release/exec",
+ {
+ "prepareCmd": "make set_version",
+ "publishCmd": "./bin/set_version.exe ${nextRelease.version}"
+ }
+ ],
+ [
+ "@semantic-release/git",
+ {
+ "assets": ["version.h"],
+ "message": "chore(release): ${nextRelease.version} [skip ci]"
+ }
+ ],
+ "@semantic-release/github",
+ [
+ "@saithodev/semantic-release-backmerge",
+ {
+ "branches": [{ "from": "master", "to": "develop" }],
+ "backmergeStrategy": "merge"
+ }
+ ]
+ ]
+}
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..7509fe9
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,132 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, religion, or sexual identity
+and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+- Focusing on what is best not just for us as individuals, but for the
+ overall community
+
+Examples of unacceptable behavior include:
+
+- The use of sexualized language or imagery, and sexual attention or
+ advances of any kind
+- Trolling, insulting or derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or email
+ address, without their explicit permission
+- Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the community leaders responsible for enforcement at
+contact@divlo.fr.
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or
+permanent ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.0, available at
+[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
+
+Community Impact Guidelines were inspired by
+[Mozilla's code of conduct enforcement ladder][mozilla coc].
+
+For answers to common questions about this code of conduct, see the FAQ at
+[https://www.contributor-covenant.org/faq][faq]. Translations are available
+at [https://www.contributor-covenant.org/translations][translations].
+
+[homepage]: https://www.contributor-covenant.org
+[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
+[mozilla coc]: https://github.com/mozilla/diversity
+[faq]: https://www.contributor-covenant.org/faq
+[translations]: https://www.contributor-covenant.org/translations
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..0e3e77b
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,46 @@
+# 💡 Contributing
+
+Thanks a lot for your interest in contributing to **libcproject**! 🎉
+
+## Types of contributions
+
+- Reporting a bug.
+- Suggest a new feature idea.
+- Correct spelling errors, improvements or additions to documentation files (README, CONTRIBUTING...).
+- Improve structure/format/performance/refactor/tests of the code.
+
+## Pull Requests
+
+- **Please first discuss** the change you wish to make via [issue](https://github.com/Divlo/libcproject/issues) before making a change. It might avoid a waste of your time.
+
+- Ensure your code respect linting.
+
+- Make sure your **code passes the tests**.
+
+If you're adding new features to **libcproject**, please include tests.
+
+## Commits
+
+The commit message guidelines respect [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional) and [Semantic Versioning](https://semver.org/) for releases.
+
+### Types
+
+Types define which kind of changes you made to the project.
+
+| Types | Description |
+| -------- | ------------------------------------------------------------------------------------------------------------ |
+| feat | A new feature. |
+| fix | A bug fix. |
+| docs | Documentation only changes. |
+| style | Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc). |
+| refactor | A code change that neither fixes a bug nor adds a feature. |
+| perf | A code change that improves performance. |
+| test | Adding missing tests or correcting existing tests. |
+| build | Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm). |
+| ci | Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs). |
+| chore | Other changes that don't modify src or test files. |
+| revert | Reverts a previous commit. |
+
+### Scopes
+
+Scopes define what part of the code changed.
diff --git a/Makefile b/Makefile
index ed2eb4c..1abfd47 100644
--- a/Makefile
+++ b/Makefile
@@ -1,19 +1,21 @@
LIBRARY_NAME = libcproject
CC = gcc
CC_FLAGS = -Wall -Wextra -Wfloat-equal -Wundef -Werror -std=c17 -pedantic -pedantic-errors -I./
-LIB_CC_FLAGS = -L. -l:./build/${LIBRARY_NAME}.a
+LIB = ./build/${LIBRARY_NAME}.a
+LIB_CC_FLAGS = -L. -l:${LIB}
LIB_SOURCES = $(wildcard lib/*.c)
TEST_SOURCES = $(wildcard test/*.c)
HEADER_FILES = $(wildcard lib/*.h) $(wildcard test/*.h) ./${LIBRARY_NAME}.h
MAIN_EXECUTABLE = bin/main.exe
+SET_VERSION_EXECUTABLE = bin/set_version.exe
TEST_EXECUTABLE = bin/test.exe
.PHONY: all
all: ${LIB_SOURCES}
mkdir --parents ./build
${CC} ${CC_FLAGS} -c ${LIB_SOURCES}
- rm --force ./build/${LIBRARY_NAME}.a
- ar -rcs ./build/${LIBRARY_NAME}.a *.o
+ rm --force ${LIB}
+ ar -rcs ${LIB} *.o
rm --recursive --force *.o
.PHONY: run
@@ -22,6 +24,11 @@ run: all ./main.c
${CC} ${CC_FLAGS} -o ${MAIN_EXECUTABLE} ./main.c ${LIB_CC_FLAGS}
./${MAIN_EXECUTABLE} ${ARGS}
+.PHONY: set_version
+set_version: all ./set_version.c
+ mkdir --parents ./bin
+ ${CC} ${CC_FLAGS} -o ${SET_VERSION_EXECUTABLE} ./set_version.c ${LIB_CC_FLAGS}
+
.PHONY: test
test: all ${TEST_SOURCES}
mkdir --parents ./bin
diff --git a/README.md b/README.md
index 74b4a85..856cf16 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,26 @@
-# libcproject
+
libcproject
+
+
+ C static library easier to use than `libc` (C standard library).
+
+
+
+
+
+
+
+
+
+
+
## About
-`libcproject` is a C static library for learning purposes. It tries to implement useful functions/data structures while being easier to use than `libc` (C standard library) as much as possible.
+**libcproject** is a C static library for learning purposes. It tries to implement useful functions/data structures while being easier to use than `libc` (C standard library) as much as possible.
+
+C is a low-level programming language and we often end up reinventing the wheel as the C standard library (`libc`) is quite small and in my humble opinion, not well designed.
+
+**libcproject** solve this by providing common functions or data structures (`dictionary`, `linked_list`, `queue`, `stack`, etc.) we might need in our C projects.
## Prerequisites
@@ -20,6 +38,16 @@ sudo apt-get install build-essential gcc make clang-format
## Usage
+```sh
+make # to compile
+make run # to run main
+make test # to run unit tests
+make lint # to lint the code
+make clean # to clean up
+
+nm ./build/libcproject.a # to see the symbols
+```
+
Steps to create a new C project that uses `libcproject`:
### Step 1: Compile `libcproject`
@@ -70,14 +98,12 @@ int main() {
gcc -o ./main.exe ./main.c -L. -l:./libcproject/build/libcproject.a
```
-## Contributing
+## 💡 Contributing
-```sh
-make # to compile
-make run # to run main
-make test # to run unit tests
-make lint # to lint the code
-make clean # to clean up
+Anyone can help to improve the project, submit a Feature Request, a bug report or even correct a simple spelling mistake.
-nm ./build/libcproject.a # to see the symbols
-```
+The steps to contribute can be found in the [CONTRIBUTING.md](./CONTRIBUTING.md) file.
+
+## 📄 License
+
+[MIT](./LICENSE)
diff --git a/lib/dictionary.c b/lib/dictionary.c
index 7c9cb20..200f640 100644
--- a/lib/dictionary.c
+++ b/lib/dictionary.c
@@ -26,7 +26,7 @@ void dictionary_add(struct dictionary *dictionary, char *key, void *data) {
}
struct dictionary_item *item = NULL;
for (size_t index = 0; index < dictionary->length && item == NULL; index++) {
- if (string_get_is_equal(key, dictionary->items[index]->key)) {
+ if (string_equals(key, dictionary->items[index]->key)) {
item = dictionary->items[index];
}
}
@@ -44,7 +44,7 @@ void dictionary_add(struct dictionary *dictionary, char *key, void *data) {
void dictionary_remove(struct dictionary *dictionary, char *key) {
bool found = false;
for (size_t index = 0; index < dictionary->length && !found; index++) {
- if (string_get_is_equal(key, dictionary->items[index]->key)) {
+ if (string_equals(key, dictionary->items[index]->key)) {
free(dictionary->items[index]);
dictionary->items[index] = dictionary->items[dictionary->length - 1];
dictionary->length--;
@@ -56,7 +56,7 @@ void dictionary_remove(struct dictionary *dictionary, char *key) {
struct dictionary_item *dictionary_get(struct dictionary *dictionary, char *key) {
for (size_t index = 0; index < dictionary->length; index++) {
struct dictionary_item *item = dictionary->items[index];
- if (string_get_is_equal(key, item->key)) {
+ if (string_equals(key, item->key)) {
return item;
}
}
diff --git a/lib/mathematics.c b/lib/mathematics.c
index e19ec9e..98ac7d9 100644
--- a/lib/mathematics.c
+++ b/lib/mathematics.c
@@ -2,7 +2,7 @@
#include
-bool mathematics_get_is_equal(const float number1, const float number2) {
+bool mathematics_equals(const float number1, const float number2) {
return (number1 - number2) < MATHEMATICS_FLOAT_PRECISION;
}
@@ -20,7 +20,7 @@ unsigned long long mathematics_pow(unsigned long long base, unsigned long long e
float mathematics_root(float number, unsigned int nth_root) {
float result = number;
float previous_result = 0;
- while (!mathematics_get_is_equal(result, previous_result)) {
+ while (!mathematics_equals(result, previous_result)) {
result = (((nth_root - 1) * previous_result) + (number / mathematics_pow(result, nth_root - 1))) / nth_root;
previous_result = result;
}
diff --git a/lib/mathematics.h b/lib/mathematics.h
index 51957bd..3e6c05f 100644
--- a/lib/mathematics.h
+++ b/lib/mathematics.h
@@ -5,7 +5,7 @@
#include
-bool mathematics_get_is_equal(const float number1, const float number2);
+bool mathematics_equals(const float number1, const float number2);
unsigned long long mathematics_absolute_value(const long long number);
diff --git a/lib/string.c b/lib/string.c
index 884015a..1d54b7c 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -142,7 +142,7 @@ char* string_reverse(const char* string) {
return result;
}
-bool string_get_is_equal(const char* string1, const char* string2) {
+bool string_equals(const char* string1, const char* string2) {
size_t string1_length = string_get_length(string1);
size_t string2_length = string_get_length(string2);
bool is_equal = string1_length == string2_length;
diff --git a/lib/string.h b/lib/string.h
index a34c669..1dadfb1 100644
--- a/lib/string.h
+++ b/lib/string.h
@@ -102,7 +102,7 @@ char* string_reverse(const char* string);
* @param string2
* @return true if the strings are equals, false otherwise
*/
-bool string_get_is_equal(const char* string1, const char* string2);
+bool string_equals(const char* string1, const char* string2);
/**
* @brief Check if the string is a integer.
diff --git a/set_version.c b/set_version.c
new file mode 100644
index 0000000..5ab8d78
--- /dev/null
+++ b/set_version.c
@@ -0,0 +1,23 @@
+#include
+#include
+
+#include "libcproject.h"
+
+int main(int argc, char* argv[]) {
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s \n", argv[0]);
+ return EXIT_FAILURE;
+ }
+ char* content = "#ifndef __LIBCPROJECT_VERSION__\n";
+ content = string_concatenate(content, "#define __LIBCPROJECT_VERSION__ \"");
+ content = string_concatenate(content, argv[1]);
+ content = string_concatenate(content, "\"\n\n");
+ content = string_concatenate(content, "#endif\n");
+ int result = filesystem_write("./version.h", content, string_get_length(content));
+ if (result == -1) {
+ fprintf(stderr, "Error: Could not write to file.\n");
+ return EXIT_FAILURE;
+ }
+ printf("Success: Version set to %s.\n", argv[1]);
+ return EXIT_SUCCESS;
+}
diff --git a/test/mathematics_test.c b/test/mathematics_test.c
index 9d08c35..99d1abe 100644
--- a/test/mathematics_test.c
+++ b/test/mathematics_test.c
@@ -31,20 +31,20 @@ void mathematics_pow_test() {
}
void mathematics_root_test() {
- assert(mathematics_get_is_equal(mathematics_root(0, 0), 0));
- assert(mathematics_get_is_equal(mathematics_root(0, 1), 0));
- assert(mathematics_get_is_equal(mathematics_root(2, 2), 1));
- assert(mathematics_get_is_equal(mathematics_root(27, 3), 3));
- assert(mathematics_get_is_equal(mathematics_root(16807, 5), 7));
+ assert(mathematics_equals(mathematics_root(0, 0), 0));
+ assert(mathematics_equals(mathematics_root(0, 1), 0));
+ assert(mathematics_equals(mathematics_root(2, 2), 1));
+ assert(mathematics_equals(mathematics_root(27, 3), 3));
+ assert(mathematics_equals(mathematics_root(16807, 5), 7));
}
void mathematics_square_root_test() {
- assert(mathematics_get_is_equal(mathematics_square_root(0), 0));
- assert(mathematics_get_is_equal(mathematics_square_root(1), 1));
- assert(mathematics_get_is_equal(mathematics_square_root(4), 2));
- assert(mathematics_get_is_equal(mathematics_square_root(9), 3));
- assert(mathematics_get_is_equal(mathematics_square_root(25), 5));
- assert(mathematics_get_is_equal(mathematics_square_root(100), 10));
+ assert(mathematics_equals(mathematics_square_root(0), 0));
+ assert(mathematics_equals(mathematics_square_root(1), 1));
+ assert(mathematics_equals(mathematics_square_root(4), 2));
+ assert(mathematics_equals(mathematics_square_root(9), 3));
+ assert(mathematics_equals(mathematics_square_root(25), 5));
+ assert(mathematics_equals(mathematics_square_root(100), 10));
}
void mathematics_factorial_test() {
diff --git a/test/string_test.c b/test/string_test.c
index 5fb08ae..e46330e 100644
--- a/test/string_test.c
+++ b/test/string_test.c
@@ -19,7 +19,7 @@ void string_test() {
string_capitalize_test();
string_total_occurrences_of_character_test();
string_reverse_test();
- string_get_is_equal_test();
+ string_equals_test();
string_get_is_integer_test();
string_split_test();
string_join_test();
@@ -102,13 +102,13 @@ void string_reverse_test() {
assert(assert_string_equal(string, "dlrow olleh"));
}
-void string_get_is_equal_test() {
+void string_equals_test() {
char *string1 = "hello world";
char *string2 = "dlrow olleh";
char *string3 = "dlrow olleh";
- assert(!string_get_is_equal(string1, string2));
- assert(string_get_is_equal(string1, string1));
- assert(string_get_is_equal(string2, string3));
+ assert(!string_equals(string1, string2));
+ assert(string_equals(string1, string1));
+ assert(string_equals(string2, string3));
}
void string_get_is_integer_test() {
diff --git a/test/string_test.h b/test/string_test.h
index 8535501..d8bd8b4 100644
--- a/test/string_test.h
+++ b/test/string_test.h
@@ -25,7 +25,7 @@ void string_total_occurrences_of_character_test();
void string_reverse_test();
-void string_get_is_equal_test();
+void string_equals_test();
void string_get_is_integer_test();
diff --git a/version.h b/version.h
new file mode 100644
index 0000000..630f62a
--- /dev/null
+++ b/version.h
@@ -0,0 +1,4 @@
+#ifndef __LIBCPROJECT_VERSION__
+#define __LIBCPROJECT_VERSION__ "0.0.1"
+
+#endif