Compare commits

...

732 Commits

Author SHA1 Message Date
Michele Sessa 1bc3b5d6dd docs(middle-day): update deprecated method 1 year ago
davhojt 5832f09413
fix(own_and_return): convert rust exercise to snake case 1 year ago
davhojt dbaa66fe41
fix(check_user_name): convert rust exercise to snake case 1 year ago
davhojt 45918794ea
docs: replace betting review process 1 year ago
lee 629c2369ea fix(public/subjects): change css sentence all dom subjects 1 year ago
lee 97d7414484 refactor(public): format DOM exercises for better user experience 1 year ago
eslopfer b75b93b83d docs(dir-info): fix typo 1 year ago
eslopfer 9b7c1f3e2b docs(dir-info): add description for exercise 1 year ago
eslopfer cb024df579 chore(dir-info): make comment accurate 1 year ago
eslopfer 23beb48880 feat(dir-info): add solution for exercise 1 year ago
eslopfer f7491d2e00 test(dir-info): add tests for exercise 1 year ago
Harry Vasanth 5a98fe519e fix(configure): add runner v2 support 1 year ago
Zouhair AMAZZAL a8e4b56e84 docs(deep-in-system) add pictures to the repo 1 year ago
eslopfer a2572a5d27 chore(largest): add line at eof 1 year ago
eslopfer 4608e50e83 chore(largest-dir): delete folder 1 year ago
eslopfer 8f7ba8f6cd test(largest): create the folders and remove them when running the test 1 year ago
eslopfer 36234cdbbe docs(largest): add periods 1 year ago
nprimo 06dc3ff388 feat(largest): add new bash exercise 1 year ago
eslopfer 27b4d9995e docs(make-your-game): add missing question 1 year ago
Michele Sessa 7de1b3a977 style(candidates_checker): improve second example style and prittify 1 year ago
Michele Sessa 21553c4a25 docs(candidates_checker): add requirement to check number of arguments 1 year ago
Michele Sessa 66c7258e6b feat(candidates_checker): add new py exercise to scripting piscine 1 year ago
nprimo c92b34b7e9 feat(skip_secrets): add subject 1 year ago
miguel 36f079db98 docs(grades): fix test and error message 1 year ago
miguel 1f9b277887 fix(grades): fix and add more tests 1 year ago
miguel 8182d373d2 fix(grades):change the test to be more flexible 1 year ago
miguel bc64c2cf03 fixing readme solution and test 1 year ago
miguel a1b76b0f0b feat(grades): add subject, test and solution for the exercise 1 year ago
Whovillage 89305e4358 Update README.md 1 year ago
eslopfer b3beafe586 docs(string_tokenizer_count): highlight file 1 year ago
eslopfer 61901120ad docs(string_tokenizer_count): add example of how to sort dict 1 year ago
eslopfer 675b689c38 docs(string_tokenizer_count): highlight filenames 1 year ago
eslopfer 8f93971d9b docs(string_tokenizer_count): fix inaccurate usage section 1 year ago
eslopfer 3eeb99dc38 docs(string_tokenizer_count): add description for exercise 1 year ago
nprimo 3152d76b75 docs(object_to_json): fix small grammar/format issues 1 year ago
nprimo 13cd960199 docs(object_to_json): improve subject 1 year ago
nprimo 75ace2da2f docs(object_to_json): make subject coherent with solution 1 year ago
nprimo 338ad35a46 feat(object_to_json): add new exercise 1 year ago
eslopfer 9c82f65d21 docs(keras2): add missing exercise to the description 1 year ago
miguel 212c7a749f docs(read_file): change file to file name 1 year ago
miguel 1dbc49abbb docs(read_file): fixing the readme 1 year ago
miguel 9c0f53dbeb feat(read_file): add subject for the new exercise 1 year ago
miguel f9f8f1810b docs(write_file): fixing the readme 1 year ago
miguel 07e3a84b7c docs(write_file): fix the hashes 1 year ago
miguel 76b3de083d feat(write_file): add subject for the new exercise 1 year ago
eslopfer 314138a026 docs(flexible_function): improve usage example 1 year ago
eslopfer 8e6cb6a558 docs(flexible_function): rename title 1 year ago
eslopfer c6e6d78b66 docs(flexible_function): add description for exercise 1 year ago
eslopfer dad3fd234a docs(credentials_searches): replace single quotes for backticks 1 year ago
eslopfer 3e7cd64c92 docs(isinstance): add hint to use isinstance 1 year ago
eslopfer 78f854bc92 docs(credentials_searches): put file name between quotes 1 year ago
eslopfer b1973d138e docs(credentials_searches): add description of exercise 1 year ago
eslopfer b5266d8c8c docs(clean_the_list): capitalize string 1 year ago
eslopfer 0809920ba6 docs(clean_the_list): use current name of the file in usage example 1 year ago
eslopfer f845339383 docs(clean_the_list): rename file to submit 1 year ago
eslopfer 12f7343ad8 docs(clean_the_list): specify what to return 1 year ago
eslopfer 97b32f5721 docs(clean_the_list): add context to usage 1 year ago
eslopfer 4f3ea55b33 docs(clean_the_list): add method to the names 1 year ago
eslopfer 21003c08d9 docs(clean_the_list): highlight function name 1 year ago
eslopfer 8d3597565b docs(clean_the_list): add line after each bullet point 1 year ago
eslopfer b338d80e6f docs(clean_the_list): make description more formal 1 year ago
eslopfer e5fba187a8 docs(clean_the_list): modify h2 1 year ago
eslopfer f3ed3aa389 docs(clean_the_list): make the output acccurate 1 year ago
eslopfer 7e21117858 chore(clean_the_list): move to right repository 1 year ago
eslopfer a7487162b8 chore(shopping): move to right repository 1 year ago
eslopfer da556a6082 test(clean_the_list): fix wrong test 1 year ago
eslopfer 59941b69bb fix(clean_the_list): remove file submitted by mistake 1 year ago
eslopfer da345c7f5a docs(clean_the_list): add subject description 1 year ago
eslopfer ed8474e3cc test(clean_the_list): fix wrong test output 1 year ago
eslopfer 349398405a test(clen_the_list): add tests for exercise 1 year ago
eslopfer d8e84c349e feat(clean_the_list): add solution for exercise 1 year ago
eslopfer e083c4db52 docs(concat-string): fix typo 1 year ago
eslopfer b0e3471c2f docs(concat_string): add missing line for consistency 1 year ago
eslopfer 2459ecb941 docs(concat_string): rephrase usage and description 1 year ago
eslopfer 47b1f92881 docs(concat_string): specify right output 1 year ago
eslopfer 21f63d3e4d docs(concat_string): add lines to usage example 1 year ago
eslopfer 818bb420c2 chore(concat_string): make folder snake case 1 year ago
eslopfer 1e0f29a661 chore(concat_string_test): move to right repository 1 year ago
eslopfer dd81c5c8a6 chore(concat_string): move to right repository 1 year ago
eslopfer 165515d247 test(concat_string): add tests for exercise 1 year ago
eslopfer 8460a1140c feat(concat_string): add solution for exercise 1 year ago
eslopfer 6f6e70ccb2 docs(concat_string): add subject description 1 year ago
Remington Smith d88afa7ddc Update README.md 1 year ago
Michele Sessa 937c38f0bd docs(merge_two): add extra line at EOF and more details about the type of values 1 year ago
Michele Sessa 7e5a55eb5e docs(merge_two): add the exit condition for inputs 1 year ago
Michele Sessa ada74ada7b docs(merge_two): use stdin to generate the second dictionary 1 year ago
Michele Sessa 891d18251f feat(merge_two): add json manipulation to the subject 1 year ago
Michele Sessa cdcac95cc6 docs(merge_two): fix typo in subject 1 year ago
Michele Sessa 0deb60289f feat(merge_two): add new py exercise to scripting piscine 1 year ago
miguel 663fea6e38 docs(days-and-numbers): fixing the readme 1 year ago
miguel d8e0daac01 docs: change notion to references 1 year ago
miguel 75e0a216a6 feat(days-and-numbers): add subject for the new exercise 1 year ago
eslopfer 91a37b1a2d test(sunny-sunday): rename test 1 year ago
eslopfer 27cb454673 refactor(sunny-sunday): rename directory 1 year ago
eslopfer 571173983c docs(bloody-sunday): replace bloody for sunny 1 year ago
eslopfer 119f624f44 refactor(bloody-sunday): replace bloody for sunny 1 year ago
eslopfer af780cabea
DEV-4309 race bring issue from public (#1748) 1 year ago
davhojt 41fc91e649 docs(local-node): clarify empty file sumission 1 year ago
davhojt d441a78d1a docs(lineup): fix path, to match reference object 1 year ago
xalava a4c3f8db8a adapted subjects to recent test changes 1 year ago
nprimo 2a9823cfee docs(shopping): update subject 1 year ago
nprimo 32660b2aa0 feat(shopping): add new exercise 1 year ago
miguel 07b35e898d docs(string_tokenizer) typos 1 year ago
miguel 4c09ccd4b7 feat(string_tokenizer): add subject for the new exercise 1 year ago
davhojt a08e196886
fix(race_test.js): ensure Promise.race is available for test.mjs 1 year ago
Michele Sessa 84c56a4741 docs(numerical_operations_the_return): change example command from python to python3 1 year ago
Michele Sessa f8201da931 chore(numerical_operations_the_return): add subject for new py exercise in scripting piscine 1 year ago
Michele Sessa 0ff5b55ec5 feat(numerical-operations-the-return): add new python exercise to scripting piscine 1 year ago
Michele Sessa c4ea506acf docs(numerical_operations): change position of optional section 1 year ago
miguel 169a5dfb35 fix(dockerfile): add apt-utils so that the actions pass in public 1 year ago
Michele Sessa a720947c82 chore(numerical_operations): add subject for new py exercise in scripting piscine 1 year ago
Michele Sessa 77a5a1821e docs(punishment): improve references section 1 year ago
Michele Sessa 4c05e7d7fb chore(punishment): move tests and solutions to another repo 1 year ago
Michele Sessa 41dccb6469 docs(punishment): apply linter to subject 1 year ago
Michele Sessa d0f04efdaf feat(punishment): add new python exercise to scripting piscine 1 year ago
Michele Sessa 1984891870 feat(hello_python): add new exercise subject for scripting piscine 1 year ago
Michele Sessa 01eaea466d feat(hello_python): add new py exercise to scripting piscine 1 year ago
eslopfer 38f9bcb87f docs(invert): clarify what to return 1 year ago
Zouhair AMAZZAL b49b41fc18 DEV-4293 add SHA1 check 1 year ago
Zouhair AMAZZAL 0e1ce974df DEV-4293 fix audit docs format 1 year ago
Zouhair AMAZZAL c4a415e456 DEV-4293 fix subject docs format 1 year ago
miguel 35aa7fea5e docs(scripting-piscine): fix naming of the hello-devops exercise 1 year ago
miguel ac848c2249 docs(devops): add info to readmes in the scripting piscine 1 year ago
davhojt 149278fa1d style(deep-in-system): prettify 1 year ago
Zouhair AMAZZAL 83d72ea9e8 docs(deep-in-system) fix the subject header 1 year ago
Zouhair AMAZZAL 5557be9f3d docs(deep-in-system) fix the subject 1 year ago
Zouhair AMAZZAL 8f261d03fd DEV-4191 docs(deep-in-system) fix audit headers 1 year ago
Zouhair AMAZZAL 4df23a5b8d DEV-4191 docs(deep-in-system) add audit 1 year ago
Zouhair AMAZZAL 1225dc0d6a DEV-4191 docs(deep-in-system) change subject name to kebabcase 1 year ago
Zouhair AMAZZAL 875f2aa59e DEV-4191 add(DeepInSystem) add new subject for devops project DeepInSystem 1 year ago
miguel 2235a8b1d0 docs(in-the-dark):remove echo from the test 1 year ago
miguel 8ce0dfcac1 fix(devops): fix folder in the hard-perm exercise 1 year ago
eslopfer b1db3597f9 docs(visualizations): replace incorrect audit questions with the right ones 1 year ago
miguel 7db7b01db8 docs(append-output): moving files to the resources folder 1 year ago
miguel de6caf07f3 fix(append-output): fix test and solution in order to create the file results.txt with some text inside already 1 year ago
miguel 748344f23d fix(append-output): fixing test readme and solution 1 year ago
miguel 0456bc5b5d feat(append-output): add subject, test and solution for the exercise 1 year ago
miguel 992e531434 docs(details): fix the readme 1 year ago
miguel e298d48ed9 feat(details): add subject, test and solution for the exercise 1 year ago
Toussaint Louis a997271b03 Update README.md 1 year ago
eslopfer a1a27fe0f5 test(file-cheker): create test folder and delete it from test file 1 year ago
eslopfer 22068682cb test(file-cheker): remove test files 1 year ago
eslopfer 35cbdf6c85 docs(file-checker): be specific about what behaviour need to be tested 1 year ago
eslopfer ef79658c09 test(file-cheker): set permissions when running the tests 1 year ago
eslopfer 43d7bb21a9 docs(file-checker): add ls command to usage example 1 year ago
eslopfer 666cc027fc test(file-checker): recreated files with right permissions again 1 year ago
eslopfer a2e42772e5 test(file-checker): remove files to create them from scratch 1 year ago
eslopfer 168fa94c2b test(file-checker): refactor test for robustness 1 year ago
eslopfer 8904b74cd3 test(file-checker): fix permissions in test files 1 year ago
eslopfer c63702c971 test(file-checker): add files to test 1 year ago
eslopfer 0af1b9f161 test(file-checker): fix wrong file to test and wrong variables 1 year ago
eslopfer ed41ff6929 fix(file-checker): change permission to make the file executable 1 year ago
eslopfer 8ec5b5023c fix(file-checker): change permission to make it executable 1 year ago
eslopfer 1fe8893aaf test(file-checker): add test for exercise 1 year ago
eslopfer 5558a83c62 feat(file-checker): add solution for exercise 1 year ago
eslopfer c8511651ff docs(file-checker): add description of subject 1 year ago
miguel a72333ab76 fix(devops): fixing typos and changing perms in the exercise hard-perm 1 year ago
Michele dc8002d92e
DEV-3951-calculator (#1706) 1 year ago
miguel 01857cd9cc fix(Dockerfile): adding the tree command to fix a bug with the scripting tests 1 year ago
sagarishere b7ad774a68 new line in the beginning of output removed 1 year ago
eslopfer f88cee4371 docs(numpy): replace expected solution in audit 1 year ago
Michele Sessa 1d5db2e77c test(joker-num): remove unused variable in tester 1 year ago
Michele Sessa d657d1461a docs(joker-num): add a hint for empty string check 1 year ago
Michele Sessa d39254e5d4 test(joker-num): add bash unofficial strict mode 1 year ago
Michele Sessa 3f21c5d32e feat(joker-num): add new exercise to scripting piscine 1 year ago
eslopfer 9025836ce8 test(joker-num): add provisional tests 1 year ago
eslopfer b6e041ea3f docs(joker-num): add description of subject 1 year ago
eslopfer 1cdf6cb27c fix(joker-num): remove unnecessary flag 1 year ago
eslopfer ed02670e16 feat(joker-num): add solution to exercise 1 year ago
Falusvampen 87abec3e1d Changed note to > as requested 1 year ago
Falusvampen 01297625c4 Fix small mistake 1 year ago
Toussaint Louis 4cd69e4cb9 Update README.md 1 year ago
miguel 107d7ac4ad fix(in-back-ground): add check for the nohup command 1 year ago
miguel 9d0f9d4506 fix(): fixing the test 1 year ago
miguel da685d8b85 fix(in-back-ground): fixing the test ang improving subject 1 year ago
miguel a97ca4ed40 fix(in-back-ground): remove echos 1 year ago
miguel ab2fea635f fix(in-back-ground):fixing test and adding info to the readme 1 year ago
miguel f66634c212 feat(in-back-ground): add subject, test and solution for the exercise 1 year ago
nprimo 9bdb8f1217 feat(remake): clarify exercise 1 year ago
nprimo 48993bb471 docs(remake): improve subject 1 year ago
nprimo f1a7dd0d2b feat(remake): add subject, tests and solution 1 year ago
miguel 6536303937 docs(left): remove unnecessaary file and adding backticks on the readme 1 year ago
miguel 5f517ea08f fix(left): fixing test 1 year ago
miguel 8995643d53 feat(left): add subject, test and solution for the exercise 1 year ago
miguel 594a8329d6 docs(burial): adding improvement to readme 1 year ago
miguel 6ce50f2bde feat(burial): add subject, test and solution for the exercise 1 year ago
miguel 74c7460405 fix(hard-conditions): creating the files in the test and removing unnecessary folder 1 year ago
miguel 9eb5d849d5 fix(hard-conditions): adding test case for nos executable 1 year ago
miguel 737ec808b1 feat(hard-conditions): add subject, test and solution for the exercise 1 year ago
Michele Sessa ed054578b9 docs(input-redirection): fix naming inconsistencies 1 year ago
Michele Sessa f3739b2357 docs(input-redirection): apply prettier to subject 1 year ago
Michele Sessa 0549bcf421 feat(input-redirection): add new exercise to scripting piscine 1 year ago
miguel 5ffb2348f5 fix(right) fixing the test, readme and solution 1 year ago
miguel 21a6aace01 docs(right): typo 1 year ago
miguel 5245101b91 feat(right): add subject, test and solution for the exercise 1 year ago
miguel 15a88f5137 feat(in-the-dark): add subject, test and solution for the exercise 1 year ago
miguel 5f8365c19c fix(easy-conditions): Fixing exercise due to misunderstanding of the objective 1 year ago
miguel 9becc5396a feat(easy-conditions): add subject, test and solution for the exercise 1 year ago
nprimo 001dc38237 docs(ispowerof2): improve subject 1 year ago
nprimo ac9cf757a1 docs(ispowerof2): make subject clearer 1 year ago
Zouhair AMAZZAL 2b77c87031
DEV-3919-my-ls (#1660) 1 year ago
nprimo ce6ef6d186 refactor(array-selector): refactor test 1 year ago
nprimo c231898bca fix(array-selector): remove exit command from solution 1 year ago
nprimo c9f0245673 fix(array-selector): add execute mode to test script 1 year ago
nprimo 3d6b963da9 docs(array-selector): improve subject clarity 1 year ago
nprimo 7e4375aa1e feat(array-selector): add subject 1 year ago
nprimo 595c044136 feat(array-selector): add test 1 year ago
nprimo 9038c5b3dd feat(array-selector): add solution 1 year ago
miguel 04e90aa8be fix(comparator):fixing the test 1 year ago
miguel fb239fd7d2 fix(comparator):fixing test and adding info to the readme 1 year ago
miguel d07a43ebe8 feat(comparator): add subject, test and solution for the exercise 1 year ago
miguel eb6e281da0 feat(file-details): add subject, test and solution for the exercise 1 year ago
nprimo ad0ea7ea91 fix(auto-exec-bin): fix test bug 1 year ago
Zouhair AMAZZAL 60deacdbb2 DEV-3918 test(auto-exec-bin) fix the test, uncorrect condition to check if bin already exists 1 year ago
Zouhair AMAZZAL d1295b02a8 DEV-3918 feat(auto-exec-bin) add new subject and tests for auto-exec-bin exercise 1 year ago
Michele Sessa 3d0e7cb960 test(bin-status): fix tests always returning success 1 year ago
Zouhair AMAZZAL f6f7831722 DEV-3916 docs(bin-status) add the requested changes for the PR:1650 1 year ago
Zouhair AMAZZAL 95509fae9a DEV-3916 feat(bin-status) add subject and tests for bin-status exercise 1 year ago
miguel ab5b82d1bd docs(greatest-of-all): correct typos 1 year ago
miguel 447de57f08 fix(): correcting typos in readme 1 year ago
miguel 962b6217b4 feat(greatest-of-all): add subject, test and solution for the exercise 1 year ago
Harry f3538e2633
feat(docker-image): bump docker\login-action to v2.1.0 1 year ago
Michele Sessa 5a2cd55a02 docs(check-user): add more hints and details about getent 1 year ago
Michele Sessa ebc79e5a13 chore(check-user): make the solution executable 1 year ago
Michele Sessa fd80d337d2 style(check-user): apply autoformat to tests 1 year ago
Michele Sessa b7197ba49c feat(check-user): add new exercise for scripting piscine 1 year ago
davhojt c1c5edba98
docs(cl-camp1): explictly state that results are without spaces 1 year ago
davhojt d3f8c485a1
docs(introduction): fix typo 1 year ago
eslopfer 8bf61c6a45 refactor(division): modify solution to avoid having to exit 1 year ago
eslopfer 596e6bc683 fix(division): refactor to exit with 0 1 year ago
eslopfer 82751669c2 test(division: add check for test command) 1 year ago
eslopfer cf304b85d4 fix(division): remove wrong file pushed 1 year ago
eslopfer 08c8ce153b test(division): add condition to work with one argument 1 year ago
eslopfer 981ebfd3d4 test(division): add test case 1 year ago
eslopfer 97a9250dd5 docs(division): specify what to do when there is a remainder 1 year ago
eslopfer 46ab89401a fix(division): output numbers in the short version 1 year ago
eslopfer 820ae81915 fix(division): make file executable 1 year ago
eslopfer 238aee7edc fix(division): make file executable 1 year ago
eslopfer d50afde56a test(division): fix tests 1 year ago
eslopfer 4575754057 test(division): add tests for exercise 1 year ago
eslopfer 52e77c4e57 feat(division): add solution for exercise 1 year ago
eslopfer 1d93072feb docs(divide): add description of subject 1 year ago
davhojt 2d57018134
docs(intro): fix caps of Hello, world! 1 year ago
Harry af8a7c5bc5
fix(bug_report): update details 1 year ago
Harry a1fed73e76
fix(feature_request): update details 1 year ago
Harry 91fb38d886
fix(feature_request): update details 1 year ago
Harry d41fea9c13
Update bug_report.md 1 year ago
Harry cc94a1807a
fix(feature_request): add details 1 year ago
Harry 9af7ad3e5a
fix(bug_report): add details 1 year ago
Harry 75ce933bb7
fix(feature_request): content 1 year ago
Harry de7bd6fef3
fix(bug_report): content 1 year ago
eslopfer 19abec613b fix(plus): change permissions of file 1 year ago
eslopfer 37a411afa9 fix(plus_test): change permissions of file 1 year ago
eslopfer b236264e84 docs(plus): remove cat -e 1 year ago
eslopfer 4ba8a4bb8a docs(plus): give exact name of file 1 year ago
eslopfer b0168a28a7 docs(plus): replace notions with references 1 year ago
eslopfer f848501332 fix(plus): wrong shebang 1 year ago
eslopfer 28572ca566 docs(plus): remove new line from output to terminal 1 year ago
eslopfer 18b2cfabf6 fix(plus): move to right folder 1 year ago
eslopfer 285680e9a7 docs(plus): remove end of line from terminal output 1 year ago
eslopfer 8316ebd171 test(plus): add tests 1 year ago
eslopfer cf4815901f feat(plus): add solution 1 year ago
eslopfer 7b771e1742 docs(plus): add description of subject 1 year ago
eslopfer 02755bed78 docs(groupie-tracker-search-bar): make audit question accurate 1 year ago
eslopfer 00129a7a3c docs(friend-support): update link to resource 1 year ago
eslopfer 5660faa45f docs(gatecrashers): update link to resource 1 year ago
eslopfer f85c056f72 docs(uninvited): update link to resource 1 year ago
eslopfer ccd46489a6 docs(tell-me-how-many): update link to resource 1 year ago
eslopfer eb20cf5956 chore(guests): cleanup, move resource to its own folder 1 year ago
eslopfer 52bc2d7040 docs(uninvited): update link to guests folder 1 year ago
eslopfer 46067ab226 docs(tell-me-how-many): update link to guests folder 1 year ago
eslopfer f74f6fbe3b docs(gatecrashers): update link to guests folder 1 year ago
eslopfer a6183a6820 docs(friend-support): update link to guests folder 1 year ago
eslopfer c46a20e583 chore:(guests): move folder to public 1 year ago
nprimo 21ff0467e4 docs(veterinary): improve subject 2 years ago
nprimo 8d76f63f5c feat(veterinary): add tests 2 years ago
nprimo 7e594e9177 docs(veterinary): add subject 2 years ago
davhojt 4328e8f3dc chore(mobile-dev): move resources closer to each project 2 years ago
davhojt 88283b4c47 chore(mobile-branch): add resources from foreign repo 2 years ago
davhojt 9f8e0a66dc style: prettier 2 years ago
davhojt b672ee8715 docs(twenty-forty-eight): add new subject and audit 2 years ago
davhojt 1a3f95ea2b docs(map-markers): rename from 01-map 2 years ago
Zouhair AMAZZAL 5c1077c6ce DEV-3920 docs(auto-jobs) fix grammer in readme file 2 years ago
Zouhair AMAZZAL 75d318f5d9 DEV-3920 fix(auto-jobs) fix solution for task3 2 years ago
Zouhair AMAZZAL 944e43772c DEV-3920 feat(auto-jobs) add subject and tests for auto-jobs exercise 2 years ago
eslopfer 2cc7a8a432
Dev 3747 new exercise about handling different http request methods (#1624) 2 years ago
eslopfer 73af4b4d43 docs(natural-language-processing-with-spacy): remove repetition 2 years ago
eslopfer f8fae31cf0 docs(ai-audits): fix format errors, rephrase, and typos 2 years ago
eslopfer d06c09c080 docs(classification-with-scikit-learn): fix audits format 2 years ago
eslopfer 47baef625c docs(visualizations): remove space 2 years ago
eslopfer af6a512da9 docs(visualizations): fix audits format 2 years ago
eslopfer 6469482d44 docs(train-evaluate-machine-learning-models): fix audits format 2 years ago
eslopfer 1574f97c6b docs(time-series-with-pandas): fix audits format 2 years ago
eslopfer e530bcf634 docs(sp500-strategies): fix audits format 2 years ago
eslopfer 2d937d14cb docs(pandas): fix audits format 2 years ago
eslopfer 4aaa6ccedb docs(numpy): fix audits format 2 years ago
eslopfer c4b718443d docs(nlp-scraper): fix audits format 2 years ago
eslopfer a301f988dd docs(neural-networks): make example more neutral 2 years ago
eslopfer 25707e9e94 docs(natural-language-processing-with-spacy): fix audits format 2 years ago
eslopfer 40c8c11ed4 docs(natural-language-processing): fix audits format 2 years ago
eslopfer 820e926b2c docs(model-selection-methodology): fix audits format 2 years ago
eslopfer bfd02c9484 docs(machine-learning-pipeline): prettier 2 years ago
eslopfer 6e6b8bba86 docs(machine-learning-pipeline): fix audits format 2 years ago
eslopfer d5359345f3 docs(linear-regression-with-scikit-learn): fix audits format 2 years ago
eslopfer dcca22eeaa docs(linear-regression-with-scikit-learn): fix audits format 2 years ago
eslopfer 92307d767c docs(keras-2): fix audits format 2 years ago
eslopfer 421baa3c50 docs(keras): fix audits format 2 years ago
eslopfer d20690dc51 docs(kaggle-titanic): fix audits format 2 years ago
eslopfer 628ceb1f20 docs(forest-cover-type-prediction): fix audits format 2 years ago
eslopfer 8fb6444113 docs(credit-scoring): fix prompt format 2 years ago
eslopfer 14a685edec docs(emotions-detector): fix prompt format 2 years ago
eslopfer bc3d8db02e docs(emotions-detector): fix audits format 2 years ago
eslopfer cefa4d59f2 docs(data-wrangling-with-pandas): fix audits format 2 years ago
eslopfer c8c3eb5a76 docs(credit-scoring): fix audits format 2 years ago
eslopfer 204db46fdf docs(clasification-with-scikit-learn): fix audits format 2 years ago
eslopfer 4faa4927bf docs(backtesting): make audit file comply with audit format, fix typos and grammar mistakes 2 years ago
davhojt 48293448a3 docs(backtesting-sp500): rename path to match ref 2 years ago
davhojt 6737972d63 docs(forest-prediction): rename path to match ref 2 years ago
davhojt 10e8cea472 docs(nlp-spacy): rename path to match ref 2 years ago
davhojt 1c1ff5e557 docs(data-wrangling): rename path to match ref 2 years ago
davhojt b59a56713e docs(time-series): rename path to match ref 2 years ago
davhojt 5fe9a8b0ce docs(linear-regression): rename path to match ref 2 years ago
davhojt dc51eadafa docs(classification): rename path to match ref 2 years ago
davhojt 991c7b41b8 docs(pipeline): rename path to match ref 2 years ago
davhojt 90309db9be docs(training): rename path to match ref 2 years ago
davhojt abc4d7fcf8 docs(model-selection): rename path to match ref 2 years ago
davhojt d068c9a012 docs(nlp): rename path to match ref 2 years ago
miguel df1b00c454 fix(easy-perms): fix test to check only the perms 2 years ago
miguel bbee4a7248 fix(easy-perm): fixing the test 2 years ago
miguel 0c7c439360 docs(easy-perms): typo 2 years ago
miguel 88eee63db2 feat(easy-perms): add subject, test and solution for the exercise 2 years ago
miguel 526f60501c fix(hard-perms): fix test to check only the perms 2 years ago
miguel 1d78af2f7a fix(hard-perm): fixing the test 2 years ago
miguel 9b975fdf0f feat(hard-perms): add subject, test and solution for the exercise 2 years ago
miguel 8166812c3c docs(set-internal-vars): add hints 2 years ago
miguel 9a75202406 feat(set-internal-vars): add subject, test and solution for the exercise 2 years ago
miguel 497b331f9d docs(set-env-vars): add hints, fixx the test to block echo and fix solution 2 years ago
miguel 13435eb8f1 docs(set-env-vars): add hints, fixx the test to block echo and fix solution 2 years ago
miguel b2c81baa39 feat(set-env-vars): add subject, test and solution for the exercise 2 years ago
jrosendo 7d092df38d fix(blockchain): fix typo in name 2 years ago
Michele Sessa cc657aa7c3 docs(blockchain): improve audit style and titles 2 years ago
Michele Sessa 8259ea702e fix(tracking-network): fix audit headers 2 years ago
Michele Sessa 077f7c4c9b fix(sign-service): fix audit headers 2 years ago
Michele Sessa 4654dc12cd fix(payment-channel): fix audit headers 2 years ago
Michele Sessa c5a8038e32 docs(non-fungible-cats): fix some typos in the audit 2 years ago
Michele Sessa b8a5834205 fix(node-dashboard): fix audit headers 2 years ago
Michele Sessa 7d5f51e374 fix(nft-marketplace): fix audit headers 2 years ago
Michele Sessa e0dbd353a3 fix(financial-instruments): fix audit headers 2 years ago
Michele Sessa cd2cd98f84 docs(decentralised-finance): fix typo in the name and check audit 2 years ago
Michele Sessa 0f1f13149b refactor(trading-platform, benchmarking-tool): rename respectively to financial-instruments and node-dashboard 2 years ago
nprimo b7b8e4795d docs(passive): correct small typos 2 years ago
nprimo a1843c47f7 docs(obfuscator): make audit gender neutral 2 years ago
nprimo 09a07b5ea4 docs(malware): correct grammar 2 years ago
nprimo d6c0b8e3ec docs(mal-track): improve format and correct grammar 2 years ago
nprimo d382111703 docs(inspector-image): correct grammar 2 years ago
nprimo c522b283b2 docs(mal-track): restore hyperlink 2 years ago
nprimo de978aee29 docs(web-hack): restore hyperlink 2 years ago
nprimo e6742b2897 docs(evasion): restore hyperlink 2 years ago
nprimo 6366d196c5 docs(active): add spacing between bullet list 2 years ago
nprimo e9853b2346 docs(local): add hyperlink where possible 2 years ago
nprimo 44e4ff870c docs(inspector-image): improve audit format 2 years ago
nprimo 97512f9066 docs(hole-in-bin): improve audit format 2 years ago
nprimo 2f9154f891 docs(obfuscator): improve audit format 2 years ago
nprimo 51e06fa543 docs(mal-track): improve audit format 2 years ago
nprimo d8371b697c docs(web-hack): improve audit format 2 years ago
nprimo 65a0a88171 docs(injector): improve audit format 2 years ago
nprimo 8585bc2a71 docs(malware): improve audit format 2 years ago
nprimo f20ce6c407 docs(passive): improve audit format 2 years ago
nprimo 4a42d8f1db docs(evasion): improve audit format 2 years ago
nprimo 829ec0e43f docs(active): improve audit format 2 years ago
nprimo 7520b25427 docs(local): improve audit format 2 years ago
Tiago Collot ecc6bf9943 docs(sumthemall): upgrade instructions 2 years ago
estlop a96274cdab docs: correct typo 2 years ago
estlop 8dc30ed978 docs: clarify instructions 2 years ago
estlop 360304de01 Add error handling when not a number as sugested 2 years ago
estlop 067acad4bb docs: Add readme for sumthemall subject 2 years ago
davhojt 12aa1223ad chore(gaming): move projects inside gaming branch directory 2 years ago
nprimo cd332eec28 docs(favorite-images): improve audit format 2 years ago
nprimo 69ac2320d6 docs(secure-notes): improve audit format 2 years ago
nprimo fa4628109a docs(stock-market): improve audit format 2 years ago
nprimo ecf94f76ed docs(bloc-counter): improve audit format 2 years ago
nprimo 814f380aff docs(hacker-news): improve audit format 2 years ago
nprimo b92f3a36eb docs(movie-list): improve audit formats 2 years ago
nprimo f9c6335c75 docs(bizz-card): improve audit format 2 years ago
nprimo b32ef63889 docs(quizz-app): improve audit format 2 years ago
nprimo b13336b953 docs(01-maps): improve audit format 2 years ago
nprimo aa5c04cc0f docs(bouncer): improve audit format 2 years ago
nprimo a35bf4f4f7 docs(sky-map): improve audit format 2 years ago
nprimo 0dae786e3a docs(packate): improve audit format 2 years ago
Roberto Catini b85a77b28d remove spurious blank lines in examples 2 years ago
nprimo 70ee6a2109 docs(ascii-art-color): update audit 2 years ago
nprimo b7a11a3fe4 docs(ascii-art): fix examples spacing 2 years ago
davhojt 966796fcae docs(shop): remove leading spaces 2 years ago
xalava d043ac37a8 Last blockchain projects 2 years ago
eslopfer 90a0e60450 docs(cat): fix inconsistency on example 2 years ago
miguel 93288bcdfd docs(quadchecker): changing the word raid to quad in the readme and audit 2 years ago
nprimo fc2d986a5d docs(ascii-art-web): make audit coherent with subject 2 years ago
Michele Sessa c53584ed35 docs(gatecrashers): remove non neutral content 2 years ago
miguel 2e6747da72 feat(env-format): add subject, test and solution for the exercise 2 years ago
miguel 53aa0b3f92 docs(master-the-ls): add .sh in the readme 2 years ago
miguel fc197de5fd docs(master-the-ls): fix readme and change to script instead of a file 2 years ago
miguel 3112b89373 fix(master-the-ls): fixing readme and test 2 years ago
miguel 1fcd020884 docs(master-the-ls): moving the subject to the folder devops and fix readme 2 years ago
miguel 9dbebae756 feat(master-the-ls): add subject, test and solution for the exercise master-the-ls 2 years ago
miguel fe31b9677d docs(count-files): adding info on th wc command 2 years ago
miguel 22355f3441 docs(count-files): adding examples 2 years ago
miguel 3d7497b538 docs(count-files): moving the subject to the folder devops and fix readme 2 years ago
miguel 7849dc44fb feat(count-files): add subject, test and solution for the exercise count-files 2 years ago
miguel 18a21bfe6d docs(change struct): fixing test and removing folders 2 years ago
miguel 3049697bf4 docs(change-struct): remove repeated info of the Readme 2 years ago
miguel 232bbf2b5c docs(change-struct): moving the subject to the folder devops 2 years ago
miguel fcf7432c49 Adding empty folders 2 years ago
miguel ae0847fbcd feat(change-struct): add subject, test and solution for new a exercise 2 years ago
miguel d8e7a606f0 docs(file-struct): fixing test and removing folders 2 years ago
miguel 2ee882e8a2 docs(file-struct): adding info on the Readme 2 years ago
miguel daafc5d465 docs(file-struct): moving the subject to the folder devops 2 years ago
miguel cc2dd1c36e Adding empty folders 2 years ago
miguel e3d8cd9516 feat(file-struct): add subject, test and solution for new a exercise 2 years ago
miguel 8230ba16ee docs(strange-files): fixing readme 2 years ago
miguel 3410c9ee5a docs(strange-files): moving the subject to the folder devops 2 years ago
miguel e06b028697 feat(strange-files): add subject, test and solution for new a exercise 2 years ago
Zouhair AMAZZAL 23d56da262 fix(hello-devops) fix subject and tests name 2 years ago
Zouhair AMAZZAL 6cf269c441 DEV-3896 feat(hello_devops) add subject and tests for into exercise to teach student how to push in gitea repo 2 years ago
Christopher Fremond fc263a8d09
feat(dom test image): correct the DOM image tag 2 years ago
Michele Sessa 82d6ce3933 docs(lem-in): clarify expected behavior for tunnels in the subject 2 years ago
Michele Sessa 504350a830 docs(lem-in): clarify expected behavior for tunnels 2 years ago
jrosendo ceee355156 chore(blockchain): remove tip exercise 2 years ago
miguel 4da285b07f docs(skip-lines): moving the subject to the folder devops and fix readme 2 years ago
miguel 4b02c825b7 feat(skip-lines): add subject, test and solution for the exercise skip-line 2 years ago
miguel 5d6875d0a8 feat(file-researcher): add subject, test and solution for the exercise file-researcher 2 years ago
jrosendo 73fda016e5 docs(ai): add ai branch subjects to public 2 years ago
jrosendo 53af9f2ecb docs(mobile-dev): add mobile branch subjects to public 2 years ago
jrosendo 7a960f7d00 docs(blockchain): add blockchain branch subjects to public 2 years ago
jrosendo 52b4b5545b docs(cibersecurity): add cibersecurity branch subjects to public 2 years ago
Chris dff9dd77ad feat(public repo)makes building step independent from the success or failure or each other 2 years ago
Chris 02f28b9695 feat(public repo)log in the 01-edu repository prior to executing the other actions 2 years ago
Chris 9731c7c0ca feat(publicrepo):automates builds and add all images of the public repo to github registry 2 years ago
Michele Sessa 96817e90fa fix(matrix_mult): fix package name mismatch 2 years ago
Michele Sessa 6d2677e0f0 fix(matrix_op): fix package name mismatch 2 years ago
Michele Sessa e1fab8e3ea docs(gatecrashers): add explicit quote to previous exercise behavior 2 years ago
Michele Sessa e2a8dc2bbd refactor(gatecrashers): remove code repetition, consistent use of eq and fail for test checks 2 years ago
Michele Sessa 52c167a390 refactor(gatecrashers): use fs/promises for file access in tests, remove unused imports 2 years ago
Michele Sessa e3e7058507 feat(gatecrashers): add test names, start/kill server for each test, add test for file created and POST answers 2 years ago
Michele Sessa 73d7b44898 docs(gatecrashers): change example, now content-type is application/json 2 years ago
Michele Sessa 9a2a1b7e9d feat(gatecrashers): add a new exercise to js node quest 2 years ago
Zouhair AMAZZAL 266d7dd0ee docs(find-files): fix grammer error 2 years ago
Zouhair AMAZZAL 80706806e6 docs(find-files): explain what everything means and all files in the exercise Instructions 2 years ago
Zouhair AMAZZAL a60c16dcaf docs(find-files): fix grammer error 2 years ago
Zouhair AMAZZAL abc65b2eb2 test(find-files): check if the submitted file is correct and check if echo is used 2 years ago
Zouhair AMAZZAL b864a26525 docs(find-files): fix grammer error 2 years ago
Zouhair AMAZZAL 692e383ff0 docs(find-files): move subject to devops dir 2 years ago
Zouhair AMAZZAL e2e32458af docs(find-files): add pipe and && reminder in doc 2 years ago
Zouhair AMAZZAL cabe2e248f feat(find-files): add subject, test and solution for new a exercise 2 years ago
Zouhair AMAZZAL 6b9d5c478b docs(json-researcher): fix grammer error 2 years ago
Zouhair AMAZZAL 0f7814fc4a docs(json-researcher): fix grammer error 2 years ago
Zouhair AMAZZAL 0dea7a8945 test(json-researcher): check echo is used 2 years ago
Zouhair AMAZZAL 3531d1b12f test(json-researcher): check if the submitted file name is correct 2 years ago
Zouhair AMAZZAL d0e9b91f73 docs(json-researcher): move subject to devops dir 2 years ago
Zouhair AMAZZAL c2e80f1033 test(json-researcher): add shell type exec && fix permission to scripts 2 years ago
Zouhair AMAZZAL b1762c3aac feat(json-researcher): add subject, test and solution for new a exercise 2 years ago
Zouhair AMAZZAL 51c804a135 docs(head-and-tail): fix grammer error 2 years ago
Zouhair AMAZZAL 0e0f86dfed docs(head-and-tail): fix grammer error 2 years ago
Zouhair AMAZZAL 6467fd10fa test(head-and-tail): check if the submitted file is correct and check if echo is used 2 years ago
Zouhair AMAZZAL 47aa2ae008 docs(head-and-tail): move subject to devops dir 2 years ago
Zouhair AMAZZAL abf236eac3 test(head-and-tail): add shell type exec && fix permission to scripts 2 years ago
Zouhair AMAZZAL 75dc52bec5 docs(head-and-tail): add google and man reminder in doc 2 years ago
Zouhair AMAZZAL cbdc5c4a6f feat(head-and-tail): add subject, test and solution for new a exercise 2 years ago
Zouhair AMAZZAL 40395c5dac docs(find-files-extension): fix grammer error 2 years ago
Zouhair AMAZZAL 6712ad9dea test(find-files-extension): check if the submitted file is correct and check if echo is used 2 years ago
Zouhair AMAZZAL ebde98d95d docs(find-files-extension): move subject to devops dir 2 years ago
Zouhair AMAZZAL 1f284b5c43 feat(find-files-extention): add subject, test and solution for new a exercise 2 years ago
nprimo 7f769ef487 docs(manipulate-entries): fix typo 2 years ago
nprimo 722edd9e69 docs(manipulate-entries): add usage section 2 years ago
jrosendo 0cb639701a docs(checknumber): added subject 2 years ago
jrosendo 6802353d6e docs(countalpha): ran prettier 2 years ago
jotapero 3e36a8e0e8 docs(countalpha): fix subject 2 years ago
jotapero 60f5e0bfd4 docs(countalpha): fix subject 2 years ago
hamza a4c46c3378 docs(countAlpha): add subject 2 years ago
jrosendo 2bd32ad039 docs(removeDuplicate): fixed subject 2 years ago
jotapero e7d839f162 docs(removeDuplicate): fix subject 2 years ago
hamza 73ea4f4110 DEV-3451 docs(removeDuplicate):add subject 2 years ago
jrosendo 099e1d68ae fix(binarycheck): fix branch 2 years ago
jrosendo 29209baacc fix(printifnot): fix branch 2 years ago
Roberto Catini 2cc1009564 rephrase presentation of the input file 2 years ago
jrosendo 9bbefc7f89 fix(countcharacter): added count character 2 years ago
jrosendo 3a08d55a2f fix(binarycheck): fix branch 2 years ago
jrosendo b499b84ce3 fix(getascii): replaced wrong exercise 2 years ago
jrosendo 2f46d7e8c6 chore(getascii): fixing conflicts 2 years ago
nprimo f659ea6d86 docs(ascii-art): implement suggestions 2 years ago
nprimo d58f8e8e38 docs(ascii-art): add details to make audits consistent 2 years ago
jotapero 189ad964c3 docs(displayP): created new subject 2 years ago
jrosendo b1960dc26b docs(only1): fixed subject 2 years ago
hamza 36ffad787d DEV-3387 fix the title 2 years ago
hamza 9c280eaff1 DEV-3387 docs(only1):add subject 2 years ago
jrosendo 816f05e228 docs(getascii): ran prettier format 2 years ago
jrosendo d72e8f3c1f fix(getAlpha): removed unnecessary file 2 years ago
jrosendo 5abc1e59a8 docs(getAlpha): fixed subject 2 years ago
jotapero 256b470992 docs(getAlpha): fix subjects 2 years ago
jotapero 7942764119 fix(getAlpha): fix removed file 2 years ago
jrosendo 76155b8086 docs(sliceadd): ran prettier format 2 years ago
jrosendo 2e886a02cd docs(sliceAdd): fixed subject 2 years ago
jotapero 44e4eb1dfe docs(sliceAdd): fix subject 2 years ago
hamza 27302761e8 DEV-3414 docs(SliceAdd):add subject 2 years ago
jrosendo 4dd8e9ccca docs(removeslice): ran prettier format 2 years ago
jrosendo a28ac1ea50 docs(sliceRemove): fixed subject 2 years ago
jotapero 0fe2165844 docs(sliceRemove): fix subject 2 years ago
hamza 85bec091bb DEV3415 docs(sliceRemove):add subject 2 years ago
nprimo de95b3b572 refactor(friend-support): improve single test clarity 2 years ago
nprimo ab38fc622a refactor(friend-support): start and kill server for each test 2 years ago
nprimo d3fa6a5355 feat(friend-support): add random factor to tests 2 years ago
nprimo 446924e348 refactor(friend-support): implement suggested changes 2 years ago
nprimo d189e1deea docs(fried-support): clarify subject 2 years ago
nprimo e2ece47510 feat(Dockerfile): update apline version use 2 years ago
nprimo 380ad0dc3e feat(friend-support_test): update tests 2 years ago
nprimo 50c73c0af3 feat(friend-support): add draft test 2 years ago
nprimo f179d6e09f feat(tests): update script to use fetch in node tests 2 years ago
nprimo 3f07f9dc5f feat(friend-support): add subject for new exercise 2 years ago
jrosendo be637efb0d chore(returna): testing prettier 2 years ago
jrosendo 740da8eef8 chore(returna): testing prettier 2 years ago
jrosendo 4a514e6f3a chore(returna): testing prettier 2 years ago
jrosendo c189bdd64d chore(returna): testing prettier 2 years ago
jrosendo 08cedb74d3 docs(returna): created a subject for returna exercise 2 years ago
jrosendo a8cae3aa7c docs(byebyefirst): ran prettier format 2 years ago
jrosendo 3bfd1de5a8 docs(byebyefirst): fix typo 2 years ago
jrosendo 1e09e6b367 fix(byebyefirst): fix folder 2 years ago
estlop 493375231a docs: Write readme for byebyefirst subject 2 years ago
jrosendo 5c8be6373d docs(issamestring): fix typo 2 years ago
Mohamed Zaboub d601a9ff55 chore: replace spaces by tabulation 2 years ago
Mohamed Zaboub be7ac7ee70 add(subjects): issamestring subject 2 years ago
jrosendo 9962ae8f5b docs(rectperimeter): added output example 2 years ago
jrosendo f6de74789c docs(rectperimeter): fix subject 2 years ago
MOHAMED a8ddec8fc3 fix: remove number backticks 2 years ago
Mohamed Zaboub 1982384bbb add(subject): rectperimeter exercise 2 years ago
jrosendo 61f2b9550f docs(sumascii): ran prettier format 2 years ago
jrosendo 6ad8474527 docs(sumascii): fix subject 2 years ago
jrosendo 1cb6a5ea01 docs(sumascii): fix subject 2 years ago
estlop e202c2ca27 docs: Address example of usage as per review 2 years ago
estlop ab36a0cd88 Add readme file for sumascii subject 2 years ago
jrosendo 118766b2d7 docs(multorsum): ran prettier format 2 years ago
jrosendo 3d8156f44c docs(multorsum): rephrase one sentence 2 years ago
jrosendo 82ac6cd676 docs(multorsum): fix subject 2 years ago
estlop 2c324911d5 docs: fix typo 2 years ago
estlop c98b517c71 docs: Add returning type 2 years ago
estlop d438e5f04a docs: Write readme for multorsum subject 2 years ago
jrosendo 39c8bd1683 docs(replaceeven): ran prettier format 2 years ago
jrosendo b57752f5f9 docs(replaceeven): fix typos 2 years ago
jrosendo 420d54d1cc docs(replaceeven): fix subject 2 years ago
Mohamed Zaboub 3f986cebc1 add(replaceeven): subject 2 years ago
jrosendo 2b02ed5fbd docs(cameltosnakecase): ran prettier format 2 years ago
jrosendo 257d088144 docs(cameltosnake): added output case 2 years ago
jrosendo a0de7068d6 docs(cameltosnakecase): fix subject 2 years ago
Hamza elkhatri 88ff699bc1 docs(camelToSnakeCase) : rewrite the description 2 years ago
Hamza elkhatri 10c2f1501d docs(CamelTosnackCase): rewrite description and fix output console 2 years ago
Hamza elkhatri 04bf6eb2b4 rewrite description 2 years ago
Hamza elkhatri 346cadb3d9 Update README.md 2 years ago
Hamza elkhatri 88d99aaa97 Update README.md 2 years ago
Hamza elkhatri b260bda961 fix:rewrite description , and change the output 2 years ago
Hamza elkhatri d404e2dc12 Update README.md 2 years ago
Hamza elkhatri 292e9b8bae Update README.md 2 years ago
hamza 82762eaac7 subject(camelTosnackCase): add readme 2 years ago
jrosendo 06c15846ef docs(weareunique): fix typos 2 years ago
jrosendo 8450a159e4 docs(weareunique): fixed subject 2 years ago
MSilva95 6ea5f04a3b remove $ to avoid confusion 2 years ago
zainab Dnaya 52cb3a902d Update README.md 2 years ago
zainab Dnaya 1431f1512c Update README.md 2 years ago
zainab Dnaya 7f43129173 Update README.md 2 years ago
zainabdnaya 379a0543eb corrected 2 years ago
zainabdnaya ebf4c17716 corrected 2 years ago
zainabdnaya 1b9ffc115f corrected 2 years ago
zainabdnaya 8ebe3d1739 correcte output 2 years ago
zainabdnaya d272fe67aa weareunique subject 2 years ago
jrosendo e519af63e1 docs(argSort): fixed subject 2 years ago
jrosendo e5928b32f2 docs(isSorted): fixed subject 2 years ago
MSilva95 13ccbfb416 typo 2 years ago
zainab Dnaya 2b964e5a5a Update README.md 2 years ago
zainab Dnaya 1652945c13 Update README.md 2 years ago
zainabdnaya ffe99b1c56 corrected 2 years ago
zainabdnaya cb249fb62f corrected 2 years ago
zainabdnaya f0dede7d26 corrected 2 years ago
zainabdnaya 9e48168481 corrected 2 years ago
zainabdnaya aad7414b31 corrected 2 years ago
zainabdnaya 2cb93a8948 corrected 2 years ago
zainabdnaya 7f5ed6e2a4 add test 2 years ago
zainabdnaya ae54d0242e corrected 2 years ago
zainabdnaya da3072dbcc corrected 2 years ago
zainabdnaya a9aefbd204 subject argsort 2 years ago
zainabdnaya 175b79f1ed argsort subject 2 years ago
zainabdnaya 1e31c9e1ba argsort subject 2 years ago
zainabdnaya 5d501ff8be issirted subject 2 years ago
zainabdnaya 8913aa6410 issirted subject 2 years ago
jrosendo fb90a96eec docs(frontback): ran prettier format 2 years ago
jrosendo d5a8d222e7 docs(frontback): added paragraph 2 years ago
jrosendo c18f05927c docs(frontback): fixed subject 2 years ago
Hamza elkhatri e9193c30b7 Update README.md 2 years ago
Hamza elkhatri 7fd30876e7 Update README.md 2 years ago
hamza 814fbd2c0e fix(name):replace name of file by frontback 2 years ago
Hamza elkhatri c86e37cef7 Update README.md 2 years ago
Hamza elkhatri 9bff4b857b Update README.md 2 years ago
Hamza elkhatri 7ae7dc15d8 Update README.md 2 years ago
Hamza elkhatri adc4ca30c6 Remove one level of bullet points 2 years ago
Hamza elkhatri 79dac93e46 Update README.md 2 years ago
hamza da9488a80c add inscrutions title and edit title 2 years ago
hamza c17271b4f7 remove duplicated title 2 years ago
hamza a4b8953fa7 fix(bracket): add bracket to \n 2 years ago
hamza 6322b1f4e0 feat: add new exam exercise 2 years ago
jrosendo 4fad8d25ca docs(canyoucount): ran prettier format 2 years ago
jrosendo f6a0cc925c docs(canyoucount): fix subject 2 years ago
estlop 8d36aa1317 Add more examples of tests as per review 2 years ago
estlop 1d0cf358fc docs: Add readme for canyoucount subject #1258 2 years ago
Harry 139270b565
fix(deploy): server directory path 2 years ago
jrosendo 76739f7d83 docs(displayS): fixed subject 2 years ago
jotapero fee07c8249 docs(displayS): fix subject console output 2 years ago
hamza 304c928293 DEV-3389 docs(DisplayS):typo 2 years ago
hamza de6cfddda6 DEV-3389 rename the dir and title 2 years ago
hamza 00e8903bc1 DEV-3389 docs(onlys):add subject 2 years ago
jrosendo 2afc50179b style(reversesecondhalf): ran Prettier 2 years ago
jrosendo 8d11216438 docs(reversesecondhalf): made subject more clear 2 years ago
jrosendo ab2e4628b0 docs(reverseSecondHalf): fix subject 2 years ago
jotapero 3a26f0a94c docs(reverseSecondHalf): fix subject 2 years ago
zainab Dnaya 0429578368 Correct the Subject 2 years ago
zainab Dnaya cdf5ac7892 Update README.md 2 years ago
zainab Dnaya d8b5cb4e2d Update README.md 2 years ago
zainab Dnaya 4fff8bd5c9 Update README.md 2 years ago
zainabdnaya b3fb448f62 feat: subject of ReverseSecondHalf 2 years ago
zainabdnaya 29524526c4 feat: subject of ReverseSecondHalf 2 years ago
jrosendo b07d713253 docs(onlyB): fix subject 2 years ago
jrosendo 8906eab7b6 docs(onlyB): fix subject 2 years ago
Hamza elkhatri e02dce6987 fix the title 2 years ago
hamza 2fcf16d697 DEV-3386 docs(onlyB) : add subject 2 years ago
hamza 792b2f9b6f DEV-3386 docs(onlyb):add subject 2 years ago
jrosendo 7dea33670b docs(onlyF): fixed subject 2 years ago
jrosendo 8ad42033d8 docs(onlyF): fixed subject 2 years ago
Hamza elkhatri cf5dd2d70d Update README.md 2 years ago
hamza 79c96d1a7d DEV-3385 docs(onlyf):add subject 2 years ago
davhojt d94c1c3f4f docs(go-reloaded): add list of valid vowels 2 years ago
eslopfer b391949bfb docs(printstr): clarify and make accurate usage example 2 years ago
eslopfer 00177d71b4 docs(piscine-go): remove extra new line being printed in the example 2 years ago
Dani 0c771833ba Incorrect table for B donation: B can't donate to O+, O- 2 years ago
Dias Kappassov 29532816bd Update README.md 2 years ago
eslopfer 4f0e84fed5 docs(own-and-return): split long comment in two lines 2 years ago
eslopfer 3dd925866f docs(own-and-return): add commas 2 years ago
eslopfer 64274236fb docs(own-and-return): remove space 2 years ago
eslopfer 800c6067f0 docs(own-and-return): make usage example clearer 2 years ago
eslopfer 0f50a371e1 docs(own-and-return): modify as per review 2 years ago
eslopfer bb0661422d refactor(own-and-return): rename according to what is being asked to do now 2 years ago
eslopfer 0fc87521e6 docs(print-and-consume): add description of exercise 2 years ago
eslopfer 36fe2fd393 docs(print-and-consume): write partial description of subject 2 years ago
eslopfer 4c837d150e refactor(print-and-consume): change name to follow conventions 2 years ago
eslopfer 982c87d34d docs(print_and_consume): description of exam exercise 2 years ago
Michele Sessa c6a2e5d80a chore(office_worker): add an extra empty line for prettier 2 years ago
Michele Sessa dba6a14d2c docs(office_worker): specify expected behaviour for invalid in puts 2 years ago
mikysett ccc0a2dc0a feat(office_worker): add new exercise for rust exams 2 years ago
miguel fa28c2e03d docs(zappy): adding clarifications to the readme 2 years ago
eslopfer bff08d50d9 docs(subjects): add link to official docs 2 years ago
Michele Sessa 1910f00925 docs(drop_the_blog): make subject prettier compliant 2 years ago
Michele Sessa f47d73dd23 feat(drop_the_blog): add exercise for rust exams 2 years ago
nprimo be03753c56 fix(ascii-art-justify): fix audit request 2 years ago
Maxim Mihajlov c66a05c621 docs(ascii-art-justify): fix audit 2 years ago
nprimo 75da5b3fcd docs(prime_checker): update subject 2 years ago
nprimo 5e828aa968 docs(prime_checker): update subject 2 years ago
nprimo a17977de9b feat(prime_checker): simplify example main 2 years ago
nprimo 92d91c30f8 feat(prime_checker): add new rust exercise 2 years ago
nprimo 6becf34972 docs(get_document_id): update subject 2 years ago
nprimo 6e10678bbc docs(get_document_id): make main function consistent with instructions 2 years ago
nprimo 8270fab4d1 docs(get_document_id): update expected function and structures 2 years ago
nprimo a769381cbd feat(get_document_id): add new rust exercise 2 years ago
nprimo 97e68708b6 docs(lucas_number): improve subject 2 years ago
nprimo 6edb6f640e feat(lucas_number): add new rust exercise 2 years ago
Michele Sessa 0af2665526 docs(car_rental): make the goals more clear 2 years ago
Michele Sessa fc14783654 feat(car_rental): add new exercise for rust exams 2 years ago
Bakdaulet Ye b3508822d0 More clear instructions 2 years ago
eslopfer 548ee49fef docs(check-user-name): fix typo 2 years ago
eslopfer d2bb07b78f refactor(check-user-name): change name to keep consistency with the naming convention 2 years ago
eslopfer ca51a72877 docs(check_user_name): highlight word for better readability 2 years ago
eslopfer a9e1218ff4 docs(check_user_name): fix incoherent number 2 years ago
eslopfer 4b9922772f docs(check_user_name): fix typo 2 years ago
eslopfer 3cfd4b2844 docs(check_user_name): fix typo 2 years ago
eslopfer 67c543130c docs(check_user_name): dont include chec_user_name as associated as per the review 2 years ago
eslopfer 7483b922e8 docs(check_user_name): use backticks instead of asterisks` 2 years ago
eslopfer c7f50f5d24 docs(check_user_name): fix typo 2 years ago
eslopfer 6fec3d5899 docs(check_user_name): rename to keep conventions 2 years ago
eslopfer b1e2b3029a docs(check_user_name): fix typo 2 years ago
eslopfer 1c1966f536 docs(check_user_name): implement description of exercise 2 years ago
Michele Sessa f1656004ed feat(format_me): add new exercise for rust exams 2 years ago
Michele Sessa ae3772b29f chore(moving_targets): remove spaces in empty line 2 years ago
mikysett 9d8f2678c4 feat(moving_targets): add new exercise for rust exams 2 years ago
nprimo 40007e2650 docs(dress_code): improve subject style 2 years ago
nprimo 4b22362c2b docs(dress_code): improve subject format 2 years ago
nprimo f99f57537f feat(dres_code): add new rust exercise 2 years ago
eslopfer f579e040dc docs(smallest): specify what to do when the hashmap is empty 2 years ago
eslopfer 71a2c55a83 docs(smallest): remove positive numbers constraint 2 years ago
eslopfer f6251d8dfe docs(smallest): add readme with description of subject 2 years ago
eslopfer dc80b79745 docs(public/subjects): add alt text for images 2 years ago
eslopfer 3703c92b28 docs(public/subjects): add document on how to lint markdown files to keep consistency 2 years ago
mikysett 53f7ded2f2 refactor(negative_spelling): improve function name readability 2 years ago
mikysett 2d8f1bb160 feat(negative_spelling): create new exam exercise for rust 2 years ago
eslopfer 15f5814f33 docs(modify_letter): remove reference to what to do on edge cases 2 years ago
eslopfer b4b9480eec docs(modify_leter): modify example strings to make them different as in previous exercises 2 years ago
eslopfer 24329d91b2 docs(modify_letter): Add missing . 2 years ago
eslopfer aaf6fed9d9 docs(modify_letter): specify what to do when there is an empty string or an empty letter 2 years ago
eslopfer b587916143 docs(modify_letter): correct incorrect examples 2 years ago
eslopfer 812e336480 docs(modify_letter): fix wrong syntax to refer to a char value 2 years ago
eslopfer 0a83ac648b docs(modify_letter): add description of the subject 2 years ago
miguel da871819d9 docs(zappy): giving a tip instead of a command 2 years ago
miguel e6b8fe1edd docs(zappy): fixing the subject in zappy 2 years ago
miguel 1e49439dd3 docs(zappy): fixing the subject in zappy 2 years ago
miguel 54c0c3b19d docs(zappy): fixing the subject in zappy 2 years ago
miguel 84392f8ebb docs(zappy): fixing the subject and audit in zappy 2 years ago
miguel 595368a3ca docs(zappy): fixing the subject in zappy 2 years ago
miguel cbbc175648 docs(zappy): fixing the audit in zappy 2 years ago
miguel 987a440971 docs(zappy): fixing the audit in zappy 2 years ago
miguel 5bb3cf72f2 docs(zappy): changing zappy subject 2 years ago
miguel 434c117b17 docs(zappy): adding an image as an example to the subject 2 years ago
miguel f2fc936e2f docs(zappy): minor changes and corrections to the audit and subject 2 years ago
miguel 9cfef991a1 docs(zappy): fixing the audit and subject 2 years ago
Hamza elkhatri dea5debfeb fix typo 2 years ago
zainabdnaya 2e8125f4c8 typo modification 2 years ago
zainabdnaya 0a4373f6af typo modification 2 years ago
hamza cd549fbe74 add audit and fix typo 2 years ago
zainabdnaya 4894db9f47 Zappy Project 2 years ago
nprimo c0d3cddadc fix(keycodes-symphony-dom test): redefine function 2 years ago
mikysett 61673c3614 feat(organize_garage): add new exercise for rust exams 2 years ago
nprimo c46c81e469 docs(count_factorial_steps): improve subject readibility 2 years ago
nprimo 5fd392a741 feat(count_factorial_steps): add new rust exercise 2 years ago
nprimo 6c11610c4f docs(matrix_multiplication): update subject 2 years ago
nprimo ac61045fd4 feat(matrix_multiplication): add new rust exam exercise 2 years ago
nprimo f1728e8f8c docs(min_and_max): make example and output given coherent 2 years ago
nprimo eb8c882ba8 fix(min_and_max): correct placeholder in example 2 years ago
nprimo e3d0f81d6a refactor(min_and_max): simplify example 2 years ago
nprimo 118cf8457f docs(min_and_max): add new rust exam exercise 2 years ago
mikysett 286d6f09b6 feat(scytale_decoder): add new exercise for rust exams 2 years ago
Harry 406fe7f6b8
fix(preseed): use single ssh key 2 years ago
  1. 57
      .github/ISSUE_TEMPLATE/bug_report.md
  2. 21
      .github/ISSUE_TEMPLATE/feature_request.md
  3. 46
      .github/workflows/docker-images.yml
  4. 50
      docs/reviews.md
  5. 2
      js/tests/Dockerfile
  6. 18
      js/tests/bloody-sunday_test.js
  7. 135
      js/tests/friend-support_test.mjs
  8. 147
      js/tests/gatecrashers_test.mjs
  9. 21
      js/tests/keycodes-symphony-dom_test.mjs
  10. 1
      js/tests/race_test.js
  11. 18
      js/tests/sunny-sunday_test.js
  12. 3
      js/tests/test.mjs
  13. 197
      js/tests/uninvited_test.mjs
  14. 37
      js/tests/veterinary_test.js
  15. 18
      sh/debian/configure.sh
  16. 2
      sh/debian/preseed.cfg
  17. 2
      sh/tests/Dockerfile
  18. 99
      sh/tests/append-output_test.sh
  19. 30
      sh/tests/array-selector_test.sh
  20. 54
      sh/tests/auto-exec-bin_test.sh
  21. 20
      sh/tests/auto-jobs_test.sh
  22. 34
      sh/tests/bin-status_test.sh
  23. 28
      sh/tests/burial_test.sh
  24. 86
      sh/tests/calculator_test.sh
  25. 16
      sh/tests/change-struct_test.sh
  26. 28
      sh/tests/check-user_test.sh
  27. 27
      sh/tests/comparator_test.sh
  28. 18
      sh/tests/count-files_test.sh
  29. 11
      sh/tests/custom-ls/folder1/.hidden
  30. 1
      sh/tests/custom-ls/folder1/asd
  31. 199
      sh/tests/custom-ls/folder1/hello
  32. 1
      sh/tests/custom-ls/folder1/ls-test
  33. 42
      sh/tests/custom-ls_test.sh
  34. 18
      sh/tests/details_test.sh
  35. 44
      sh/tests/dir-info_test.sh
  36. 37
      sh/tests/division_test.sh
  37. 15
      sh/tests/easy-conditions_test.sh
  38. 12
      sh/tests/easy-perm/example.txt
  39. 16
      sh/tests/easy-perm/example2.txt
  40. 17
      sh/tests/easy-perm_test.sh
  41. 28
      sh/tests/env-format_test.sh
  42. 38
      sh/tests/file-checker_test.sh
  43. 17
      sh/tests/file-details_test.sh
  44. 127
      sh/tests/file-researcher/facts.txt
  45. 28
      sh/tests/file-researcher_test.sh
  46. 16
      sh/tests/file-struct_test.sh
  47. 0
      sh/tests/find-files-extension/folder1/file1.txt
  48. 0
      sh/tests/find-files-extension/folder1/file2.txt
  49. 0
      sh/tests/find-files-extension/folder1/file3.txt
  50. 0
      sh/tests/find-files-extension/folder1/test4.sh
  51. 0
      sh/tests/find-files-extension/folder2/fileInsideAfolder4.txt
  52. 0
      sh/tests/find-files-extension/folder2/test.sh
  53. 0
      sh/tests/find-files-extension/folder2/testtxt/fileInsideAfolder5.txt
  54. 0
      sh/tests/find-files-extension/folder2/testtxt/test/fileInsideAfolder6.txt
  55. 0
      sh/tests/find-files-extension/folder2/testtxt/test/lol.sh
  56. 35
      sh/tests/find-files-extension_test.sh
  57. 0
      sh/tests/find-files/folder1/ab
  58. 0
      sh/tests/find-files/folder1/ac
  59. 0
      sh/tests/find-files/folder1/az
  60. 0
      sh/tests/find-files/folder1/bz
  61. 0
      sh/tests/find-files/folder1/cz
  62. 0
      sh/tests/find-files/folder1/za!
  63. 0
      sh/tests/find-files/folder2/aa/aa
  64. 0
      sh/tests/find-files/folder2/aa/az
  65. 0
      sh/tests/find-files/folder2/aa/ba/ab
  66. 0
      sh/tests/find-files/folder2/aa/ba/bz
  67. 0
      sh/tests/find-files/folder2/ab
  68. 0
      sh/tests/find-files/folder2/ac
  69. 0
      sh/tests/find-files/folder2/alphabet
  70. 0
      sh/tests/find-files/folder2/az
  71. 0
      sh/tests/find-files/folder2/ba/aa/alphabetz!
  72. 0
      sh/tests/find-files/folder2/ba/aa/cz
  73. 0
      sh/tests/find-files/folder2/ba/aa/za!
  74. 0
      sh/tests/find-files/folder2/ba/ac
  75. 0
      sh/tests/find-files/folder2/ba/alphabetz
  76. 0
      sh/tests/find-files/folder2/bz
  77. 0
      sh/tests/find-files/folder2/cz
  78. 0
      sh/tests/find-files/folder2/za!
  79. 35
      sh/tests/find-files_test.sh
  80. 88
      sh/tests/grades_test.sh
  81. 29
      sh/tests/greatest-of-all_test.sh
  82. 19
      sh/tests/hard-conditions_test.sh
  83. 0
      sh/tests/hard-perm/0/.gitkeep
  84. 0
      sh/tests/hard-perm/1
  85. 0
      sh/tests/hard-perm/2
  86. 0
      sh/tests/hard-perm/3/.gitkeep
  87. 0
      sh/tests/hard-perm/4
  88. 0
      sh/tests/hard-perm/5
  89. 0
      sh/tests/hard-perm/6
  90. 0
      sh/tests/hard-perm/7
  91. 0
      sh/tests/hard-perm/8
  92. 0
      sh/tests/hard-perm/9
  93. 0
      sh/tests/hard-perm/A/.gitkeep
  94. 17
      sh/tests/hard-perm_test.sh
  95. 28
      sh/tests/head-and-tail_test.sh
  96. 24
      sh/tests/hello-devops_test.sh
  97. 40
      sh/tests/in-back-ground_test.sh
  98. 29
      sh/tests/in-the-dark_test.sh
  99. 20
      sh/tests/input-redirection_test.sh
  100. 69
      sh/tests/joker-num_test.sh
  101. Some files were not shown because too many files changed in this diff diff.show_more

57
.github/ISSUE_TEMPLATE/bug_report.md

@ -1,32 +1,53 @@
### Environment
---
name: 🐛 Bug report
about: Create a report to help us improve
title: "[BUG] "
labels: "🐛 bug"
assignees: ""
---
Device (web, mobile):
**Describe the bug**
A clear and concise description of what the bug/error is.
Operating system (Windows, macOS, Linux):
**Users**
Usernames of students/admin that are affected by the issue:
Browser (Chrome, Firefox, Safari, Brave):
**Severity**
Choose the severity label (❗minor), (‼ major), or (⚠ critical).
### Steps to reproduce the issue = what action results in the issue
**Type**
Choose the label (🖌 ui), (⚙ functionality), (🗂 documentation), or (🔐 security)
URL of the page:
**To Reproduce**
Steps to reproduce the behavior:
Steps to follow:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
1.
2.
**Workarounds**
Any known workarounds for the issue:
Usernames of students that are affected by the issue:
**Expected behavior**
A clear and concise description of what you expected to happen.
### Expected Result = How the software should have performed
**Attachments**
If applicable, add screenshots/videos/logs to help explain your problem.
<sub>Using tools like [Loom](https://chrome.google.com/webstore/detail/loom-for-chrome/liecbddmkiiihnedobmlmillhodjkdmb)</sub>
What was the expected outcome of the action taken in `step 3` ?
**Desktop (please complete the following information):**
### Actual Result = How the software actually performed
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
Actual outcome of the action taken in `step 3`
**Smartphone (please complete the following information):**
Error message that appears (if applicable)
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
### Visual Proof
Screenshots & Videos (using [Loom](https://chrome.google.com/webstore/detail/loom-for-chrome/liecbddmkiiihnedobmlmillhodjkdmb))
**Additional context**
Add any other context about the problem here.

21
.github/ISSUE_TEMPLATE/feature_request.md

@ -1,11 +1,28 @@
---
name: 🪄 Feature request
about: Suggest a feature or an enhancement for this project
title: "[FEATURE] "
labels: "🪄 feature"
assignees: ""
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Type**
Choose the label (🖌 ui), (⚙ functionality), (🗂 documentation), or (🔐 security)
**Expected benefit**
A clear and concise description of the expected benefit of the feature, including any relevant metrics or data to support its value:
**Target audience**
Who will benefit from this feature (e.g. users, developers, administrators):
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
**Additional context & attachments**
Add any other context, screenshots, or additional attachments, such as mockups or prototypes, to provide more context for the feature.

46
.github/workflows/docker-images.yml

@ -0,0 +1,46 @@
name: Docker Image CI
on:
push:
branches: ['master']
pull_request:
branches: ['master']
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to docker.01-edu.org Registry
uses: docker/login-action@v2.1.0
with:
registry: docker.01-edu.org
username: ${{ secrets.USER_DOCKER_01EDU_ORG }}
password: ${{ secrets.SECRET_DOCKER_01EDU_ORG }}
- name: Build the Sh Docker image
if: always()
run: |
docker build sh/tests/ --file sh/tests/Dockerfile --tag ghcr.io/01-edu/test-sh:latest
docker push ghcr.io/01-edu/test-sh:latest
- name: Build the JS Docker image
if: always()
run: |
docker build js/tests/ --file js/tests/Dockerfile --tag ghcr.io/01-edu/test-js:latest
docker push ghcr.io/01-edu/test-js:latest
- name: Build the DOM Docker image
if: always()
run: |
docker build . --file dom/Dockerfile --tag ghcr.io/01-edu/test-dom:latest
docker push ghcr.io/01-edu/test-dom:latest

50
docs/reviews.md

@ -0,0 +1,50 @@
# Reviews
## Context
Only unblocked bonus exercises can be reviewed, which are usually the last items of a quest.
Bonus exercises are available in quests 02 / 03 / 04 / 05 / 07 / 08 / 09.
<img width="1073" alt="Screenshot 2019-10-17 at 02.43.31" src="img/reviews/Screenshot 2019-10-17 at 02.43.31.jpg">
Making a review involves 2 students who are going to review each other's exercise.
Each user has to :
- **check** the code of the other one on Gitea. **You must add your reviewer as contributor in your repository so he/she can see your code**.
- **bet** if it is going to fail or succeed in the Review interface.
- **run** his own exercise in the Review interface to give a result to compare with the bet, and state if it was right or wrong.
## Usage
To submit an exercise to review and be reviewed, go to the `Review panel` on the right of the quest interface and click on the button to submit it :
<img width="1073" alt="Screenshot 2019-10-17 at 01.59.32" src="img/reviews/Screenshot 2019-10-17 at 01.59.32.jpg">
Then, when a match with another student who also wants to review is found, you will be notified :
<img width="1073" alt="Screenshot 2019-10-17 at 02.03.11" src="img/reviews/Screenshot 2019-10-17 at 02.03.11.jpg">
Once you and the other student have confirmed the match, you can go and check the code of the other student on their repository in the component `Your review` :
<img width="1073" alt="Screenshot 2019-10-17 at 02.05.46" src="img/reviews/Screenshot 2019-10-17 at 02.05.46.jpg">
When you have checked their code, those 4 steps will have to be completed to achieve the review :
- You have to bet if the exercise of the other student will fail or succeed after running the tester
- The other student has to do the same with your exercise and make his own bet, that you will see on the component `Review of your exercise`
<img width="1073" alt="Screenshot 2019-10-17 at 02.20.18" src="img/reviews/Screenshot 2019-10-17 at 02.20.18.jpg">
- Once the other student's bet is set, the tester button unblocks and you have to run it on your exercise to output the result determining if your exercise has failed or succeeded ; this result is compared to the other student's bet to determine if it was wrong or right
- The other student also has to run the tester on their exercise to determine their result and so whether your bet was wrong or right
<img width="1073" alt="Screenshot 2019-10-17 at 02.22.30" src="img/reviews/Screenshot 2019-10-17 at 02.22.30.jpg">
A bet is considered succeeded if it is equal to the tester output :
<img width="1073" alt="Screenshot 2019-10-17 at 02.24.04" src="img/reviews/Screenshot 2019-10-17 at 02.24.04.jpg">
You can have those 4 cases :
| bet | tester output | bet result |
| ------- | ------------- | ------------- |
| fail | failed | **succeeded** |
| fail | succeeded | **failed** |
| succeed | succeeded | **succeeded** |
| succeed | failed | **failed** |

2
js/tests/Dockerfile

@ -1,4 +1,4 @@
FROM alpine:3.16.0
FROM docker.01-edu.org/alpine:3.17.0
# Installs latest Chromium package.
RUN apk add --no-cache \

18
js/tests/bloody-sunday_test.js

@ -1,18 +0,0 @@
export const tests = []
const t = (f) => tests.push(f)
t(() => bloodySunday(new Date('0001-01-01')) === 'Monday')
t(() => bloodySunday(new Date('0001-01-02')) === 'Tuesday')
t(() => bloodySunday(new Date('0001-01-03')) === 'Wednesday')
t(() => bloodySunday(new Date('0001-01-04')) === 'Thursday')
t(() => bloodySunday(new Date('0001-01-05')) === 'Friday')
t(() => bloodySunday(new Date('0001-01-06')) === 'Saturday')
t(() => bloodySunday(new Date('0001-01-07')) === 'Monday')
t(() => bloodySunday(new Date('0001-12-01')) === 'Friday')
t(() => bloodySunday(new Date('1664-08-09')) === 'Saturday')
t(() => bloodySunday(new Date('2020-01-01')) === 'Monday')
t(() => bloodySunday(new Date('2048-12-08')) === 'Thursday')
Object.freeze(tests)

135
js/tests/friend-support_test.mjs

@ -0,0 +1,135 @@
import { once } from 'node:events'
import { spawn } from 'node:child_process'
import { mkdir, writeFile, chmod } from 'fs/promises'
import { join } from 'path'
export const tests = []
const fetch = _fetch // to redefine the real fetch
const port = 5000
export const setup = async ({ randStr }) => {
const dir = '.'
await mkdir(`${dir}/guests`, { recursive: true })
const randLastName = randStr()
const createFilesIn = ({ files, dirPath }) => {
Promise.all(
files.map(([fileName, content]) =>
writeFile(`${dirPath}/${fileName}`, JSON.stringify(content)),
),
)
}
const sendRequest = async (path, options) => {
const response = await fetch(`http://localhost:${port}${path}`, options)
const { status } = response
const headers = Object.fromEntries(response.headers)
let body = ''
try {
body = await response.json()
} catch (err) {
body = err
}
return { status, body, headers }
}
const startServer = async path => {
const server = spawn('node', [`${path}`])
const message = await Promise.race([
once(server.stdout, 'data'),
Promise.race([
once(server.stderr, 'data').then(String).then(Error),
once(server, 'error'),
]).then(result => Promise.reject(result)),
])
return { server, message }
}
return { tmpPath: dir, createFilesIn, randLastName, sendRequest, startServer }
}
const isServerRunningWell = async ({ path, ctx }) => {
const { server, message } = await ctx.startServer(path)
server.kill()
return message[0].toString().includes(port)
}
const testOneGuest = async ({ path, eq, ctx, randStr }) => {
const { server } = await ctx.startServer(path)
const randMsg = randStr()
const expBody = { message: randMsg }
const files = [[`mario_${ctx.randLastName}.json`, expBody]]
const dirName = 'guests'
const dirPath = join(ctx.tmpPath, dirName)
await ctx.createFilesIn({ dirPath, files })
const { status, body, headers } = await ctx.sendRequest(
`/mario_${ctx.randLastName}`,
{
method: 'GET',
},
)
server.kill()
return eq(
{
status: status,
body: body,
contentType: headers['content-type'],
},
{
status: 200,
body: expBody,
contentType: 'application/json',
},
)
}
const testServerFail = async ({ path, eq, ctx }) => {
const { server } = await ctx.startServer(path)
await chmod(`${ctx.tmpPath}/guests/mario_${ctx.randLastName}.json`, 0)
const { status, body, headers } = await ctx.sendRequest(
`/mario_${ctx.randLastName}`,
{
method: 'GET',
},
)
server.kill()
return eq(
{
status: status,
body: body,
contentType: headers['content-type'],
},
{
status: 500,
body: { error: 'server failed' },
contentType: 'application/json',
},
)
}
const testGuestNotThere = async ({ path, eq, ctx }) => {
const { server } = await ctx.startServer(path)
const { status, body, headers } = await ctx.sendRequest('/andrea_bianchi', {
method: 'GET',
})
server.kill()
return eq(
{
status: status,
body: body,
contentType: headers['content-type'],
},
{
status: 404,
body: { error: 'guest not found' },
contentType: 'application/json',
},
)
}
tests.push(isServerRunningWell, testOneGuest, testServerFail, testGuestNotThere)
Object.freeze(tests)

147
js/tests/gatecrashers_test.mjs

@ -0,0 +1,147 @@
import { once } from 'node:events'
import { spawn } from 'node:child_process'
import { mkdir, writeFile, access } from 'fs/promises'
import { join } from 'path'
export const tests = []
const fetch = _fetch // to redefine the real fetch
const port = 5000
export const setup = async ({}) => {
const dir = '.'
await mkdir(`${dir}/guests`, { recursive: true })
const createFilesIn = ({ files, dirPath }) =>
Promise.all(
files.map(([fileName, content]) =>
writeFile(`${dirPath}/${fileName}`, JSON.stringify(content)),
),
)
const sendRequest = async (path, options) => {
const response = await fetch(`http://localhost:${port}${path}`, options)
const { status } = response
const headers = Object.fromEntries(response.headers)
let body = ''
try {
body = await response.json()
} catch (err) {
body = err
}
return { status, body, headers }
}
const sendRequestWithAuth = async (guestName, auth, body) => {
let options = {
method: 'POST',
headers: {
body: JSON.stringify(body),
},
}
if (auth.len !== 0) {
options.headers.authorization =
'Basic ' + Buffer.from(auth).toString('base64')
}
return sendRequest(guestName, options)
}
const startServer = async path => {
const server = spawn('node', [`${path}`])
const message = await Promise.race([
once(server.stdout, 'data'),
Promise.race([
once(server.stderr, 'data').then(String).then(Error),
once(server, 'error'),
]).then(result => Promise.reject(result)),
])
return { server, message }
}
return {
tmpPath: dir,
createFilesIn,
sendRequest,
sendRequestWithAuth,
startServer,
}
}
const isServerRunningWell = async ({ path, ctx }) => {
const { server, message } = await ctx.startServer(path)
server.kill()
return message[0].toString().includes(port)
}
const testGoodRequests = async ({ path, eq, fail, ctx }) => {
const expectedBody = {
answer: 'yes',
drink: 'juice',
food: 'pizza',
}
const dirName = 'guests'
const dirPath = join(ctx.tmpPath, dirName)
const { server } = await ctx.startServer(path)
const newGuestNames = ['Ana_Riber', 'Rob_Frie', 'George_Harl']
const auths = [
'Caleb_Squires:abracadabra',
'Tyrique_Dalton:abracadabra',
'Rahima_Young:abracadabra',
]
for (var i = 0; i < 3; i++) {
const { status, body, headers } = await ctx.sendRequestWithAuth(
`/${newGuestNames[i]}`,
`${auths[i]}`,
expectedBody,
)
fail(await access(`${dirPath}/${newGuestNames[i]}.json`))
eq(
{ status: status, contentType: headers['content-type'], body: body },
{ status: 200, contentType: 'application/json', body: expectedBody },
)
}
server.kill()
return true
}
const testUnauthorizedRequests = async ({ path, eq, ctx }) => {
const body = {
answer: 'yes',
drink: 'juice',
food: 'pizza',
}
const { server } = await ctx.startServer(path)
const newGuestNames = [
'Super_Mario',
'Super_Mario',
'Super_Mario',
'Super_Mario',
]
const auths = [
'',
'LetMePass',
'Rahima_Young:wrongpass',
'Anonymus:abracadabra',
]
for (var i = 0; i < 3; i++) {
const { status } = await ctx.sendRequestWithAuth(
`/${newGuestNames[i]}`,
`${auths[i]}`,
body,
)
eq({ status: status }, { status: 401 })
}
server.kill()
return true
}
tests.push(isServerRunningWell, testGoodRequests, testUnauthorizedRequests)
Object.freeze(tests)

21
js/tests/keycodes-symphony-dom_test.mjs

@ -1,11 +1,12 @@
export const tests = []
export const setup = async ({ page }) => ({
getNotes: async () =>
await page.$$eval('.note', (nodes) => {
return nodes.map((note) => note.textContent)
}),
})
export const setup = async () => {
const getNotes = async (page) =>
await page.$$eval('.note', (nodes) => {
return nodes.map((note) => note.textContent)
})
return { getNotes }
}
const characters = `didyouhandlethekeydowneventcorrectly`
@ -14,7 +15,7 @@ tests.push(async ({ page, eq, ctx }) => {
for (const [i, character] of characters.split('').entries()) {
await page.keyboard.down(character)
const typed = characters.slice(0, i + 1).split('')
eq(await ctx.getNotes(), typed)
eq(await ctx.getNotes(page), typed)
}
})
@ -24,7 +25,7 @@ tests.push(async ({ page, eq, ctx }) => {
while (step < 10) {
await page.keyboard.down('Backspace')
const typed = characters.slice(0, characters.length - step).split('')
eq(await ctx.getNotes(), typed)
eq(await ctx.getNotes(page), typed)
step++
}
})
@ -32,8 +33,8 @@ tests.push(async ({ page, eq, ctx }) => {
tests.push(async ({ page, eq, ctx }) => {
// check that all the notes are cleared when Escape key is pressed
await page.keyboard.down('Escape')
const cleared = (await ctx.getNotes()).length === 0
eq(await cleared, true)
const cleared = (await ctx.getNotes(page)).length === 0
eq(cleared, true)
})
tests.push(async ({ page, eq }) => {

1
js/tests/race_test.js

@ -1,4 +1,3 @@
Promise.race = undefined
// /*/ // ⚡
export const tests = []
const t = (f) => tests.push(f)

18
js/tests/sunny-sunday_test.js

@ -0,0 +1,18 @@
export const tests = []
const t = (f) => tests.push(f)
t(() => sunnySunday(new Date('0001-01-01')) === 'Monday')
t(() => sunnySunday(new Date('0001-01-02')) === 'Tuesday')
t(() => sunnySunday(new Date('0001-01-03')) === 'Wednesday')
t(() => sunnySunday(new Date('0001-01-04')) === 'Thursday')
t(() => sunnySunday(new Date('0001-01-05')) === 'Friday')
t(() => sunnySunday(new Date('0001-01-06')) === 'Saturday')
t(() => sunnySunday(new Date('0001-01-07')) === 'Monday')
t(() => sunnySunday(new Date('0001-12-01')) === 'Friday')
t(() => sunnySunday(new Date('1664-08-09')) === 'Saturday')
t(() => sunnySunday(new Date('2020-01-01')) === 'Monday')
t(() => sunnySunday(new Date('2048-12-08')) === 'Thursday')
Object.freeze(tests)

3
js/tests/test.mjs

@ -8,6 +8,7 @@ import http from 'http'
import fs from 'fs'
global.window = global
global._fetch = fetch
global.fetch = url => {
// this is a fake implementation of fetch for the tester
// -> refer to https://devdocs.io/javascript/global_objects/fetch
@ -179,7 +180,7 @@ const runTests = async ({ url, path, code }) => {
new Promise((s, f) => {
timeout = setTimeout(f, 60000, Error('Time limit reached (1min)'))
}),
])
])
if (!(await waitWithTimeout) && !isDOM) {
throw Error('Test failed')
}

197
js/tests/uninvited_test.mjs

@ -0,0 +1,197 @@
import { once } from 'node:events'
import { spawn } from 'node:child_process'
import { mkdir, writeFile, chmod } from 'fs/promises'
import { join } from 'path'
import fs from 'node:fs/promises'
export const tests = []
const fetch = _fetch // to redefine the real fetch
const port = 5000
export const setup = async ({ randStr }) => {
const dir = '.'
await mkdir(`${dir}/guests`, { recursive: true })
const randomName = randStr()
const createFilesIn = ({ files, dirPath }) => {
Promise.all(
files.map(([fileName, content]) =>
writeFile(`${dirPath}/${fileName}`, JSON.stringify(content), {
flag: 'wx',
}),
),
).catch(reason => console.log(reason))
return true
}
const sendRequest = async (path, options) => {
const response = await fetch(`http://localhost:${port}${path}`, options)
const { status } = response
const headers = Object.fromEntries(response.headers)
let body = ''
try {
body = await response.json()
} catch (err) {
body = err
}
return { status, body, headers }
}
const startServer = async path => {
const server = spawn('node', [`${path}`])
const message = await Promise.race([
once(server.stdout, 'data'),
Promise.race([
once(server.stderr, 'data').then(String).then(Error),
once(server, 'error'),
]).then(result => Promise.reject(result)),
])
return { server, message }
}
return { tmpPath: dir, createFilesIn, randomName, sendRequest, startServer }
}
const testServerRunning = async ({ path, ctx }) => {
const { server, message } = await ctx.startServer(path)
server.kill()
return message[0].toString().includes(port)
}
const testRightStatusCode = async ({ path, ctx, randStr }) => {
const { server } = await ctx.startServer(path)
const { status } = await ctx.sendRequest(`/${ctx.randomName}`, {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: randStr(),
})
server.kill()
if (status != 201) return false
return true
}
const testRightContentType = async ({ path, ctx, randStr }) => {
const { server } = await ctx.startServer(path)
const { headers } = await ctx.sendRequest(`/${ctx.randomName}`, {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: randStr(),
})
server.kill()
if (headers['content-type'] != 'application/json') return false
return true
}
const testServerFail = async ({ path, eq, ctx, randStr }) => {
const { server } = await ctx.startServer(path)
await chmod(`${ctx.tmpPath}/guests`, 0).catch(reason => console.log(reason))
const { status, body, headers } = await ctx.sendRequest(
`/${ctx.randomName}`,
{
method: 'POST',
body: randStr(),
},
)
await chmod(`${ctx.tmpPath}/guests`, 0o777)
server.kill()
return eq(
{
status: status,
body: body,
'content-type': headers['content-type'],
},
{
status: 500,
body: { error: 'server failed' },
'content-type': 'application/json',
},
)
}
const testFileCreated = async ({ path, ctx, randStr }) => {
const { server } = await ctx.startServer(path)
const randomName = randStr()
await ctx.sendRequest(`/${randomName}`, {
body: randStr(),
method: 'POST',
})
const dirName = 'guests'
const dirPath = join(ctx.tmpPath, dirName)
let accessWorked = true
server.kill()
await fs
.access(`${dirPath}/${randomName}.json`, fs.constants.F_OK)
.catch(reason => {
accessWorked = false
console.log(reason)
})
return accessWorked
}
const testFileContent = async ({ path, ctx, randStr }) => {
const { server } = await ctx.startServer(path)
const randomName = randStr()
const body = randStr()
await ctx.sendRequest(`/${randomName}`, {
body: body,
method: 'POST',
})
const dirName = 'guests'
const dirPath = join(ctx.tmpPath, dirName)
server.kill()
let content = ''
await fs
.readFile(`./${dirPath}/${randomName}.json`, 'utf8', (err, data) => {
if (err) {
console.error(err)
return 'error when reading file'
}
return data
})
.then(data => {
if (data === 'error when reading file') return
content = data
})
return body === content
}
const testBodyOnSuccess = async ({ path, ctx, eq, randStr }) => {
const { server } = await ctx.startServer(path)
const randomBody = { message: randStr() }
const { body } = await ctx.sendRequest(`/${ctx.randomName}`, {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify(randomBody),
})
server.kill()
return eq(
{
body: body,
},
{
body: randomBody,
},
)
}
tests.push(
testServerRunning,
testRightStatusCode,
testRightContentType,
testBodyOnSuccess,
testFileCreated,
testFileContent,
testServerFail,
)
Object.freeze(tests)

37
js/tests/veterinary_test.js

@ -0,0 +1,37 @@
export const tests = []
const testProperties = () => {
return (
Array.isArray(veterinary.animalKnowledge) &&
typeof veterinary.canTreat === 'function' &&
typeof veterinary.respondClient === 'function'
)
}
const testCanTreat = () => {
veterinary.animalKnowledge.push('dog', 'cat', 'elephant')
return (
veterinary.canTreat('dog') &&
veterinary.canTreat('cat') &&
veterinary.canTreat('elephant') &&
!veterinary.canTreat('') &&
!veterinary.canTreat('goldfish')
)
}
const testRespondClient = () => {
veterinary.animalKnowledge.push('parrot')
const vetResponse1 = veterinary.respondClient('Jack', 'parrot')
const vetResponse2 = veterinary.respondClient('Matias', 'cobra')
return (
vetResponse1.includes('Jack') &&
vetResponse1.toLowerCase().includes('yes') &&
vetResponse2.includes('Matias') &&
vetResponse2.toLowerCase().includes('no')
)
}
tests.push(testProperties, testCanTreat, testRespondClient)
Object.freeze(tests)

18
sh/debian/configure.sh diff.vendored

@ -258,9 +258,23 @@ function deployCore() {
# Deploy Runner
echo -e "Deploying Runner service: \n "
cd /root/core/runner
# Get the latest release version tag and create latest branch
tag=$(git describe --tags $(git rev-list --tags --max-count=1))
git checkout $tag -b latest
git describe --tags
# Set upstream to latest
git branch --set-upstream-to=origin/latest latest
# Get user auth infor for the runner
echo -e "Enter the runner Registry password: "
read registryPassword
REGISTRY_PASSWORD=$registryPassword ./run.sh
echo -e "Enter the runner GitHub username: "
read githubUsername
echo -e "Enter the runner GitHub token: "
read githubToken
REGISTRY_PASSWORD=$registryPassword GITHUB_USERNAME=$githubUsername GITHUB_TOKEN=$githubToken ./run.sh
echo -e "Runner service is up! \n"
}
@ -289,7 +303,7 @@ function clonePlatform() {
echo "Enter the target directory for the platform $(tput setaf 2)[System: $(pwd)/$(hostname)]$(tput sgr0):"
read serverDir
git clone git@github.com:01-edu/all.git $serverDir
cd /$serverDir
cd $serverDir
# Generate platform environment file automatically
./generate_env.sh --gen
}

2
sh/debian/preseed.cfg diff.vendored

@ -2,7 +2,7 @@
d-i anna/choose_modules string network-console
d-i preseed/early_command string anna-install network-console
d-i network-console/authorized_keys_url string https://github.com/{Frenchris,kigiri,HarryVasanth}.keys
d-i network-console/authorized_keys_url string https://github.com/frenchris.keys
d-i network-console/password-disabled boolean true
d-i debian-installer/locale string en_US

2
sh/tests/Dockerfile

@ -1,7 +1,7 @@
FROM docker.01-edu.org/debian:10.9-slim
RUN apt-get update
RUN apt-get -y install jq curl
RUN apt-get -y install jq curl tree apt-utils
WORKDIR /app/assets/superhero
RUN curl --remote-name --location https://demo.01-edu.org/assets/superhero/all.json

99
sh/tests/append-output_test.sh

@ -0,0 +1,99 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/append-output.sh"
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
if test ! -e append-output; then
mkdir append-output
cat <<EOF >append-output/results.txt
"In the End" - Linkin Park
"Crawling" - Linkin Park
"Elevation" - U2
"Get the Party Started" - Pink
"Lady Marmalade" - Christina Aguilera, Lil' Kim, Mya, Pink
EOF
cat <<EOF >append-output/songs.txt
"Breathe" - Faith Hill
"It Wasn't Me" - Shaggy featuring Ricardo "RikRok" Ducent
"Hanging by a Moment" - Lifehouse
"Shape of My Heart" - Backstreet Boys
"Thank You" - Dido
"I'm Like a Bird" - Nelly Furtado
"Family Affair" - Mary J. Blige
"Fallin'" - Alicia Keys
"All for You" - Janet Jackson
"I Wanna Know" - Joe
"U Remind Me" - Usher
"U Got It Bad" - Usher
"I'm a Believer" - Smash Mouth
"Get the Party Started" - Pink
"Wherever You Will Go" - The Calling
"In the End" - Linkin Park
"Loser" - Beck
"Get Ur Freak On" - Missy Elliott
"I'm Real" - Jennifer Lopez
"Butterfly" - Crazy Town
"Crawling" - Linkin Park
"I'm a Slave 4 U" - Britney Spears
"Elevation" - U2
"Lady Marmalade" - Christina Aguilera, Lil' Kim, Mya, Pink
"Play" - Jennifer Lopez
"I'm Just a Kid" - Simple Plan
"Imitation of Life" - R.E.M.
"Big Pimpin'" - Jay-Z
"Stutter" - Joe featuring Mystikal
"I Wish" - R. Kelly
"This Is the Night" - Clay Aiken
"Hella Good" - No Doubt
"I Know" - Dionne Farris
"I'll Be Missing You" - Puff Daddy and Faith Evans featuring 112
"I Try" - Macy Gray
"Thong Song" - Sisqo
"Survivor" - Destiny's Child
"I Want It That Way" - Backstreet Boys
"Bad Day" - Daniel Powter
"I'm Like a Bird" - Nelly Furtado
"I Need to Know" - Marc Anthony
"Follow Me" - Uncle Kracker
"Hemorrhage (In My Hands)" - Fuel
"Soak Up the Sun" - Sheryl Crow
"I Hope You Dance" - Lee Ann Womack
"Can't Get You Out of My Head" - Kylie Minogue
"I Just Wanna Love U (Give It 2 Me)" - Jay-Z
"My Love Is Your Love" - Whitney Houston
"Bounce with Me" - Lil' Bow Wow
"Where the Party At" - Jagged Edge
"I'm Already There" - Lonestar
"I Don't Want to Miss a Thing" - Aerosmith
"If You Could Read My Mind" - Stars on 54
"My Way" - Usher
"Always on Time" - Ja Rule featuring Ashanti
EOF
fi
challenge() {
$(cd "$1" && bash "$script_dirS"/$FILENAME)
submitted=$(cat $1/results.txt)
rm $1"/results.txt"
$(cd "$1" && bash "$script_dirS"/solutions/append-output.sh)
expected=$(cat $1/results.txt)
diff <(echo "$submitted") <(echo "$expected")
}
if [ -s ${FILENAME} ]; then
if [[ $(cat $FILENAME | grep "cat <<EOF >results.txt" | wc -l) -ne 0 ]]; then
echo "cheating is not allowed in this exercise!"
exit 1
elif
[[ $(cat $FILENAME | grep echo | wc -l) -ne 0 ]]
then
echo "cheating is not allowed in this exercise!"
exit 1
fi
fi
challenge append-output
rm -r append-output

30
sh/tests/array-selector_test.sh

@ -0,0 +1,30 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
submitted=$(bash "$script_dirS"/student/array-selector.sh "$@")
expected=$(bash "$script_dirS"/solutions/array-selector.sh "$@")
diff <(echo "$submitted") <(echo "$expected")
}
# Test with numbers - out of range included
for num in {0..6}
do
challenge $num
done
# Test with a value that is not a digit
challenge "abc"
# Test with wrong number of arguments
challenge

54
sh/tests/auto-exec-bin_test.sh

@ -0,0 +1,54 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/auto-exec-bin.sh"
BINFILE="~/myBins/01exec"
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
setupbin() {
if [ -f ${BINFILE} ]; then
echo "bin already exists!"
else
mkdir -p ~/myBins
echo "echo Hello 01 Scripting Pool" > $HOME/myBins/01exec
fi
chmod +x $HOME/myBins/01exec
}
challenge() {
OLD_PATH=$PATH
# run soultion script
source "$script_dirS"/$FILENAME
submitted=$(cd / && 01exec)
PATH=$OLD_PATH
# run student script
source "$script_dirS"/solutions/auto-exec-bin.sh
expected=$(cd / && 01exec)
# diff
diff <(echo "$submitted") <(echo "$expected")
}
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
if [[ $(cat $FILENAME | grep echo | wc -l) -ne 0 ]]; then
echo "echo is not allowed in this exercise!"
exit 1
fi
setupbin
challenge
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

20
sh/tests/auto-jobs_test.sh

@ -0,0 +1,20 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
print_content() {
mkdir -p uncompressed
tar -xpf auto-jobs.tar -C uncompressed
cat -e uncompressed/$1
}
for i in 1 2 3 4
do
submitted=$(cd student && print_content task$i)
expected=$(cd solutions && print_content task$i)
diff <(echo "$submitted") <(echo "$expected")
done

34
sh/tests/bin-status_test.sh

@ -0,0 +1,34 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/bin-status.sh"
challenge() {
submitted=$(eval "$@" >/dev/null 2>&1 ; source $FILENAME)
expected=$(eval "$@" >/dev/null 2>&1 ; source solutions/bin-status.sh)
diff <(echo "$submitted") <(echo "$expected")
}
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
challenge true
challenge false
challenge ls -l
challenge ls asdasdasdasdad
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

28
sh/tests/burial_test.sh

@ -0,0 +1,28 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/burial.sh"
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
if [[ $(cat $FILENAME | grep echo | wc -l) -ne 0 ]]; then
echo "echo is not allowed in this exercise!"
exit 1
fi
submitted=$(bash $FILENAME)
expected=$(bash solutions/burial.sh)
diff <(echo "$submitted") <(echo "$expected")
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

86
sh/tests/calculator_test.sh

@ -0,0 +1,86 @@
#!/usr/bin/env bash
# set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
submitted="./calculator.sh $@
"
expected="./calculator.sh $@
"
submitted+=$(2>&1 bash "$script_dirS"/student/calculator.sh "$@")
submitted+="
exit status: $?"
expected+=$(2>&1 bash "$script_dirS"/solutions/calculator.sh "$@")
expected+="
exit status: $?"
diff -U 1 <(echo "$submitted") <(echo "$expected")
if [ $? != 0 ]
then
exit 1
fi
}
# Check if student uses case statement
if [[ $(cat "$script_dirS"/student/calculator.sh | grep case | wc -l) -eq 0 ]]
then
echo "Error: the use of case statement is mandatory"
exit 1
fi
# Valid inputs
challenge "15" "+" "10"
challenge "15" "-" "10"
challenge "15" "/" "10"
challenge "15" "*" "10"
challenge "3491" "+" "-67"
challenge "3491" "-" "-67"
challenge "3491" "/" "-67"
challenge "3491" "*" "-67"
challenge "-3491" "+" "-67"
challenge "-3491" "-" "-67"
challenge "-3491" "/" "-67"
challenge "-3491" "*" "-67"
# Invalid inputs
challenge
challenge "-3491" "*" "-67" "10" "12"
challenge "20" "/" "0"
challenge "20" "@" "10"
challenge "10" "*" "67invalid"
# Test operators functions
source $script_dirS"/student/calculator.sh" 10 + 10 >/dev/null 2>&1
if [ $(do_add 11 14) != 25 ]
then
echo "error in function do_add"
exit 1
fi
if [ $(do_sub 11 14) != -3 ]
then
echo "error in function do_sub"
exit 1
fi
if [ $(do_mult 3 5) != 15 ]
then
echo "error in function do_mult"
exit 1
fi
if [ $(do_divide 50 5) != 10 ]
then
echo "error in function do_divide"
exit 1
fi

16
sh/tests/change-struct_test.sh

@ -0,0 +1,16 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
print_content() {
mkdir -p uncompressed
tar -xpf change-struct.tar -C uncompressed
tree uncompressed
}
submitted=$(cd student && print_content)
expected=$(cd solutions && print_content)
diff <(echo "$submitted") <(echo "$expected")

28
sh/tests/check-user_test.sh

@ -0,0 +1,28 @@
#!/usr/bin/env bash
# set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
submitted="./check-user.sh $@
"
expected="./check-user.sh $@
"
submitted+=$(bash 2>&1 "$script_dirS"/student/check-user.sh "$@")
expected+=$(bash 2>&1 "$script_dirS"/solutions/check-user.sh "$@")
diff -U 1 <(echo "$submitted") <(echo "$expected")
}
challenge "-i" "root"
challenge "-e" "root"
challenge "-i" "unknown_not_found"
challenge "-e" "unknown_not_found"
challenge
challenge "-i" "root" "too" "many" "args"
challenge "-t" "root"

27
sh/tests/comparator_test.sh

@ -0,0 +1,27 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
submitted=$(bash $script_dirS/student/comparator.sh "$@")
expected=$(bash $script_dirS/solutions/comparator.sh "$@")
diff <(echo "$submitted") <(echo "$expected")
}
for i in $(seq 1 10); do
n1=$(shuf -i 1-20 -n 1)
n2=$(shuf -i 1-30 -n 1)
challenge $n1 $n2
done
challenge "0" "0"
challenge "10" "10"
challenge "-11" "-11"
challenge "14"
challenge "-11" "-11" "4"
challenge "as" "str"

