-
Notifications
You must be signed in to change notification settings - Fork 4.4k
Home
This repository is contribution friendly 😃. If you're an algorithms enthusiast and want to add or improve an algorithm your contribution is welcome! Please be sure to include tests 😘
This project uses Gradle as a build system (and testing). Make sure you have Java 8+ SDK installed and the gradle command-line tool. Run the build command to make sure you don't get any errors:
Algorithms$ gradle build
The procedure to add a new algorithm or snippet of code is:
- Identify the category folder your algorithm belongs to. For example, a matrix multiplication snippet would belong to the com/williamfiset/algorithms/linearalgebra folder. You may also create a new category folder if appropriate.
- Add the algorithm implementation to com/williamfiset/algorithms/category/ as com/williamfiset/algorithms/category/FooAlgorithm.java
- Add tests for FooAlgorithm in javatests/com/williamfiset/algorithms/category/FooAlgorithmTest.java
- Edit the build.gradle file if you added a new category to the project (unlikely).
- Test your algorithm thoroughly (see testing section below)
- Run
gradle goJF
to format all Java code according to Google Style Guide. - Send pull request for review 😮
This repository places a large emphasis on good testing practice to ensure that published algorithms are bug free and high quality. Testing is done using a combinations of frameworks including: JUnit, Mockito and the Google Truth framework. Currently very few algorithms have tests because they were (informally) tested against problems on Kattis in a competitive programming setting, but we are slowly migrating to formally testing these algorithms for robustness. To run all the tests execute:
Algorithms$ gradle test
However, when developing you likely do not want to run all tests but only a subset of them. For example, if you want to run the FloydWarshallSolverTest.java file under javatests/com/williamfiset/algorithms/graphtheory/FloydWarshallSolverTest.java you can execute:
Algorithms$ gradle test --tests "javatests.com.williamfiset.algorithms.graphtheory.FloydWarshallSolverTest"