18
sh/tests/count-files_test.sh

@ -0,0 +1,18 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
submitted=$(cd "$1" && bash "$script_dirS"/student/count-files.sh)
expected=$(cd "$1" && bash "$script_dirS"/solutions/count-files.sh)
diff <(echo "$submitted") <(echo "$expected")
}
challenge cl-camp5/folder1
challenge cl-camp5/folder2

11
sh/tests/custom-ls/folder1/.hidden

@ -0,0 +1,11 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum venenatis rutrum vehicula. Phasellus vehicula sagittis nibh, sed congue turpis suscipit a. Etiam sed nibh risus. Aenean aliquet urna ornare nisi bibendum, nec vehicula quam sagittis. Quisque varius vel tortor et rhoncus. Aliquam erat volutpat. Quisque sit amet cursus tortor.
Aenean egestas dui est, eu vehicula mi vehicula vitae. Nunc rhoncus sit amet libero id tempus. Fusce mollis at urna sit amet iaculis. Ut dapibus sed enim eu fringilla. Proin pretium, orci eget mollis viverra, nibh nunc feugiat purus, vel consequat felis magna ac felis. Nam gravida imperdiet arcu. Aliquam est felis, iaculis non felis id, cursus convallis metus. Phasellus ac varius arcu. Aenean congue nisi ut urna tempor tempor. Mauris sit amet purus non risus auctor ultricies imperdiet vitae ex. Vestibulum maximus eros quam, a luctus massa condimentum ac. In commodo consequat diam, at rutrum massa interdum non. In sed rutrum dolor.
Ut auctor porta felis, luctus ullamcorper ipsum pulvinar ac. Curabitur non pharetra purus. Nulla euismod leo nec massa convallis, ac facilisis orci lacinia. Maecenas eget magna tristique, eleifend est vehicula, mattis lectus. Etiam lectus sem, rutrum in nisl vitae, congue tincidunt urna. Praesent luctus auctor arcu, quis tristique ex suscipit eleifend. Phasellus congue tempus nisi vitae suscipit. Quisque ut luctus ipsum. Duis eget consequat massa. Vestibulum aliquam ligula quis felis imperdiet luctus. Phasellus efficitur gravida elementum. Sed quis mi tortor.
Pellentesque luctus porttitor est ac tristique. Nulla facilisi. Duis eu tellus ac lectus vehicula tristique. Quisque magna ex, tristique at sollicitudin sed, blandit consequat erat. In hac habitasse platea dictumst. Mauris sodales, enim in scelerisque ullamcorper, leo lectus pharetra justo, eget dignissim eros libero vitae sapien. Donec elementum varius feugiat. Donec porta eu tellus non suscipit. Integer eu diam ultricies, sodales dolor a, ornare odio. Nulla congue commodo libero, facilisis aliquam nulla pellentesque nec. Aliquam et nisi facilisis, mollis est eu, ultricies metus. Praesent rutrum eros eu neque dapibus gravida. Nam et tortor congue, egestas leo et, euismod erat. Pellentesque ut efficitur risus. Integer sodales convallis arcu, eget mattis purus condimentum eu. Mauris urna neque, ornare in convallis eget, viverra varius lectus.
Sed dapibus nibh neque, eget consequat odio placerat ac. Duis vel nunc erat. Suspendisse vel ornare leo. Sed ut augue turpis. Maecenas ullamcorper a est non pretium. Nulla venenatis interdum pretium. Nulla ut velit vel magna blandit lacinia. Etiam dictum vestibulum nulla non gravida. Pellentesque cursus enim euismod massa congue, vitae ullamcorper urna bibendum. Phasellus in tempus ex. Etiam quis ante a erat bibendum auctor.

1
sh/tests/custom-ls/folder1/asd

@ -0,0 +1 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque eget nisl leo. Donec gravida tristique velit sit amet vulputate. In bibendum nisi tortor. Cras ullamcorper velit non mauris dapibus blandit. Maecenas rutrum semper mauris sed hendrerit. Morbi pellentesque est at enim suscipit semper. Donec tincidunt sem velit, sit amet cursus quam tincidunt eu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus non libero vel est posuere ullamcorper sit amet nec lectus. Quisque sagittis augue euismod nulla ultricies elementum sit amet eu leo.

199
sh/tests/custom-ls/folder1/hello

@ -0,0 +1,199 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce accumsan nisi vel mi sodales varius. Morbi in maximus ipsum. Maecenas pulvinar mi efficitur nulla luctus, quis tempus neque finibus. Curabitur ut tristique lacus. Donec a arcu vel mi hendrerit fermentum vitae ut urna. Nulla dapibus lacus in tellus tincidunt aliquam. Nullam tortor lorem, posuere sed nibh sed, fringilla mollis justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec ultricies ac magna sed hendrerit. Donec nec venenatis sapien. Vivamus maximus diam at lorem interdum ullamcorper at eu mauris. Pellentesque ante tortor, sagittis in euismod non, mollis at arcu. Vestibulum vitae eleifend nisl, cursus accumsan felis. Integer a rhoncus sem, at aliquam lectus.
Vivamus molestie hendrerit efficitur. Vestibulum ut hendrerit mi, sed semper arcu. Suspendisse ullamcorper lobortis ante a tristique. Curabitur a placerat erat. Phasellus dapibus vitae ante vitae sollicitudin. Cras porta sit amet ante sed viverra. Curabitur ut elit tincidunt, facilisis ligula id, condimentum erat. Integer sit amet congue elit.
Praesent laoreet suscipit libero finibus convallis. Integer dapibus, sapien ut porta mollis, tortor sapien pellentesque ligula, at consequat mi metus sed nisi. Nulla lacinia nisi vel velit gravida, eu gravida metus faucibus. Phasellus blandit cursus metus quis volutpat. Pellentesque tempus aliquet lorem id varius. Phasellus placerat iaculis porta. Nulla nunc libero, lacinia sit amet odio pretium, malesuada molestie dui. In hac habitasse platea dictumst. Nulla congue consectetur nulla, vitae euismod urna. Aliquam massa risus, elementum ut fringilla mollis, elementum ut neque. Donec odio justo, tempor sit amet commodo nec, malesuada ultricies magna. Vivamus congue ullamcorper velit, nec pulvinar nisi fermentum eu. Morbi sit amet mi egestas, pulvinar augue ut, euismod leo. Ut auctor condimentum elementum.
Sed rhoncus facilisis sem, a congue ex congue ac. Sed dictum est lorem, eget fermentum enim molestie ut. Aenean sed sagittis nunc, in dapibus justo. Sed faucibus hendrerit felis. Duis aliquam tempor erat at porta. Morbi bibendum bibendum risus, non mattis nisl venenatis quis. Aliquam erat volutpat. Nunc ac neque arcu. Vivamus et ipsum maximus, porttitor ante in, pretium mauris. Suspendisse molestie tempus ante ut interdum. Nulla sed ex vehicula nisl fermentum viverra eget a sapien. Aliquam tempus scelerisque dignissim.
Pellentesque massa lorem, rutrum a lorem et, vehicula fermentum orci. Mauris quis viverra eros. Donec lobortis iaculis justo non sollicitudin. Nullam scelerisque volutpat ultrices. Etiam fermentum congue tortor nec molestie. Sed laoreet nisi nec aliquam condimentum. Sed hendrerit tempor lobortis. Sed tempor magna at euismod semper. Donec nec felis orci. Donec sollicitudin placerat lorem, quis semper elit mollis ac. Morbi semper eu odio ac gravida.
Aliquam sollicitudin nisi nec nibh hendrerit fermentum. Quisque laoreet, enim sit amet finibus lobortis, nulla nibh laoreet leo, quis elementum nulla nulla in dolor. Sed id porta enim. Donec eu porttitor purus. Nunc ac augue sagittis, pretium sapien ut, aliquam purus. Curabitur lacus velit, hendrerit nec sagittis sit amet, vulputate sit amet magna. Sed ut molestie magna, sit amet dapibus felis. Proin aliquet nec neque vel molestie. Mauris dictum risus nec tincidunt maximus. Proin sagittis nisi lorem, vel vestibulum purus tincidunt id. Donec pharetra nisi lacus, quis ornare odio vestibulum non. Nunc ut condimentum purus, eget porta libero. In urna nulla, aliquam nec hendrerit a, sodales vel purus.
Suspendisse non semper enim. Nunc varius est ac arcu cursus, accumsan varius lorem porttitor. Morbi viverra diam tortor, ut sodales eros aliquam id. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec blandit sit amet metus sit amet cursus. In faucibus sapien ut dolor blandit, a sollicitudin urna viverra. Vivamus posuere tellus ac elit lobortis, vel dignissim felis sodales. Aliquam ut arcu ligula. Proin nec magna semper, condimentum sem at, fermentum est. Morbi sit amet suscipit lectus. Nam porttitor libero ipsum, in sagittis est efficitur sagittis. Quisque eleifend neque id eros dapibus commodo. Nam in diam vel felis bibendum cursus non ac quam. Sed id sapien mollis, ultricies nisi sed, maximus sapien. Nulla ullamcorper at ante et gravida. Duis quis tortor libero.
Cras vitae mi eget metus scelerisque malesuada. Nulla tempor ipsum enim. Phasellus congue, eros nec dictum dignissim, elit lacus bibendum augue, et pharetra lacus nisi vitae arcu. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer condimentum lacinia nulla in pretium. Vestibulum ipsum ante, rhoncus vitae quam id, faucibus porttitor odio. Donec vulputate, nunc vel bibendum faucibus, mauris metus rutrum lacus, eget pretium ex lacus eu ante. Duis nec nulla cursus, lacinia ipsum ut, placerat nulla. Nulla facilisi. Praesent efficitur nunc a odio pretium fringilla. Nullam viverra ornare mi a feugiat. Proin at posuere orci. Nulla placerat turpis at sem aliquet consequat. Pellentesque in velit id turpis aliquet tempor.
Fusce ullamcorper ultrices mauris, vitae convallis purus consectetur in. Mauris ac nibh arcu. Pellentesque blandit rutrum pretium. Quisque auctor ipsum blandit ante scelerisque, nec hendrerit enim eleifend. Aliquam eros enim, finibus vitae semper a, lobortis ut lorem. Maecenas eget nunc rutrum, vulputate arcu a, suscipit felis. Proin ac nisi neque. Phasellus placerat vestibulum tortor sed tincidunt. Praesent suscipit felis nec purus molestie bibendum. Aenean ornare tincidunt eros fermentum lobortis. Nunc quis augue in ante sodales consectetur id a nisi.
Etiam elit mi, iaculis id urna et, blandit euismod lectus. Proin pharetra, massa vel cursus placerat, dui sapien ullamcorper felis, sed placerat enim risus in neque. Ut metus tellus, bibendum condimentum urna ut, egestas malesuada mauris. Maecenas vel efficitur lacus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum dictum a quam quis consequat. Sed nec libero iaculis, mollis enim non, commodo libero. Nunc laoreet interdum purus at tincidunt. Proin rutrum diam ex, nec fringilla ante consequat id. Suspendisse potenti. Vivamus in justo libero. Sed sodales iaculis tellus et ornare. Fusce fermentum interdum libero ut pharetra. Sed eget venenatis mauris.
Suspendisse commodo posuere augue, vitae rutrum massa fermentum vel. Nunc dignissim lobortis convallis. Nam hendrerit egestas aliquam. Ut efficitur sem vitae libero iaculis condimentum. Nam ac dui et ante posuere interdum pulvinar ut ipsum. Integer dictum, tortor in blandit vestibulum, tortor quam mollis diam, et dictum felis tellus quis felis. Mauris sed ex aliquet, sollicitudin enim quis, semper enim. Nam feugiat ut diam ut pulvinar.
Cras eleifend sollicitudin mi vitae molestie. Vivamus facilisis maximus nulla, et vehicula dui sagittis at. Mauris eget augue orci. Sed vitae magna et velit elementum blandit. Curabitur aliquet rutrum mi, finibus aliquet eros egestas a. Ut vestibulum, purus vel lobortis tempus, odio neque lobortis enim, quis pellentesque neque justo eget velit. Aliquam erat volutpat. Aenean vel cursus turpis. Integer vel justo eu nunc dignissim aliquam. Nam vitae diam id lorem interdum vehicula. Donec ut erat molestie sem lacinia efficitur.
Duis vestibulum, ipsum vitae blandit ullamcorper, erat ex sagittis elit, ut elementum dui metus non velit. Praesent semper magna non magna vestibulum, et tempus tortor mattis. Nam ut risus bibendum, consequat mi non, congue arcu. Duis aliquam facilisis massa, et aliquet massa gravida a. Donec et ex orci. Cras mollis mi elit, nec auctor justo semper ut. Curabitur euismod interdum erat. Ut egestas turpis vel magna dictum sagittis. Quisque eu scelerisque ante, pellentesque gravida orci. Vivamus in fermentum ipsum. Vestibulum eu commodo sem. Suspendisse in lectus vel massa tincidunt pharetra sed eget eros. Sed sollicitudin egestas nisl. Aliquam consequat erat in imperdiet pharetra. Vestibulum fermentum dolor tortor, id faucibus lacus blandit mattis. Sed laoreet leo vitae lacinia pretium.
In non lorem sem. Aliquam in finibus ipsum. Nunc et interdum elit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin posuere bibendum turpis, mattis dignissim dolor convallis vel. Maecenas ac erat quis magna mattis consectetur interdum ornare risus. Curabitur quis neque mauris.
Cras vitae mollis nibh, malesuada vehicula velit. Pellentesque euismod, lacus sed sodales mattis, ipsum ex egestas mauris, non sagittis elit dui nec sem. In vitae fermentum erat. Pellentesque velit diam, pellentesque sit amet dolor ac, dictum vestibulum felis. Nulla hendrerit ex vitae molestie semper. Nam vestibulum accumsan odio, sit amet suscipit ex lacinia a. Quisque rutrum dignissim nunc, ut vehicula nulla scelerisque vel. Integer sollicitudin tempus nibh in vestibulum. Donec non posuere leo. Pellentesque malesuada ullamcorper vulputate. Nam iaculis lectus vel feugiat dictum. In pellentesque purus lorem, ut auctor urna vestibulum sed. Nulla facilisi. In id metus vitae ligula sollicitudin dignissim. Ut commodo vehicula odio, at aliquam arcu volutpat id.
Nunc sed risus molestie, tincidunt tortor ac, ornare mauris. Maecenas vel nisi ac sem malesuada volutpat. Suspendisse finibus, elit in semper sagittis, sapien nisi bibendum nisi, non porta est nulla at eros. Phasellus tristique ex lectus, et aliquet ante vehicula vitae. Duis a tempus enim, vel porttitor velit. Aliquam lacinia augue nec justo ultricies pharetra. Fusce eros dolor, suscipit ut sapien sit amet, sodales vestibulum mauris. Aenean eget sem justo. Quisque consectetur tempor nibh a pellentesque. Nulla fermentum nibh ac tristique mollis.
Sed eget arcu ac purus consequat tincidunt. Fusce auctor rhoncus magna eget bibendum. Cras tempor imperdiet lacus id vehicula. Pellentesque ornare augue nec eros dictum, at ultrices justo suscipit. Aliquam consequat, ex sit amet gravida ultrices, arcu odio finibus tellus, vitae iaculis purus est a est. Fusce vulputate nisi at neque facilisis rutrum. Curabitur sed consectetur sapien, et dapibus mi.
Nunc arcu lorem, pharetra quis mattis non, iaculis vel magna. Phasellus consectetur elit nec iaculis pellentesque. Phasellus lobortis ex ex, sed imperdiet ante posuere a. Phasellus volutpat dui ut orci placerat, id laoreet libero sagittis. Nulla dignissim accumsan arcu, a pellentesque mauris ultricies ut. Ut in metus dolor. Vivamus blandit odio urna, sed euismod ex scelerisque elementum. Nunc lobortis efficitur nunc eget suscipit. Nunc at nisi diam. Fusce blandit, est a condimentum placerat, elit nisl malesuada tellus, sit amet aliquet quam enim sed eros. Morbi eget placerat lorem. Nunc ultrices odio nisl, suscipit porttitor est congue eu. Nunc rhoncus risus eleifend, ultrices nisi nec, laoreet felis.
Phasellus consectetur odio id pellentesque sollicitudin. Pellentesque volutpat sem quis malesuada pretium. Vestibulum a felis sit amet nulla lobortis efficitur consectetur at justo. Sed ut arcu vitae nibh eleifend pulvinar nec vulputate est. Donec pretium, elit sed commodo commodo, metus elit volutpat tortor, eleifend bibendum metus augue vel elit. Fusce placerat justo luctus purus condimentum sollicitudin. Donec magna erat, vehicula eget lectus a, dapibus fringilla enim. Donec varius felis at libero ultricies tempus. Donec ligula lacus, fringilla non metus sed, pellentesque malesuada eros. Aliquam vel libero vitae turpis gravida condimentum sed tristique nunc. Maecenas aliquam urna nec dolor vulputate congue. Morbi mattis purus quis nisi dictum, eu ultricies risus euismod. Pellentesque mi velit, imperdiet a cursus nec, consequat ac dui. Suspendisse ullamcorper elit quis turpis porta, non blandit dui auctor. Nullam et diam facilisis, consequat augue pulvinar, molestie orci.
Etiam ac scelerisque nulla. Cras at justo vel enim lacinia sagittis sit amet nec tellus. Nunc convallis commodo pretium. Maecenas condimentum nulla suscipit, commodo neque sit amet, fermentum enim. Curabitur dui diam, gravida in tellus vitae, luctus feugiat nibh. Vestibulum in aliquam tellus. Nunc tempus odio vel lectus vehicula, sit amet lobortis libero condimentum.
Nam dictum, erat at hendrerit tincidunt, nulla lectus convallis sem, a pretium lectus nunc non nulla. Nulla gravida vulputate justo, eu viverra felis laoreet vel. Suspendisse arcu eros, rutrum sit amet molestie vitae, cursus sed lorem. Fusce orci metus, aliquam vel ex sed, rhoncus commodo augue. Donec a eros a nibh feugiat blandit. Proin venenatis pretium pretium. Praesent nec arcu leo. Fusce lacus turpis, porttitor vitae commodo id, hendrerit eget sem. Etiam cursus tincidunt eros ut venenatis. Vestibulum ultricies consectetur leo, eu imperdiet leo ultricies quis. Donec in enim sit amet mi imperdiet dignissim. In egestas interdum risus, sit amet egestas orci lobortis eu. Cras cursus euismod nisi sit amet euismod. Curabitur malesuada venenatis sem ac maximus. Donec mattis viverra euismod. Curabitur aliquet enim tempus dapibus porttitor.
Nulla sit amet volutpat enim. Nam gravida mauris erat, at sagittis odio iaculis quis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse dapibus id velit ac viverra. Nullam diam massa, condimentum in velit at, eleifend finibus nisi. Aliquam ut tellus non massa semper blandit. Maecenas condimentum venenatis sagittis. Sed quis ante a orci mollis dictum. Etiam interdum tempus purus at aliquam. Vestibulum cursus pulvinar est vitae lacinia. Quisque nibh risus, cursus id scelerisque vitae, elementum quis diam. Aliquam pharetra massa a ex ultrices maximus. Morbi laoreet iaculis leo, vitae maximus odio.
Fusce volutpat, lacus non porttitor venenatis, nulla enim consectetur lorem, vel fermentum leo tellus non ex. Quisque pellentesque magna nec nibh blandit tincidunt. Nulla facilisi. Etiam at vulputate metus. Etiam posuere imperdiet urna, non dictum dui finibus laoreet. Vivamus vitae fringilla velit. Suspendisse tortor odio, malesuada eget nibh in, lacinia placerat felis. Fusce id lobortis ipsum, eu posuere erat. Donec vel justo erat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris molestie gravida tellus, vel suscipit neque accumsan sed. Duis ac felis in mi venenatis rutrum non ac massa. Vivamus orci velit, efficitur non arcu quis, cursus gravida quam. Curabitur elementum felis luctus lobortis laoreet.
Donec pellentesque, lorem a imperdiet faucibus, leo lectus porttitor nulla, eget consequat neque ex ut est. Aenean massa tortor, iaculis id libero in, gravida sagittis justo. Duis sit amet placerat sapien, vel dictum quam. Proin maximus quam libero, a dictum mi tincidunt ultrices. Duis lobortis nisi tempor mauris egestas, in condimentum augue rutrum. Vivamus eget libero eu lorem malesuada tincidunt eu vitae nunc. Nam justo diam, eleifend id enim sit amet, eleifend facilisis purus. Phasellus convallis quam vitae augue auctor pretium. Vivamus et tristique arcu. Maecenas et urna porta, varius dui a, scelerisque mi. Fusce eget ex aliquam, commodo augue sed, ornare lacus. Quisque congue dapibus nisl.
Morbi pretium ac arcu nec accumsan. Nullam non cursus neque. Etiam eget mauris congue, faucibus felis sed, bibendum sapien. In efficitur ipsum eget bibendum pharetra. Aliquam gravida, leo ac dapibus feugiat, turpis ante ornare dui, sit amet consequat metus nunc sed nibh. Morbi pellentesque magna a justo vulputate, sed convallis turpis volutpat. Nulla accumsan odio sed nibh vulputate vulputate in quis tellus. Ut quis dolor cursus, accumsan tellus sed, condimentum mauris. Nam ullamcorper nulla in pellentesque aliquet.
Morbi vulputate finibus odio vitae vulputate. Quisque et imperdiet magna. Suspendisse sem nunc, pulvinar ac cursus sed, finibus vitae est. Suspendisse convallis, erat ornare tincidunt eleifend, turpis orci dapibus dolor, vitae mattis massa lectus ac lacus. Nunc id sem tincidunt, dapibus enim eget, tristique ex. In eu dictum enim. Curabitur ut efficitur enim. Integer ac eros mi. Pellentesque tempus hendrerit nunc, quis placerat quam lobortis at. Ut euismod ornare urna efficitur rhoncus. Duis in lorem enim.
In hac habitasse platea dictumst. Curabitur tincidunt sollicitudin lacus, id interdum velit auctor at. Proin eget risus est. Nunc enim mi, vestibulum ac risus sit amet, tristique rutrum tortor. Fusce quis nulla mattis, fermentum dolor in, semper nulla. Pellentesque vel lectus magna. Nam eget arcu suscipit, varius justo a, ornare quam. Donec vitae sollicitudin nibh, eget iaculis felis. Nullam commodo purus et magna finibus, vitae finibus ipsum aliquam. Vestibulum condimentum dui dolor, ut dictum mi maximus eu. Nunc et pretium sem. Etiam accumsan eu felis in convallis. Nullam pulvinar vestibulum tellus nec rutrum. Suspendisse semper, velit vitae vulputate posuere, nunc dolor egestas neque, at efficitur turpis metus nec leo. Etiam bibendum massa condimentum iaculis vestibulum. Morbi ipsum purus, efficitur eget maximus ac, mattis id massa.
Nam volutpat velit sed nulla ullamcorper facilisis. Sed commodo non turpis sed imperdiet. Pellentesque malesuada nibh eget commodo accumsan. Curabitur iaculis eget sapien ac aliquam. Etiam sed ex lectus. Vivamus et urna erat. Nunc quis efficitur felis. Nulla sagittis lacus a ex tristique, vehicula vulputate enim suscipit. Pellentesque pulvinar vitae leo pellentesque gravida. Sed efficitur pretium interdum. Aenean non rutrum ligula. Etiam ultrices nisl nec tempor efficitur.
Nulla eget nulla dictum, elementum lacus vitae, congue tellus. Proin sit amet pellentesque mauris, sit amet aliquet dolor. Etiam eget nulla ligula. Vestibulum imperdiet pretium mauris, ac tempus erat eleifend at. Ut condimentum fringilla ex ut faucibus. Cras eros nunc, iaculis et maximus vitae, auctor sed sapien. Fusce eu odio non ipsum posuere sagittis. Praesent nunc arcu, vestibulum ut condimentum eu, aliquam eu orci. Fusce in arcu ultricies, dictum enim consequat, facilisis turpis. Pellentesque nunc nisi, ultrices et leo et, consequat tincidunt lorem.
Pellentesque sed faucibus ex. Suspendisse ultrices vulputate dolor. Nam eu dolor suscipit, vehicula sapien non, tempus orci. Quisque eget porta nisi, id tincidunt tellus. Fusce sodales purus et ligula consequat, quis sodales metus tempor. Sed dictum libero placerat nibh tincidunt, eget aliquam orci feugiat. Suspendisse ullamcorper sapien quis porttitor sagittis. Integer vel laoreet elit. Mauris convallis viverra sapien eget accumsan. In hac habitasse platea dictumst. Sed et arcu nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Curabitur quis dictum tortor, at imperdiet lorem.
Sed pulvinar nisi eu ante condimentum rutrum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed malesuada mauris nec dui rhoncus lacinia. Curabitur tincidunt ullamcorper felis ac ullamcorper. Suspendisse dolor est, suscipit ac ligula a, molestie dapibus lectus. Morbi semper, tortor nec tincidunt elementum, nisl tortor consectetur massa, in sodales urna leo sit amet justo. Fusce eu sem eget diam blandit venenatis vel in odio. Vivamus volutpat feugiat sem, sit amet pellentesque orci molestie sed. Proin tincidunt hendrerit nibh, in blandit lacus. Maecenas mattis finibus odio, nec scelerisque ligula aliquam id. Quisque viverra velit eget sem suscipit dapibus. Integer pretium, turpis non commodo condimentum, est felis gravida arcu, vitae elementum lorem erat sed sapien.
Mauris sed urna eu lacus sagittis rhoncus. Sed eleifend id erat quis vestibulum. Suspendisse mattis tempor neque, in vestibulum nisl molestie sit amet. Nulla blandit lectus semper dui accumsan molestie. Ut in dui non augue laoreet imperdiet vitae a orci. Quisque a leo hendrerit, ultrices sem vel, rhoncus augue. Donec quis facilisis enim, ut efficitur enim. Donec finibus libero vitae sem fringilla, at pharetra arcu volutpat. Duis ut mollis dolor. Vestibulum maximus justo nisi, id euismod risus sodales vel.
Sed ut interdum quam, quis mollis lorem. Quisque eget arcu nec justo porta malesuada quis sed odio. Proin tempus enim ac neque efficitur sollicitudin. Fusce a venenatis dui, eget tincidunt sapien. Aliquam sodales hendrerit turpis sit amet commodo. Donec id dui in enim dignissim dignissim a ut lacus. Donec varius bibendum urna sollicitudin aliquet. In hac habitasse platea dictumst.
Donec suscipit cursus porta. Integer interdum ante eget suscipit egestas. Donec ultricies dignissim lectus, a aliquet diam auctor nec. Curabitur sapien turpis, facilisis eleifend metus id, euismod ultricies leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus rutrum nisi vel leo vulputate dapibus. Fusce sit amet massa sed velit fermentum maximus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ante ligula, sollicitudin sit amet facilisis quis, consequat id ex. Sed imperdiet venenatis tellus, vel gravida metus tempor molestie. Phasellus eleifend, neque eu fringilla fermentum, diam odio luctus lacus, ullamcorper viverra urna elit euismod metus.
Vestibulum sed arcu purus. Quisque sed tellus mattis, convallis ipsum eget, finibus turpis. Nulla quis accumsan sapien. Nam risus felis, finibus at sapien ac, commodo pharetra turpis. Vestibulum vel arcu dictum, gravida purus in, volutpat nisi. Vivamus risus felis, faucibus et erat in, tristique mollis nisi. Morbi sollicitudin ipsum vel diam placerat vestibulum. Morbi dictum velit et posuere tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec scelerisque risus eu hendrerit pharetra.
Fusce accumsan tempor est, nec fermentum augue posuere et. Etiam aliquam ullamcorper tortor iaculis condimentum. Aenean vel ullamcorper leo. Quisque consequat sit amet sapien id sodales. Vestibulum pretium dui a eros mollis volutpat. Quisque ac sodales felis. In hac habitasse platea dictumst.
Nullam placerat vestibulum ex sed porta. Pellentesque vel est iaculis, pretium neque eu, condimentum elit. Mauris vitae congue sem. Praesent molestie commodo orci a viverra. Donec consectetur tempus imperdiet. Aenean sed elit at turpis consequat ultricies. Curabitur consequat a orci sit amet feugiat. Donec fringilla, risus sed lobortis efficitur, arcu arcu elementum lorem, eu pulvinar elit eros at massa.
Mauris nec molestie turpis. Sed porttitor, orci vel rutrum accumsan, risus arcu pellentesque ante, a pretium libero sem sed lectus. Quisque ornare ipsum id libero sagittis scelerisque in nec lorem. Nunc sagittis eros diam, in elementum enim mattis vel. Duis rhoncus volutpat aliquam. Mauris hendrerit ex aliquam faucibus vestibulum. In viverra lobortis magna. Nullam tincidunt nunc id neque efficitur, et commodo dolor bibendum.
Duis fermentum massa vitae nisi accumsan, et volutpat libero porttitor. Quisque a nibh et mauris lobortis pharetra nec ac diam. Donec ultricies, tellus nec feugiat porta, felis quam accumsan ipsum, vitae laoreet sapien sem id ligula. Mauris vel erat at sapien consectetur dignissim. Aenean placerat tellus in leo fringilla, non condimentum magna placerat. Ut at justo maximus, tristique quam id, euismod orci. Morbi eget metus erat. Donec ultrices odio eget velit accumsan, vitae blandit leo dignissim. Vivamus quis auctor ipsum. Etiam placerat auctor rhoncus. Curabitur lacus justo, rutrum vitae placerat in, hendrerit ultricies augue. Integer vestibulum bibendum magna vehicula hendrerit. Nulla vehicula leo ut est feugiat imperdiet et id lorem. Maecenas quis lacus lobortis, viverra dui et, dapibus eros.
Fusce ac sapien ut odio blandit pellentesque vitae nec mauris. Aliquam a ipsum id urna condimentum dictum. Proin vehicula bibendum ligula vitae consectetur. Nullam id erat mattis, vehicula velit eu, finibus nisl. Fusce lorem neque, vehicula sed diam non, viverra venenatis ligula. Fusce fermentum turpis at volutpat mollis. Praesent nec lobortis ligula. Nulla magna nulla, consectetur vitae tincidunt ut, eleifend eu nulla. Pellentesque mollis erat et interdum vulputate.
Sed tincidunt pretium dui, et pellentesque ex interdum vitae. Mauris non pretium lectus. Etiam in aliquam dui, nec porttitor turpis. Quisque sagittis, tellus in tincidunt pellentesque, arcu urna fringilla sem, a dictum libero metus ac enim. Mauris mollis nibh quis dui finibus, eu porta arcu efficitur. Vivamus neque ipsum, vulputate a efficitur ut, laoreet eu dui. Sed in nisl mattis, tincidunt orci nec, finibus dui. Donec lobortis vitae nibh eget lobortis. Integer at fringilla dui, consectetur fringilla libero. Pellentesque magna augue, dignissim non sodales nec, convallis quis tellus. Proin tristique, mi et malesuada bibendum, tortor diam consequat felis, et rhoncus quam ante a tellus. Aenean gravida, justo eu fermentum ultricies, elit turpis vehicula felis, nec viverra lorem velit id lorem.
Aenean luctus scelerisque odio at mattis. Suspendisse sit amet malesuada leo. Nunc nec condimentum enim. Maecenas finibus massa diam. Morbi blandit scelerisque enim, id lobortis odio pellentesque in. In quis mi dui. In dignissim, leo et aliquam placerat, erat urna placerat purus, venenatis convallis ligula nibh euismod urna. Ut interdum eget turpis vel tincidunt. Nulla facilisi. Integer scelerisque augue nunc, nec pharetra purus volutpat id. Aliquam bibendum ac enim et tempor. Vivamus sit amet nisi vel lacus tristique euismod at eu eros. Fusce sed nisi ipsum. Aenean felis magna, condimentum non sapien in, pharetra maximus dui. Sed neque felis, sodales sed nisi sollicitudin, congue congue nulla.
Mauris consectetur dolor ac leo luctus venenatis. Proin blandit commodo lacus sed mollis. Nam vel est at justo laoreet finibus vitae vel turpis. Donec at augue libero. Sed accumsan justo sed est tempus blandit. Cras eros diam, pellentesque fermentum tempor in, malesuada non velit. Cras volutpat ante diam. Vivamus luctus tempus nisi, sit amet elementum massa tincidunt vitae. Suspendisse hendrerit, tortor sit amet venenatis interdum, tortor neque dictum nibh, sit amet interdum dui lacus quis lectus. Sed nisi sem, rhoncus sed aliquet sed, finibus et ante. Nulla blandit orci eu nibh ullamcorper porta. Praesent id magna id neque cursus facilisis.
Proin convallis, ligula eu fringilla tempus, risus felis sagittis quam, in tempor nisi magna ac risus. Sed imperdiet accumsan magna. Mauris maximus diam eget tincidunt luctus. Duis libero risus, molestie vitae orci consectetur, elementum tristique nisl. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Duis quis diam nunc. Praesent iaculis lacus ut diam tristique consectetur. Vivamus dui ante, mattis eget eros a, tincidunt lacinia risus. Ut ultrices porttitor odio, ac scelerisque enim efficitur id. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam vehicula accumsan erat, id mollis nisl accumsan eu. Nunc ipsum sapien, egestas et sem congue, consequat consectetur nunc. Vivamus pretium est ipsum, eget condimentum est bibendum sed. Donec lobortis blandit est, sit amet consectetur arcu. Vivamus sapien est, convallis sed laoreet eget, ornare eget tellus.
Sed condimentum, magna gravida dignissim hendrerit, nisl nunc vehicula justo, ut vehicula ipsum purus non dolor. Curabitur quis tellus porttitor, venenatis tortor eu, interdum justo. Suspendisse bibendum orci sit amet malesuada tincidunt. Sed maximus feugiat tempus. Nullam in ante ante. Nullam convallis arcu quis sapien facilisis, id dignissim sapien malesuada. Cras tempor, enim in consequat vestibulum, dui nisi maximus nulla, et dignissim justo odio non orci.
Suspendisse fringilla turpis sed tortor efficitur, a placerat nisi vestibulum. Etiam convallis lacus vitae dignissim tempor. Suspendisse id mauris a risus bibendum maximus. Nullam dignissim sit amet ligula ac lobortis. Nullam feugiat est quis tortor fermentum lobortis eget eget libero. Donec non suscipit nulla. Sed ac lacus neque. Nunc imperdiet mi ut metus sagittis mollis. Sed varius sodales accumsan. Donec auctor elementum sagittis. Donec odio mauris, faucibus quis mollis nec, efficitur at eros. Maecenas massa ligula, fringilla eget mi quis, placerat vehicula lacus. Maecenas leo nibh, bibendum ac sem sed, dignissim iaculis nibh.
Donec in tincidunt arcu. Quisque commodo rutrum ornare. Aenean eu purus pretium, faucibus justo eget, pharetra urna. Fusce pharetra facilisis sapien sed luctus. Cras non elit vestibulum, rutrum lectus ut, bibendum erat. Duis vitae est eu libero vehicula viverra at vitae ipsum. Nunc justo ligula, tempor vitae ex sit amet, consectetur placerat ex. Aenean ligula dui, fermentum vel semper sed, semper eu orci. Etiam gravida sagittis eros, et pellentesque justo. Curabitur et pulvinar velit. In semper odio leo, ut pharetra nunc accumsan nec. Sed velit augue, ultrices in ante blandit, feugiat pretium massa. Maecenas bibendum, nibh eget suscipit ultrices, elit felis auctor risus, nec dictum nibh neque ac diam. Sed consequat arcu id nibh tristique sodales. Phasellus vulputate placerat velit sed condimentum.
Nulla facilisis leo nec efficitur venenatis. Phasellus ac interdum ligula. Curabitur pharetra laoreet ipsum, ac porta nunc tristique eu. Morbi mollis varius massa ac egestas. Vivamus sed nibh tellus. Pellentesque auctor sapien aliquet nunc semper venenatis. Aenean dignissim venenatis feugiat.
Donec ut tincidunt sapien, ut consequat felis. Morbi luctus orci in elit luctus blandit. Proin fringilla odio vel elit tristique tincidunt. Integer tellus metus, vestibulum eu eleifend eu, finibus id velit. Curabitur nec turpis accumsan, aliquam nibh nec, luctus velit. Curabitur id velit eget quam scelerisque pretium et a mauris. Suspendisse vel felis lectus. Maecenas a augue lectus. Sed viverra maximus nisl, at tempor lectus ornare ut. Donec ac semper velit. Nunc hendrerit sapien et tellus fermentum sagittis.
Sed malesuada enim et est tincidunt, a tristique mi porttitor. Sed interdum, orci non sagittis sagittis, ipsum enim aliquet erat, quis pharetra sapien lacus vel tellus. Nunc dictum nunc sed suscipit tempus. In hac habitasse platea dictumst. Maecenas gravida vestibulum faucibus. Nam eget tempus odio. Maecenas a eleifend massa, ut efficitur odio.
Integer fermentum lacus turpis, at aliquet diam convallis non. Ut ac arcu vitae felis dapibus porttitor a sit amet orci. Suspendisse nisl libero, fringilla non posuere vel, pharetra nec nisl. Pellentesque et euismod nibh, eget ornare urna. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In viverra faucibus purus, a congue felis interdum ut. Aliquam vitae tellus sed felis mattis elementum. Fusce eleifend lorem ut ex euismod euismod. Donec ac consectetur augue. Cras posuere neque massa, sed euismod urna mattis ac. Mauris nec sollicitudin lacus. Sed eu massa et lorem viverra bibendum sed sit amet arcu. Vivamus gravida hendrerit mi, cursus iaculis nunc imperdiet a. Quisque purus mauris, viverra sit amet euismod sit amet, rutrum id nibh. Donec dignissim diam nibh, quis rhoncus nulla suscipit at. Mauris dapibus, tellus et efficitur aliquet, tellus diam vehicula enim, ac fermentum ante justo nec turpis.
Nullam sapien orci, pharetra a elit eu, interdum interdum libero. Ut eu pulvinar ipsum. Aliquam hendrerit elit arcu, vel volutpat nisl convallis id. In maximus justo sed magna euismod sagittis. Morbi fermentum ante nisi, id volutpat nisl congue a. Praesent sed efficitur turpis. Pellentesque eu turpis nec massa semper semper. Donec tincidunt ac lacus eget maximus. Quisque vel tortor eros. Nam vitae urna a mi maximus vestibulum.
Phasellus et eros lectus. Mauris luctus diam a dolor sagittis, quis lacinia odio euismod. Ut sed porttitor sem. Mauris faucibus vitae ex et malesuada. Nullam quis tincidunt diam, et lobortis ipsum. Pellentesque scelerisque metus vel luctus porttitor. Donec eu vehicula erat, ornare efficitur elit. Praesent ullamcorper est sit amet odio finibus malesuada. Nulla molestie id odio quis semper. In ultrices, massa quis consequat placerat, mi magna porttitor enim, sed blandit nulla nunc nec nunc. Duis suscipit, mauris sit amet aliquet sodales, arcu massa efficitur enim, et sollicitudin urna nisi sed mi.
Nunc tempus dolor lorem, consectetur semper dolor feugiat in. In imperdiet ullamcorper erat id accumsan. Sed at molestie sem. Phasellus sagittis consequat orci, in feugiat odio imperdiet ac. Aliquam auctor eros vulputate dolor rhoncus, ac hendrerit enim lacinia. Morbi augue orci, sollicitudin sed consequat fermentum, hendrerit sed velit. Sed a turpis aliquet, fringilla elit eu, dictum libero. Donec aliquam urna mauris, vel interdum urna congue vel. Sed ex tellus, consectetur sed imperdiet at, finibus efficitur nisl. Phasellus aliquam semper libero finibus rhoncus. Pellentesque dolor augue, porta eu urna eu, ultricies lacinia metus. Praesent cursus ante dapibus, volutpat nunc id, pharetra diam. Nam iaculis enim non faucibus dapibus. Vivamus est augue, aliquam ac ipsum eget, vestibulum commodo lorem. Proin porttitor nibh vitae est fermentum, id suscipit dolor elementum.
Praesent tempor fermentum tellus, vitae tincidunt turpis mattis a. Etiam eu magna et eros iaculis ullamcorper. Pellentesque pharetra turpis metus, nec bibendum leo fermentum et. Sed arcu nulla, gravida nec leo quis, efficitur suscipit libero. Quisque purus mi, auctor vitae quam quis, tincidunt porta sapien. Proin eu facilisis orci, at eleifend lectus. Aenean blandit viverra nulla non tempor. Duis venenatis tortor nec finibus interdum.
Duis sed tortor nulla. Donec scelerisque sem purus, id varius risus lobortis ut. Proin velit ipsum, vulputate vitae viverra ac, viverra quis ante. Maecenas eget sapien non sem volutpat elementum finibus eu nunc. Pellentesque non ex quis leo gravida malesuada quis mollis eros. Fusce mollis nunc eget risus vehicula eleifend in sed lorem. In hac habitasse platea dictumst. Nulla quis pretium nisl. Vivamus dignissim, nibh in luctus ornare, nunc risus commodo enim, et aliquet libero neque ut orci. Suspendisse sed quam eget urna viverra porta. Aenean ligula ligula, congue vel ullamcorper et, vehicula quis tortor. Sed dictum nec nulla eget sollicitudin. Aliquam molestie ligula justo, sit amet faucibus dolor ultricies eget.
Aliquam et risus posuere, malesuada nibh id, malesuada sapien. Curabitur lacus ex, ullamcorper id pharetra at, maximus vel augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec varius felis quis tortor laoreet volutpat. Quisque iaculis posuere enim, tincidunt rhoncus erat sodales vel. Etiam sit amet purus suscipit, tempus lacus non, semper tellus. Pellentesque in aliquet urna. Vivamus a justo bibendum, tristique tellus pretium, fringilla eros.
Cras eget arcu condimentum, varius eros vel, fermentum quam. Duis ut turpis ut erat laoreet pulvinar et non lectus. Nam mattis libero quis congue pharetra. In vulputate quis massa quis eleifend. Donec eu velit ac urna tempor blandit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Etiam sed lobortis mi. Etiam porttitor, leo sed dictum rutrum, justo massa semper tortor, vel lobortis urna elit a felis. Aliquam odio augue, pellentesque sed ex sed, bibendum pellentesque turpis. Morbi viverra nulla ac ipsum mattis, non auctor tortor condimentum. Vestibulum pretium nec nulla vitae sollicitudin. Integer scelerisque libero id blandit pharetra.
Ut aliquet libero id commodo mattis. Nulla ut ex malesuada, tincidunt nisl in, lacinia nisl. Pellentesque scelerisque semper mauris, nec tincidunt urna bibendum id. Nulla facilisi. Nulla facilisi. Sed id fringilla odio. Fusce tempus egestas mauris nec accumsan. Integer dictum, elit vehicula molestie ultrices, purus sapien luctus enim, nec suscipit felis neque sit amet mi. Nulla sed fermentum orci.
Donec id lorem euismod, posuere leo in, pharetra velit. Nullam sed blandit mauris. Proin vitae congue neque, quis tristique ante. Donec consectetur a velit sed congue. Sed finibus dui luctus, maximus metus et, tempor sapien. Quisque vulputate molestie arcu eu malesuada. Ut consectetur rutrum diam eu viverra. Suspendisse interdum ipsum mattis neque pulvinar posuere. Donec dolor erat, bibendum vitae malesuada ac, hendrerit quis metus. Duis vitae urna orci. Sed lobortis nisl ut tortor eleifend malesuada. Curabitur dapibus ex vitae ante ornare, et aliquet orci bibendum.
Quisque sollicitudin metus turpis, vitae condimentum metus semper id. Duis pharetra facilisis leo vel egestas. Vivamus ut magna justo. Sed quis vehicula turpis, sed dictum augue. Praesent erat tellus, fermentum non vestibulum vitae, commodo in lectus. Integer eu rutrum nibh. Sed pellentesque lacinia mauris, et varius orci laoreet ut. Nulla condimentum ante eros, sed aliquam augue gravida nec. Integer auctor nisl nec mauris vulputate laoreet eget nec lorem. Suspendisse convallis dui a nisi dapibus egestas sit amet non quam. Cras vulputate sapien sit amet lacinia scelerisque. Quisque justo ante, tincidunt in risus ut, dapibus maximus mauris. Vivamus eget lectus nec mi eleifend viverra. Fusce efficitur turpis vel erat auctor aliquam. Nunc volutpat felis massa, sit amet egestas libero mollis non.
In in tempus sapien, sit amet lacinia lacus. Phasellus vehicula sodales cursus. Pellentesque at mollis sapien. Quisque sollicitudin, lorem nec condimentum fringilla, velit arcu vehicula dui, at porttitor turpis leo nec nunc. Mauris elementum eros purus, malesuada consectetur orci sodales eu. Fusce suscipit, turpis vel mattis finibus, leo lacus maximus nibh, ac aliquet nunc enim et lectus. Donec nec nulla est. Duis porta id dolor a vehicula. Mauris accumsan arcu eget metus scelerisque, eget consequat mi rutrum. Aenean placerat tristique feugiat.
Mauris in odio neque. In pretium libero condimentum urna fermentum cursus. Vivamus tincidunt tincidunt volutpat. Aenean sed faucibus dui, tincidunt egestas eros. Nunc velit velit, aliquam eget purus eu, dictum ullamcorper eros. Vestibulum molestie interdum pulvinar. In ac mauris non metus consectetur luctus sed in risus. Sed eget consequat augue. Nulla posuere ligula augue, eu pretium ipsum placerat a. Mauris quis ullamcorper metus, at egestas tellus.
Ut consectetur placerat mauris vel placerat. Nam volutpat sapien ut ornare congue. Vestibulum cursus magna at scelerisque venenatis. Nullam ac lacus quis sapien lobortis ullamcorper eu in libero. Quisque semper vitae urna vitae dictum. Mauris pretium elementum turpis, vel varius odio ullamcorper in. Vestibulum efficitur malesuada est, eu venenatis mauris iaculis sed. Sed suscipit egestas lacus, at porta risus cursus et. Aenean nec augue tempor est elementum bibendum vitae non nisl. Proin molestie porttitor dolor vitae laoreet. Ut sagittis, dui quis pulvinar ultrices, neque tortor auctor nibh, sed ornare mauris mauris vel lacus. Nunc sed ullamcorper lorem. Maecenas facilisis arcu non diam feugiat rhoncus.
Mauris dictum iaculis molestie. Duis viverra pellentesque volutpat. Proin id felis velit. Morbi sed tellus sed ligula molestie ultricies. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque at lobortis ex. Integer pharetra nibh diam, vehicula scelerisque mi vehicula sit amet. Proin lobortis at augue non bibendum. Morbi porttitor varius tortor, et tristique nibh cursus vitae. Maecenas cursus facilisis tortor, aliquet volutpat ante convallis eget. Nunc odio turpis, pellentesque sed enim sit amet, posuere eleifend magna. Duis ultrices felis ipsum, eu ornare ex iaculis et. Curabitur metus diam, rutrum sit amet rhoncus et, imperdiet sit amet neque. Cras nec dui laoreet magna condimentum fringilla vel quis orci. Morbi sit amet nisi luctus, commodo lacus et, aliquam felis.
Integer pharetra lacinia metus, ut gravida enim varius nec. Proin in risus augue. Aenean vel urna elit. Cras sed erat molestie enim fringilla posuere sed vel lorem. Suspendisse mauris massa, tempus quis tortor ut, placerat egestas ligula. Nam eu massa dictum, fermentum est nec, lacinia felis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Pellentesque tellus quam, placerat commodo tincidunt id, tincidunt ut lectus. Integer ut blandit diam. Duis quis rutrum augue. Nulla ex elit, malesuada vel interdum in, commodo a turpis. Quisque pharetra neque at imperdiet ornare. Cras tincidunt arcu tellus, sit amet ultricies nisi congue nec. Curabitur vel est sed dolor euismod tempus. Praesent at sagittis risus, id viverra neque.
Donec augue leo, pellentesque eu volutpat quis, suscipit in mi. Aenean placerat libero id ornare vestibulum. Maecenas nec faucibus nisi. Curabitur elementum aliquam congue. Maecenas nec lobortis purus. Nam aliquam justo erat, in placerat magna rutrum suscipit. Vestibulum non sem et ipsum lobortis consectetur. Sed sed commodo dui, in feugiat ipsum. Proin mattis gravida lectus, non placerat magna fringilla sit amet.
Integer erat sem, hendrerit id venenatis quis, vestibulum in orci. Praesent sed nisl in sem euismod suscipit. Vivamus in lectus est. Nulla sed neque ut dui posuere interdum sed in mi. Maecenas tincidunt porta ornare. Quisque id sapien aliquet eros consectetur ultrices. In dui turpis, tincidunt ac consectetur vel, scelerisque id arcu. Curabitur sed auctor tellus, sit amet congue ex. Vestibulum accumsan, diam id interdum feugiat, ex turpis fermentum enim, nec tristique ante lacus in sem. Fusce vel ante luctus, mollis ante quis, porttitor leo.
Morbi luctus cursus sapien, accumsan pulvinar urna euismod id. Duis fermentum mi a sapien sollicitudin, ac laoreet magna vestibulum. Integer faucibus diam id dui lacinia, et egestas felis faucibus. Vestibulum efficitur quam at condimentum vulputate. Donec et orci mauris. Cras sit amet dictum nulla, eu vestibulum lacus. Suspendisse rhoncus nibh neque, sit amet semper leo eleifend vel. In tortor tellus, ornare a risus at, malesuada porttitor massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Nam urna nunc, ultrices at nulla sit amet, cursus malesuada lacus. Integer nec sem faucibus, placerat sapien ac, placerat sapien. Cras molestie arcu imperdiet nisi accumsan luctus. In in interdum turpis. Aliquam posuere volutpat pharetra. Aenean pharetra volutpat tempor. Aenean quis turpis ut libero interdum gravida. Maecenas ac scelerisque velit. Morbi non nulla dignissim, maximus lacus sit amet, vestibulum metus. Nunc convallis elit non tincidunt ultricies. Suspendisse aliquet vel lectus a facilisis. Nulla sit amet venenatis odio.
Suspendisse magna nisi, varius luctus ipsum et, imperdiet consequat lacus. Nulla quis congue augue. Proin vehicula mi leo, suscipit dignissim ex egestas eu. Quisque interdum erat quis quam facilisis, in feugiat felis tincidunt. Donec orci odio, porttitor vitae pellentesque eu, rhoncus ac risus. Aliquam faucibus commodo orci. Sed eu arcu sed diam venenatis vulputate a ut sem. Integer nec dapibus dolor. Aenean fringilla malesuada quam, non sagittis libero venenatis ac. Integer blandit neque eget leo auctor lobortis. Donec at tincidunt nunc, a efficitur purus. Vestibulum et orci lobortis, cursus lorem dapibus, malesuada nisi. Nunc in ipsum quis ipsum malesuada lacinia eu non tortor. Mauris ac vehicula tellus.
Nullam ut aliquet ipsum, vitae porttitor sapien. Curabitur eleifend sem id venenatis elementum. Nullam non augue eu arcu posuere finibus sit amet eget lorem. Sed vehicula lectus a justo ultrices, eget pharetra augue eleifend. Pellentesque tempor turpis sed leo viverra tempus. Duis volutpat non urna sit amet dictum. Mauris eu orci pellentesque, rhoncus purus a, fermentum dui. Cras accumsan commodo euismod. In suscipit aliquet ex, a scelerisque tortor ultrices ac. Donec ipsum dui, vulputate non gravida et, vulputate ac dolor. Curabitur et hendrerit arcu, et hendrerit erat. Vivamus suscipit risus eu orci sollicitudin, vel convallis enim ultricies. Cras vehicula consequat risus ac gravida. Duis venenatis nisi vel leo pulvinar bibendum. Mauris elementum et quam eu elementum.
Aliquam erat volutpat. Sed a dapibus diam. Quisque laoreet sit amet tortor sodales interdum. Duis congue venenatis odio, suscipit dignissim justo pretium non. Nunc eu arcu ullamcorper, placerat nisl a, euismod libero. Phasellus molestie mi quis est egestas, ac venenatis justo malesuada. Fusce et nisi ullamcorper, pharetra risus non, venenatis libero. In et sodales ante. Ut quis odio at diam interdum laoreet non nec odio. Morbi rutrum metus nisl, sit amet finibus ipsum accumsan vitae. Praesent fringilla rhoncus erat id ultrices. Aenean ut erat non nisl blandit bibendum ac sit amet lectus. Pellentesque scelerisque dui nec fermentum eleifend. Nulla rhoncus magna non orci sollicitudin fermentum. Nullam consequat orci vitae ullamcorper laoreet. Nam congue tincidunt ligula condimentum ultricies.
Donec nec eros vitae ante commodo scelerisque. Donec felis ex, ornare ut neque a, volutpat blandit enim. Fusce a mi a nunc facilisis semper. Fusce mollis justo eu mi tempor eleifend. Sed ultrices urna quis ipsum cursus, et elementum ante posuere. Praesent viverra vestibulum iaculis. Praesent vel faucibus erat. Integer et diam dapibus, convallis arcu quis, pharetra nulla. Mauris enim arcu, fringilla in tincidunt non, suscipit eu erat. Etiam quis ante euismod, gravida nisl vel, tincidunt libero. Vivamus ac eleifend arcu. Mauris egestas, eros ut porttitor vehicula, erat ligula faucibus elit, ut suscipit massa augue ut est. Aliquam dapibus efficitur purus eu pretium. Donec pulvinar turpis orci. Mauris nisl velit, pharetra sed nisl at, pellentesque convallis felis. Etiam vitae lectus lectus.
Aenean eu ligula interdum, feugiat lacus quis, feugiat tortor. Etiam mattis massa vel augue ullamcorper egestas. Vivamus in orci magna. Vivamus a dictum nisl, vitae ornare justo. Sed libero tellus, dapibus in auctor et, porta vel augue. Nullam scelerisque tellus pretium nibh varius vestibulum. Sed et neque turpis. Proin malesuada nisl ut felis iaculis, ac aliquam lorem euismod. Vestibulum pretium sapien sit amet enim egestas elementum. Cras eget est luctus, mollis sapien ac, porta ex. Praesent venenatis dapibus lacus, ut efficitur lacus fringilla non. Integer eu rutrum magna. Integer iaculis venenatis blandit. Vestibulum euismod vitae leo tincidunt dignissim. Interdum et malesuada fames ac ante ipsum primis in faucibus.
Proin sodales neque dui, at sagittis magna fermentum vel. Cras id metus id sapien cursus rhoncus. In hendrerit augue dictum, gravida augue vel, consectetur lorem. Vivamus sollicitudin pellentesque pulvinar. Donec consectetur sem quis odio scelerisque elementum. Ut luctus enim nec nunc venenatis mattis vitae ac lorem. Nullam aliquam nulla et ornare interdum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam sollicitudin lacinia tellus et suscipit.
Ut eget orci non est luctus mattis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vel magna ligula. Donec eu sem ut odio ullamcorper ornare. Sed blandit, felis pellentesque laoreet cursus, diam sem viverra nunc, in auctor orci diam sit amet enim. Maecenas sit amet commodo turpis, nec tristique lectus. Maecenas dictum leo nec rhoncus faucibus. Vestibulum augue quam, varius ac facilisis vitae, commodo in quam. Aenean suscipit tellus non tincidunt viverra. Integer eu ipsum non nibh bibendum euismod id at erat.
Mauris non malesuada sapien. Pellentesque vitae mi nulla. Curabitur laoreet, sapien et facilisis varius, est est dapibus leo, dapibus auctor erat urna vel enim. In vehicula, nisl ac pharetra finibus, tellus ipsum vestibulum mi, venenatis pulvinar ante sem nec risus. Phasellus porta porttitor lectus, id consectetur justo commodo a. Donec in dui ut tellus ultricies aliquet. Praesent ac mi metus. Integer lobortis purus eu justo lobortis, vel imperdiet ex hendrerit. Aliquam erat volutpat. Proin ut ligula nisl. Sed pretium porttitor varius. Nam iaculis ac orci sed pulvinar. Donec mattis orci non dui vehicula, at lobortis nibh efficitur. Vestibulum varius erat ornare posuere convallis.
Vivamus gravida massa feugiat scelerisque maximus. Nam bibendum facilisis vehicula. Vivamus id lacinia nisl. Sed tempus, orci in tincidunt dignissim, nulla nibh fringilla magna, et rutrum erat sapien ac turpis. Curabitur laoreet id mi in luctus. Vestibulum nec erat et nunc bibendum feugiat vitae nec eros. Morbi vitae convallis neque, vitae faucibus leo. Suspendisse sem justo, vestibulum eget nulla varius, molestie vestibulum nibh. Nullam eleifend arcu enim, et porta felis pretium id. Cras eu sapien quis lacus feugiat venenatis.
Sed diam turpis, interdum vel felis imperdiet, posuere venenatis augue. Maecenas sapien nulla, consectetur vitae mattis in, finibus id lorem. Quisque consequat euismod vestibulum. Maecenas congue velit lorem, tincidunt tristique lorem consectetur quis. Proin vulputate porta convallis. Cras id tincidunt nulla. Proin sit amet turpis imperdiet turpis aliquet feugiat sit amet eu augue. Donec ut consequat neque. Morbi laoreet leo eu augue ullamcorper, ut porttitor lectus pulvinar.
Vivamus vitae nisi eu libero vestibulum sollicitudin vitae in metus. Ut nec massa justo. Phasellus euismod consequat massa id tempor. Vestibulum et imperdiet quam. In ipsum nibh, consectetur quis posuere vitae, laoreet et ante. Maecenas cursus eros vel ante tempor, vel tristique neque tincidunt. Ut eget erat vitae sapien posuere luctus. Donec a finibus erat.
Quisque at ligula sit amet arcu molestie feugiat commodo sit amet nisi. Aenean aliquet hendrerit metus vitae lacinia. Pellentesque pulvinar luctus ipsum non condimentum. In fringilla ac dui a fermentum. Nulla sollicitudin, nisl a fermentum rutrum, eros diam posuere nunc, eget luctus risus eros nec ligula. Suspendisse sit amet ante porta, semper est tempor, pulvinar odio. Cras dictum elit sed orci lacinia aliquet. Ut consectetur, nisl sit amet lacinia finibus, leo eros tempus risus, at lacinia nulla nisi vel tellus. Aliquam at nisl egestas, auctor est a, congue diam. Proin fringilla pellentesque arcu sit amet aliquet.
Morbi a lectus ultricies nibh efficitur scelerisque ac ac urna. Nunc molestie risus vitae ipsum ornare vestibulum. Vivamus molestie tincidunt tempus. Maecenas tristique luctus augue ut lobortis. In risus turpis, condimentum mattis posuere eget, sodales ut lorem. Sed vulputate tempor diam in ullamcorper. Aenean aliquet lectus vitae massa laoreet, nec vehicula odio porta.
Aliquam tristique ut nisi sit amet luctus. Quisque nulla mi, vulputate at lobortis vitae, fermentum at lacus. Curabitur non massa in nunc tempus dignissim. Suspendisse erat velit, molestie non vulputate in, lobortis quis purus. Pellentesque quis placerat nisl. In posuere vestibulum nisl eget egestas. Sed non dui posuere, pharetra est eu, ullamcorper mauris. Pellentesque dictum varius erat at condimentum. Sed nisi enim, pellentesque quis enim molestie, imperdiet volutpat arcu. Aenean commodo finibus vulputate. Fusce ornare scelerisque urna, vitae tempus neque vehicula eu.
Fusce lacinia augue id tristique rutrum. Aenean ut elementum augue. Nulla ut lectus tellus. Pellentesque et libero et mauris facilisis rutrum a pharetra dolor. Vivamus lobortis lacus eu ante suscipit, vel commodo nisi venenatis. Sed gravida gravida congue. Aliquam rutrum dictum orci ac condimentum. Aenean ac ex eu diam dapibus venenatis id ut lacus.
Maecenas non porttitor orci. Donec dapibus rhoncus consectetur. Cras porta sagittis magna, at convallis eros consequat non. Quisque consectetur sem in sagittis sollicitudin. Maecenas id eros porta, tristique sem mollis, sagittis enim. Praesent mollis dapibus commodo. Etiam bibendum lacus nec iaculis eleifend. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam vitae finibus erat. Fusce sollicitudin eleifend elit in hendrerit. Quisque fermentum rhoncus pulvinar. In lobortis libero ac nisi euismod venenatis sit amet sed ipsum. Nam id molestie quam, eu bibendum diam.
Etiam non augue volutpat, fermentum nunc non, sodales lectus. Curabitur elementum euismod ex, quis porttitor erat tempus accumsan. Morbi fringilla nisl nec hendrerit cursus. Suspendisse egestas massa in nisl gravida sollicitudin. Maecenas maximus, tortor sed lacinia consectetur, nisi magna tincidunt lorem, vel maximus dolor sem in eros. Sed a vulputate nunc. Integer egestas, tortor vitae imperdiet cursus, massa enim pellentesque felis, sit amet sollicitudin velit arcu id lorem.
Nullam nec diam convallis, fermentum quam id, pulvinar velit. Pellentesque ultricies semper metus, cursus pulvinar tortor consectetur vel. Fusce suscipit urna sem, vitae ultrices lacus aliquet vel. Pellentesque tempor tristique mi, quis rhoncus lacus fringilla a. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi neque risus, malesuada at lacinia non, posuere elementum mauris. Pellentesque eget egestas est, nec congue leo. Nunc faucibus mi id vulputate sodales. Cras ornare eget justo eu blandit. Fusce id magna lorem. Nunc sit amet dolor placerat, ornare metus non, ultricies augue.
Ut sed auctor dui, ullamcorper pretium sapien. Sed ut felis id nunc mollis consectetur et in nunc. Nunc volutpat nec urna nec facilisis. Ut sagittis ipsum nec aliquam interdum. Donec rutrum dolor eget neque euismod vestibulum. Nulla condimentum neque neque, eget ullamcorper risus cursus scelerisque. Sed bibendum luctus dolor eget dignissim. Etiam non nulla enim. Vestibulum eget semper odio. Sed semper vulputate ipsum ac maximus. Nullam sed libero pellentesque quam rhoncus sagittis vitae sed ipsum.
Sed vitae ex vulputate, scelerisque sapien quis, mattis massa. Duis rutrum neque ante, a vestibulum massa congue at. Nam tincidunt ex luctus ultricies laoreet. Duis cursus magna eu diam malesuada ultricies. Cras porttitor sagittis tellus, eget mollis enim molestie eu. Nunc tristique semper massa. Nullam varius velit sit amet velit suscipit, a bibendum odio facilisis. Nunc et arcu bibendum, fermentum odio id, congue lectus. Phasellus malesuada volutpat justo ut sodales. Integer interdum et nibh non blandit. Nam a vulputate tellus.
Quisque auctor commodo nisl, ut semper lectus tincidunt sed. Integer cursus finibus est. Vivamus dui dui, feugiat nec leo eu, vestibulum interdum nunc. Nam massa dolor, tempor sit amet congue et, maximus at elit. In blandit at nibh et porta. Curabitur elementum efficitur elit, vel sagittis tellus eleifend lacinia. Sed tincidunt elit eu purus fermentum finibus. Aenean egestas dignissim tellus vel semper.
Nulla id condimentum lorem. Donec vitae dui quam. Maecenas sapien dui, facilisis sed tellus sit amet, pharetra iaculis ligula. Fusce sagittis, odio sed aliquam feugiat, nunc ipsum ultrices lorem, vel pellentesque nibh orci finibus leo. Proin a urna tincidunt, porttitor sapien ac, fringilla velit. Suspendisse in vehicula risus. Morbi mattis cursus cursus. Nam vel varius nisi, blandit malesuada lacus.
Nullam laoreet nibh quis erat dictum fringilla. Quisque a tortor dolor. Curabitur pulvinar molestie lectus, eget dapibus nisl tristique id. Nullam pulvinar accumsan arcu, euismod auctor nunc dignissim ac. Vivamus pulvinar massa at metus sollicitudin, dictum convallis arcu vestibulum. Suspendisse at leo nec sem sollicitudin luctus sit amet vitae nisi. Duis lobortis risus id odio luctus, sit amet feugiat mauris ullamcorper. Donec iaculis suscipit nunc eu dictum. Quisque ut lobortis elit. Cras eget auctor lacus. Donec mattis vitae nisi a porta. Morbi quis eros sed ante pharetra euismod. Nullam varius bibendum magna a cursus.
Aenean vestibulum leo magna, sit amet varius eros eleifend mollis. Aenean tempor ullamcorper velit vel sagittis. Aenean maximus enim nulla, nec pellentesque elit ullamcorper eget. Duis tincidunt, dolor id euismod rhoncus, orci dolor auctor augue, eu molestie odio tellus nec sem. Donec gravida arcu ac ex ultrices rhoncus. Nulla tincidunt gravida neque id dictum. Sed lectus lectus, rhoncus ac odio vitae, porttitor elementum nunc. Morbi gravida, leo id sollicitudin iaculis, mi elit volutpat eros, quis venenatis massa dui pharetra neque. Cras sit amet dignissim mi. Donec in lectus sed risus congue consequat. Duis ut malesuada metus. Praesent maximus ac tortor eget feugiat. Nulla in nunc eget quam sodales sagittis.
Nam eu porta enim. Fusce pretium elit sapien, a feugiat nibh tempor a. Etiam feugiat dui nec neque malesuada, quis tristique sapien vestibulum. Sed volutpat eget nulla id imperdiet. Morbi sodales tortor ac ligula vulputate tincidunt. Aliquam placerat orci sem, id fringilla orci facilisis eu. Nullam aliquet odio eget ante placerat blandit. Morbi ut justo cursus, ullamcorper purus id, scelerisque neque. Donec a nisi pellentesque, commodo magna efficitur, feugiat neque. Maecenas at quam eleifend, ornare sem non, pretium ante. Pellentesque eget fringilla ligula. Donec massa arcu, viverra auctor sem at, ultricies blandit odio. Proin sed leo quam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce elementum efficitur blandit. Morbi tincidunt porttitor odio nec placerat.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec vel libero pharetra, euismod nulla sit amet, volutpat lorem. Maecenas blandit magna ornare mi imperdiet luctus. Fusce congue risus et enim placerat ornare. Aenean ac magna eget risus rhoncus molestie at et leo. Cras mattis erat lectus, sed dignissim enim pulvinar vel. Donec turpis libero, condimentum sit amet rutrum id, blandit in diam. Praesent tincidunt malesuada lorem, at posuere nisi. Ut rutrum turpis vel mi blandit congue. Aenean viverra metus quis erat hendrerit, nec egestas diam placerat. Praesent vel ipsum enim. Praesent eget sollicitudin dui. Donec semper turpis id magna molestie, sit amet interdum odio lacinia. Curabitur ut mollis metus. Duis luctus leo velit, id accumsan risus sodales non.
Nullam ut arcu sed justo tempus consequat. Donec nisl ante, lacinia ac convallis ac, bibendum sed diam. Duis viverra dolor sed ex convallis, vel facilisis ligula maximus. Pellentesque eu pulvinar nulla. In ante risus, viverra a euismod et, laoreet a dui. In hac habitasse platea dictumst. Nunc ullamcorper tellus non viverra pharetra. Aenean dapibus dolor sit amet dui facilisis placerat. In hac habitasse platea dictumst. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec ac efficitur enim, ac placerat dui. Donec vitae vestibulum leo.
Aliquam vestibulum dictum metus, eget commodo ipsum sollicitudin et. Nam volutpat efficitur magna eu vestibulum. Donec dolor purus, aliquet quis orci ut, finibus molestie sapien. Mauris in libero in lorem pretium commodo eu sit amet justo. Integer eu elit sit amet orci cursus sagittis ac a ligula. Curabitur ac eleifend ante. Nulla placerat lacus eu molestie hendrerit.
Proin eu dignissim ante. Fusce lobortis eu ante sed finibus. Vivamus sed dictum turpis. Ut tristique vitae nibh at laoreet. Nullam eget interdum metus, sit amet porttitor nibh. Maecenas dignissim, lacus ac facilisis volutpat, ante nibh vehicula dui, nec facilisis enim turpis vel turpis. Proin risus tortor, vehicula sit amet congue eget, accumsan a magna. Suspendisse potenti. Praesent lacinia mollis feugiat. Donec a nunc ac nibh tincidunt volutpat. Proin nec urna eros. Sed vitae elit fringilla, congue sem non, mattis arcu. Maecenas euismod neque metus, consectetur vestibulum neque rutrum non.
Morbi magna metus, congue nec lacus id, semper mattis augue. Pellentesque vel dolor eu turpis luctus volutpat. Donec consectetur maximus commodo. Quisque erat elit, iaculis vel leo quis, volutpat mollis quam. Sed dui lectus, pretiu

1
sh/tests/custom-ls/folder1/ls-test

@ -0,0 +1 @@
hello

42
sh/tests/custom-ls_test.sh

@ -0,0 +1,42 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
shopt -s expand_aliases
FILENAME="student/custom-ls.sh"
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
source "$script_dirS"/$FILENAME
submitted=$(cd "$1" && custom-ls)
unalias custom-ls
source "$script_dirS"/solutions/custom-ls.sh
expected=$(cd "$1" && custom-ls)
unalias custom-ls
diff <(echo "$submitted") <(echo "$expected")
}
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
if [[ $(cat $FILENAME | grep echo | wc -l) -ne 0 ]]; then
echo "echo is not allowed in this exercise!"
exit 1
fi
challenge custom-ls/folder1
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

18
sh/tests/details_test.sh

@ -0,0 +1,18 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
touch file1.txt
submitted=$(bash "$script_dirS"/student/details.sh && ls -l file1.txt | awk '{print $1, $2, $5, $6, $7, $8, $9}')
expected=$(bash "$script_dirS"/solutions/details.sh && ls -l file1.txt | awk '{print $1, $2, $5, $6, $7, $8, $9}')
diff <(echo "$submitted") <(echo "$expected")
stat file1.txt
}
challenge
rm file1.txt

44
sh/tests/dir-info_test.sh

@ -0,0 +1,44 @@
#!/usr/bin/env bash
set -euo pipefail
IFS='
'
FILENAME="student/dir-info.sh"
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
rm -rf student/dir-info-files
mkdir student/dir-info-files
cd student/dir-info-files
directories=(folder1 folder2/aa folder2/ba/aa folder2/aa/ba)
for dir in "${directories[@]}"; do
mkdir -p "$dir"
done
files=(.abc 34 folder1/ab 4 folder1/ac 2 folder1/az 3 folder1/bz 3 \
folder1/cz 9 folder1/.hello 21 folder1/za! 3 folder2/ab 7 folder2/ac 0 \
folder2/alphabet 0 folder2/az 0 folder2/bz 4 folder2/cz 0 folder2/za! 28 \
folder2/aa/aa 3 folder2/aa/az 4 folder2/aa/.salut 7 folder2/aa/ba/ab 0 \
folder2/aa/ba/bz 0 folder2/ba/ac 0 folder2/ba/alphabetz 0 folder2/ba/.ola 17 \
folder2/ba/aa/alphabetz! 0 folder2/ba/aa/.ciao 7 folder2/ba/aa/cz 0 \
folder2/ba/aa/za! 0)
for ((i=0; i<${#files[@]}; i+=2)) do
dd if=/dev/zero of="${files[i]}" bs=1 count="${files[i + 1]}" 2> /dev/null
done
cd ../
challenge () {
submitted=$(bash "$script_dirS"/"$FILENAME" < <(echo "$1"))
expected=$(bash "$script_dirS"/solutions/dir-info.sh < <(echo "$1"))
diff <(echo "$submitted") <(echo "$expected")
}
challenge "dir-info-files/folder1"
challenge "dir-info-files/folder2"
challenge "dir-info-files"
rm -rf dir-info-files

37
sh/tests/division_test.sh

@ -0,0 +1,37 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
# Test if test command was used
if grep -q "test" "$script_dirS"/student/division.sh
then
echo "Error: the test command cannot be used in the student script"
return
fi
# Test with one or two arguments
if [ $# -eq 1 ]
then
submitted=$(bash "$script_dirS"/student/division.sh $1)
expected=$(bash "$script_dirS"/solutions/division.sh $1)
else
submitted=$(bash "$script_dirS"/student/division.sh $1 $2)
expected=$(bash "$script_dirS"/solutions/division.sh $1 $2)
fi
diff <(echo "$submitted") <(echo "$expected")
}
challenge "10" "2"
challenge "4" "2"
challenge "0.5" "0.5"
challenge "5" "2"
challenge "0.5"
challenge "foo" "bar"
challenge "1" "0"
challenge "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" "2"

15
sh/tests/easy-conditions_test.sh

@ -0,0 +1,15 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
for i in $(seq 1 5); do
export X=$(shuf -i 1-20 -n 1)
export Y=$(shuf -i 1-30 -n 1)
submitted=$(bash "$script_dirS"/student/easy-conditions.sh)
expected=$(bash "$script_dirS"/solutions/easy-conditions.sh)
diff <(echo "$submitted") <(echo "$expected")
done

12
sh/tests/easy-perm/example.txt

@ -0,0 +1,12 @@
Q. How did the programmer die in the shower?
A. He read the shampoo bottle instructions: Lather. Rinse. Repeat.
~~~~~~~~~~~~~~~~~~~~~~~~~
How many programmers does it take to change a light bulb?
None – It’s a hardware problem
~~~~~~~~~~~~~~~~~~~~~~~~~
Why do programmers always mix up Halloween and Christmas?
Because Oct 31 equals Dec 25.

16
sh/tests/easy-perm/example2.txt

@ -0,0 +1,16 @@
“The best TDD can do, is assure that code does what the programmer thinks it should do. That is pretty good BTW.”
“Simply put, things always had to be in a production-ready state: if you wrote it, you darn well had to be there to get it running!”
“If you think it’s expensive to hire a professional, wait until you hire an amateur.”
“Programming is not a zero-sum game. Teaching something to a fellow programmer doesn’t take it away from you.”
“A phased approach to continuous delivery is not only preferable, it’s infinitely more manageable.”
“So, what do you do?”
“I’m lean”
“What?”
“I’m agile”
“What?”
“Fine. I make websites.”

17
sh/tests/easy-perm_test.sh

@ -0,0 +1,17 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
chmod 303 easy-perm/*
challenge() {
submitted=$(bash "$script_dirS"/student/easy-perm.sh && ls -l "$1" | awk '{print $1}')
expected=$(bash "$script_dirS"/solutions/easy-perm.sh && ls -l "$1" | awk '{print $1}')
diff <(echo "$submitted") <(echo "$expected")
}
challenge easy-perm/

28
sh/tests/env-format_test.sh

@ -0,0 +1,28 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/env-format.sh"
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
if [[ $(cat $FILENAME | grep echo | wc -l) -ne 0 ]]; then
echo "echo is not allowed in this exercise!"
exit 1
fi
submitted=$(bash $FILENAME)
expected=$(bash solutions/env-format.sh)
diff <(echo "$submitted") <(echo "$expected")
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

38
sh/tests/file-checker_test.sh

@ -0,0 +1,38 @@
#!/usr/bin/env bash
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
# check that test command was not used
if grep -q "test" "$script_dirS"/student/file-checker.sh
then
echo "The 'test' command is not allowed in this exercise"
exit 1
fi
if test ! -e file-checker; then
mkdir file-checker
cd file-checker
touch readable-and-writable readable-only readable-and-executable readable-writable-executable
chmod -x "$script_dirS/file-checker/readable-and-writable"
chmod -xw "$script_dirS/file-checker/readable-only"
chmod -w "$script_dirS/file-checker/readable-and-executable"
chmod +x "$script_dirS/file-checker/readable-and-executable"
chmod +x "$script_dirS/file-checker/readable-writable-executable"
cd ..
fi
challenge() {
submitted=$(bash "$script_dirS"/student/file-checker.sh "$1")
expected=$(bash "$script_dirS"/solutions/file-checker.sh "$1")
diff <(echo "$submitted") <(echo "$expected")
}
challenge "$script_dirS/file-checker/readable-only"
challenge "$script_dirS/file-checker/readable-and-writable"
challenge "$script_dirS/file-checker/readable-and-executable"
challenge "$script_dirS/file-checker/readable-writable-executable"
rm -rf file-checker

17
sh/tests/file-details_test.sh

@ -0,0 +1,17 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
submitted=$(cd "$1" && bash "$script_dirS"/student/file-details.sh)
expected=$(cd "$1" && bash "$script_dirS"/solutions/file-details.sh)
diff <(echo "$submitted") <(echo "$expected")
}
challenge hard-perm

127
sh/tests/file-researcher/facts.txt

@ -0,0 +1,127 @@
Indonesia consists only of islands - 13,667 total
During World War II, the very first bomb dropped on Berlin by the Allies killed the only elephant in the Berlin Zoo
People who ride on roller coasters have a higher chance of having a blood clot in the brain
The tallest freestanding sculpture in the world is Chief Crazy Horse in South Dakota, USA
Marie Curie, the Nobel prize winning scientist who discovered radium, died of radiation poisoning
898 tornadoes were recorded to have occurred in the United States in the year 2000.
The word Popcorn is derived from the middle English word "poppe," which means "explosive sound"
The food that is digested in your stomach is called "chyme."
Alcohol beverages have all 13 minerals necessary for human life
The sentence "The quick brown fox jumps over the lazy dog." uses every letter in the alphabet. (Developed by Western Union to Test telex/twxcommunications)
The word housekeeping was invented by Shakespeare
The only two days of the year in which there are no professional sports games (MLB, NBA, NHL, or NFL) are the day before and the day after theMajorLeague All-Star Game.
In the great fire of London in 1666 half of London was burnt down but only 6 people were injured
Lack of sleep can affect your immune system and reduce your ability to fight infections
All dogs are the descendant of the wolf. These wolves lived in eastern Asia about 15,000 years ago
It is not possible to tickle yourself. The cerebellum, a part of the brain, warns the rest of the brain that you are about to tickle yourself. Since your brain knows this, it ignores the resulting sensation
Parma ham is only Parma ham if it is made in the Parma region of Italy. The British chain supermarket Asda, made and packaged its own "Parma ham" and was successfully sued by the real Parma ham people (Parma Ham Trade Association)
With winds of 50 miles per hour, The Statue of Liberty sways three inches and the torch sways five inches
A famous bullfighter, Lagarijo, killed 4,867 bulls in the 19th century.
Police detectives have used snapping turtles to help them locate dead bodies
In most advertisements, including newspapers, the time displayed on a watch is 10:10
The national sport of Japan is sumo wrestling
The early occurrence of a fetus yawning is at eleven weeks after conception
In a month, a fingernail grows an eighth of an inch
Edward VIII did not officially become the King of England as he abdicated the throne to marry an American divorcee
The book "Little Red Riding Hood" was banned in 1990 by two school districts in California. They did this because in the book there was a picture of a basket that had a bottle of wine in it
The reason why golf balls have dimples on them is because it helps in the ball to move a farther distance by reducing drag
Americans consume the most peanut butter in the world
Celtic warriors sometimes fought their battles naked, their bodies dyed blue from head to toe
To make butter more attractive in color, carrot juice was used by people in the Middle Ages
Early hockey games allowed as many as 30 players a side on the ice
Most fleas do not live past a year old
It takes seven to ten days to make a jelly belly jellybean
Some asteroids have other asteroids orbiting them
Maine is the only state whose name is just one syllable
The male praying mantis cannot copulate while its head is attached to its body. The female initiates sex by ripping the males head off
There is enough concrete in the Hoover Dam to pave a two lane highway from San Francisco to New York
Americans on the average eat 18 acres of pizza every day
Every 238 years, the orbits of Neptune and Pluto change making Neptune at times the farthest planet from the sun
There is a certain species of kangaroo that is only 2.5 centimeters long when it is born
In a lifetime, the average house cat spends approximately 10,950 hours purring
The real name of Toto the dog in "The Wizard Of Oz" was Terry
Stannous fluoride, which is the cavity fighter found in toothpaste is made from recycled tin
It takes 12 honeybees to make one teaspoon of honey
Thomas Watson, who was the chairman of IBM in 1943 predicted that their would probably only be a world market for five computers.
The largest hamburger cooked in the world weighed in at 6,040 pounds
The first lighthouse was in Alexandria in 290 B.C
Heinz first started making ketchup in 1876 and the recipe has remained the same ever since
The largest wedding chapel in Las Vegas is the Viva Las Vegas Chapel, which can seat 100 people
The most popular name for a pet in the United States is Max
Spiral staircases in medieval castles are running clockwise. This is because all knights used to be right-handed. When the intruding army would climb the stairs they would not be able to use their right hand which was holding the sword because of the difficulties of climbing the stairs. Left-handed knights would have had no troubles, except left-handed people could never become knights because it was assumed that they were descendants of the devil
The largest shopping mall in the world is the West Edmonton Mall located in Edmonton, Alberta, Canada
The CN Tower located in Toronto, Ontario Canada took a total construction time of 40 months to complete at an original cost of $63 million
The 20th president of the United States, James Garfield, was able to write Greek with one hand and Latin with the other at the same time
The country of Andorra has a zero percent unemployment rate
In Los Angeles, there are fewer people than there are automobiles
A woman has approximately 4.5 litres of blood in her body, while men have 5.6 litres
In India, pickled ginger, minced mutton and a cottage cheese like substance are popular pizza toppings
Oral-B were the first toothbrushes to go to the moon when they were aboard the Apollo 11 mission
A maple tree is usually tapped when the tree is at least 45 years old and has a diameter of 12 inches
In 1998, a law passed in the U.S. state of Virginia allows drivers to keep their road kill, as long as they report it within 12 hours. updated
A language becomes extinct in this world every two weeks
An acre of trees can remove about 13 tons of dust and gases every year from the surrounding environment
The decomposition point of Olive Oil is 220 degrees Celsius
Ten radishes only contain eight calories
Annually a thousand people are killed by scorpions in Mexico
Every year, 100 million sharks are killed by people
Tug of war was an Olympic event from 1900-1920
Of all the countries, Brazil has the most plant species, with over 56,000
One female mouse can produce up to 100 babies a year
Impotence is grounds for divorce in 26 U.S. states
Women who are romance novel readers are reported to make love 74% more often with their partners than women who do not read romance novels.
The average lifespan of a human taste bud is ten days
The monogram "RR" for Rolls-Royce has never been altered, except for when Sir Henry Royce passed away in 1933. Then it was changed from red to black.
People with darker skin will not wrinkle as fast as people with lighter skin
Fido means faithful in Latin
Pebbles cereal was actually named after the shape of the cereal and not the Pebbles Flintstone character
A group of kangaroos is called a mob
Cat's urine glows under a blacklight.
Every three seconds, a new baby is born
More than 260,000 people have been killed by volcanic activity since 1700 AD.
The only predator that polar bears have are humans
Many insects can carry 50 times their own body weight
The last land battle of the U.S. Civil War was fought in Texas
Annually 7 million tons of textiles and clothing is thrown out. Out of this, only 12% is used again or recycled
A scorpion can have up to 12 eyes
A snake charmer in Bangladesh once found 3,500 poisonous cobras and their eggs hidden underneath the floors of two suburban homes
The IRS employees tax manual has instructions for collecting taxes after a nuclear war
There are approximately fifty Bibles sold each minute across the world
The pectin that is found in apples aids in lowering cholesterol levels
Post-It Notes, which are adhesive notes, were invented while looking for a way to improve the acrylate adhesive found in tapes
Crayola Crayons currently has over 120 different crayon colors
Odontophobia is the fear of teeth
The width of a tornado can range from less than ten yards to more than a mile.
In Johannesburg, the average car will be involved in an accident once every four years.
The youngest actress to be nominated as best actress is Keisha Castle-Hughes who was nominated at just 13 years old
The Taj Mahal was actually built for use as a tomb
According to studies, an average roll of toilet paper lasts about five days in the bathroom
Almonds are members of the peach family
The oldest known disease in the world is leprosy
A fall of 30 feet can be survived my most cats
The largest member of the dolphin family are orcas
In 1477, the first diamond engagement ring was given to Mary of Burgundy by Archduke Maximillian of Austria
The hormone replacement drug "Premarin" is made from the urine of pregnant horses
TWIX Caramel Cookie Bars were first introduced in 1979
Nintendo was first establish in 1889 and they started out making special playing cards
People over the age of fifty will start to lose their dislike for foods that taste bitter
In Kentucky, 50 percent of the people who get married for the first time are teenagers
Elephants have been known to learn up to 60 commands
On average 1,668 gallons of water are used by each person in the United States daily
Copper is the second most used metal in the world.
Milton Bradley originally wanted to name the game Twister, Pretzel; but he could not since the name was copyrighted
According to studies, men prefer to have white bedrooms and women prefer to have blue bedrooms
If someone was to fly once around the surface of the moon, it would be equal to a round trip from New York to London
St. Patrick never really drove out any snakes from Ireland. This story was an analogy of how he drove paganism out of Ireland
Fat is important for the development of children and normal growth
The most common seasonings found in American homes are chili powder, cinnamon, and seasoned salts
People who have eaten beetles say that it tastes like apples
Montreal was named after a local mountain "Mont Royal."
Millie the White House dog earned more than 4 times as much as President Bush in 1991. And, rightfully so
In an average lifetime, a person will spend 4 years traveling in an automobile and six months waiting at a red light.
A small drip from a faucet can waste up to 50 gallons of water daily, which is enough water to run a dishwasher twice on a full cycle
Kotex was first manufactured as bandages, during W.W.I
The longest Monopoly game ever played was 1,680 hours long, which is seventy straight days
The first known contraceptive was crocodile dung, used by Egyptians in 2000 B.C
Over 1,600 people in North America have been victims of trunk entrapment (being locked inside of a car trunk)
A rhinoceros horn is made of compacted hair

28
sh/tests/file-researcher_test.sh

@ -0,0 +1,28 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/file-researcher.sh"
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
if [[ $(cat $FILENAME | grep echo | wc -l) -ne 0 ]]; then
echo "echo is not allowed in this exercise!"
exit 1
fi
submitted=$(bash $FILENAME)
expected=$(bash solutions/file-researcher.sh)
diff <(echo "$submitted") <(echo "$expected")
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

16
sh/tests/file-struct_test.sh

@ -0,0 +1,16 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
print_content() {
mkdir -p uncompressed
tar -xpf file-struct.tar -C uncompressed
tree uncompressed
}
submitted=$(cd student && print_content)
expected=$(cd solutions && print_content)
diff <(echo "$submitted") <(echo "$expected")

0
sh/tests/find-files-extension/folder1/file1.txt

0
sh/tests/find-files-extension/folder1/file2.txt

0
sh/tests/find-files-extension/folder1/file3.txt

0
sh/tests/find-files-extension/folder1/test4.sh

0
sh/tests/find-files-extension/folder2/fileInsideAfolder4.txt

0
sh/tests/find-files-extension/folder2/test.sh

0
sh/tests/find-files-extension/folder2/testtxt/fileInsideAfolder5.txt

0
sh/tests/find-files-extension/folder2/testtxt/test/fileInsideAfolder6.txt

0
sh/tests/find-files-extension/folder2/testtxt/test/lol.sh

35
sh/tests/find-files-extension_test.sh

@ -0,0 +1,35 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/find-files-extension.sh"
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
submitted=$(cd "$1" && bash "$script_dirS"/$FILENAME)
expected=$(cd "$1" && bash "$script_dirS"/solutions/find-files-extension.sh)
diff <(echo "$submitted") <(echo "$expected")
}
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
if [[ $(cat $FILENAME | grep echo | wc -l) -ne 0 ]]; then
echo "echo is not allowed in this exercise!";
exit 1
fi
challenge find-files-extension/folder1
challenge find-files-extension/folder2
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

0
sh/tests/find-files/folder2/aa/ba/ab

0
sh/tests/find-files/folder2/aa/ba/bz

0
sh/tests/find-files/folder2/alphabet

0
sh/tests/find-files/folder2/ba/aa/alphabetz!

0
sh/tests/find-files/folder2/ba/aa/cz

0
sh/tests/find-files/folder2/ba/aa/za!

0
sh/tests/find-files/folder2/ba/alphabetz

35
sh/tests/find-files_test.sh

@ -0,0 +1,35 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/find-files.sh"
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
submitted=$(cd "$1" && bash "$script_dirS"/$FILENAME)
expected=$(cd "$1" && bash "$script_dirS"/solutions/find-files.sh)
diff <(echo "$submitted") <(echo "$expected")
}
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
if [[ $(cat $FILENAME | grep echo | wc -l) -ne 0 ]]; then
echo "echo is not allowed in this exercise!";
exit 1
fi
challenge find-files/folder1
challenge find-files/folder2
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

88
sh/tests/grades_test.sh

@ -0,0 +1,88 @@
#!/usr/bin/env bash
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
input="${@: -1}"
args=${@:1:$#-1}
submitted=$(
bash -c ""$script_dirS"/student/grades.sh $args" <<EOF
$input
EOF
)
expected=$(
bash -c ""$script_dirS"/solutions/grades.sh $args" <<EOF
$input
EOF
)
diff <(echo "$submitted") <(echo "$expected")
if [ $? != 0 ]; then
exit 1
fi
}
challenge 1 "Student1
90
"
challenge 1 "Student2
70
"
challenge 1 "Student3
50
"
challenge 1 "Student4
92
"
challenge 1 "Student5
75
"
challenge 1 "Student6
55
"
challenge 1 "Student7
25
"
challenge 2 "Student1
0
Alice
100
"
challenge 3 "Bob
90
Alice
75
Eve
55
"
challenge 5 "Bob
90
Alice
75
Eve
55
john
49
Eric
65
"
challenge 3 "Bob
90
Alice
150
Eve
55
"
challenge 1 "Student1
not_good
"
challenge 1 "Student1
-75
"
challenge 1 1 "Louis
20
"

29
sh/tests/greatest-of-all_test.sh

@ -0,0 +1,29 @@
#!/usr/bin/env bash
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
submitted=$(echo -e "0\n3\n2\n5\n7\n1\n4\n9\n8\n6\n10" | bash -c ""$script_dirS"/student/greatest-of-all.sh")
expected=$(echo -e "0\n3\n2\n5\n7\n1\n4\n9\n8\n6\n10" | bash -c ""$script_dirS"/solutions/greatest-of-all.sh")
diff <(echo "$submitted") <(echo "$expected")
submitted=$(echo -e "26\n85\n21\n94\n68\n60\n99\n31\n10\n98\n" | bash -c ""$script_dirS"/student/greatest-of-all.sh")
expected=$(echo -e "26\n85\n21\n94\n68\n60\n99\n31\n10\n98\n" | bash -c ""$script_dirS"/solutions/greatest-of-all.sh")
diff <(echo "$submitted") <(echo "$expected")
submitted=$(echo -e "152\n485\n569\n611\n871\n551\n984\n895\n285\n989\n" | bash -c ""$script_dirS"/student/greatest-of-all.sh")
expected=$(echo -e "152\n485\n569\n611\n871\n551\n984\n895\n285\n989\n" | bash -c ""$script_dirS"/solutions/greatest-of-all.sh")
diff <(echo "$submitted") <(echo "$expected")
submitted=$(echo -e "152\n10001\n569" | bash -c ""$script_dirS"/student/greatest-of-all.sh")
expected=$(echo -e "152\n10001\n569" | bash -c ""$script_dirS"/solutions/greatest-of-all.sh")
diff <(echo "$submitted") <(echo "$expected")
submitted=$(echo -e "152\n485\nalpha\n" | bash -c ""$script_dirS"/student/greatest-of-all.sh")
expected=$(echo -e "152\n485\nalpha\n" | bash -c ""$script_dirS"/solutions/greatest-of-all.sh")
diff <(echo "$submitted") <(echo "$expected")
submitted=$(echo -e "152\n485\n-45\n45\n" | bash -c ""$script_dirS"/student/greatest-of-all.sh")
expected=$(echo -e "152\n485\n-45\n45" | bash -c ""$script_dirS"/solutions/greatest-of-all.sh")
diff <(echo "$submitted") <(echo "$expected")
}
challenge

19
sh/tests/hard-conditions_test.sh

@ -0,0 +1,19 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
echo "echo hello word" >test-hard-conditions.sh
echo "echo hello word" >non-ex
chmod +x test-hard-conditions.sh
submitted=$(bash "$script_dirS"/student/hard-conditions.sh test-hard-conditions.sh)
expected=$(bash "$script_dirS"/solutions/hard-conditions.sh test-hard-conditions.sh)
diff <(echo "$submitted") <(echo "$expected")
submitted=$(bash "$script_dirS"/student/hard-conditions.sh non-ex)
expected=$(bash "$script_dirS"/solutions/hard-conditions.sh non-ex)
diff <(echo "$submitted") <(echo "$expected")

17
sh/tests/hard-perm_test.sh

@ -0,0 +1,17 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
chmod 776 hard-perm/*
challenge() {
submitted=$(bash "$script_dirS"/student/hard-perm.sh && ls -l "$1" | awk '{print $1}')
expected=$(bash "$script_dirS"/solutions/hard-perm.sh && ls -l "$1" | awk '{print $1}')
diff <(echo "$submitted") <(echo "$expected")
}
challenge hard-perm/

28
sh/tests/head-and-tail_test.sh

@ -0,0 +1,28 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/head-and-tail.sh"
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
if [[ $(cat $FILENAME | grep echo | wc -l) -ne 0 ]]; then
echo "echo is not allowed in this exercise!";
exit 1
fi
submitted=$(bash $FILENAME)
expected=$(bash solutions/head-and-tail.sh)
diff <(echo "$submitted") <(echo "$expected")
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

24
sh/tests/hello-devops_test.sh

@ -0,0 +1,24 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/hello-devops.sh"
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
submitted=$(bash $FILENAME)
expected=$(bash solutions/hello-devops.sh)
diff <(echo "$submitted") <(echo "$expected") | cat -t
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

40
sh/tests/in-back-ground_test.sh

@ -0,0 +1,40 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/in-back-ground.sh"
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
echo "- Australia is wider than the moon. The moon sits at 3400km in diameter, while Australia's diameter from east to west is almost 4000km." >facts
challenge() {
submitted=$(cd "$1" && bash "$script_dirS"/$FILENAME)
std_out=$(cat output.txt)
expected=$(cd "$1" && bash "$script_dirS"/solutions/in-back-ground.sh)
sol_out=$(cat output.txt)
diff <(echo "$submitted") <(echo "$expected")
diff <(echo "$std_out") <(echo "$sol_out")
}
challenge_no_output() {
if [[ -f output.txt ]]; then
exit 1
fi
submitted=$(cd "$1" && bash "$script_dirS"/$FILENAME)
expected=$(cd "$1" && bash "$script_dirS"/solutions/in-back-ground.sh)
diff <(echo "$submitted") <(echo "$expected")
}
if [[ $(cat $FILENAME | grep 'nohup' | wc -l) -lt 1 ]]; then
echo "The file does not contain the required commands"
exit 1
fi
challenge .
rm output.txt
echo "The sun is a star!" >facts
challenge_no_output .

29
sh/tests/in-the-dark_test.sh

@ -0,0 +1,29 @@
#!/usr/bin/env bash
# Unofficial Bash Strict Mode
set -euo pipefail
IFS='
'
FILENAME="student/in-the-dark.sh"
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
submitted=$(cd "$1" && bash "$script_dirS"/$FILENAME)
expected=$(cd "$1" && bash "$script_dirS"/solutions/in-the-dark.sh)
diff <(echo "$submitted") <(echo "$expected")
}
# True if FILE exists and is a regular file
if [ -f ${FILENAME} ]; then
# FILE exists and it's not empty
if [ -s ${FILENAME} ]; then
challenge .
else
echo "The file exist but is empty"
exit 1
fi
else
echo "File does not exist"
exit 1
fi

20
sh/tests/input-redirection_test.sh

@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
$(bash "$script_dirS"/student/input-redirection.sh)
submitted=$(bash "$script_dirS"/show-info.sh)
rm show-info.sh
$(bash "$script_dirS"/solutions/input-redirection.sh)
expected=$(bash "$script_dirS"/show-info.sh)
rm show-info.sh
diff <(echo "$submitted") <(echo "$expected")
}
challenge

69
sh/tests/joker-num_test.sh

@ -0,0 +1,69 @@
#!/usr/bin/env bash
set -euo pipefail
IFS='
'
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd)
challenge() {
args=${@:1:$#-1}
input="${@: -1}"
submitted=$(
./student/joker-num.sh $args <<EOF
$input
EOF
)
expected=$(
./solutions/joker-num.sh $args <<EOF
$input
EOF
)
diff <(echo "$submitted") <(echo "$expected")
}
# Good input, win
challenge 50 "1
100
49
51
50
"
# Good input, lose
challenge 50 "10
20
30
40
41
42
"
# Bad arguments
challenge "10"
# Bad arguments
challenge 0 "10"
# Bad arguments
challenge 101 "10"
# Bad arguments
challenge -20 "10"
# Bad arguments
challenge aa "10"
# Handle bad input
challenge 78 "10
aa
3000
-10
0
0
40
80
79
78"

Some files were not shown because too many files changed in this diff diff.show_more

Loading…
Cancel
Save