{"id":20374935,"url":"https://github.com/f0rno/kata-hand-programming-language","last_synced_at":"2025-08-01T03:36:32.603Z","repository":{"id":207588473,"uuid":"717519833","full_name":"F0rno/kata-Hand-Programming-Language","owner":"F0rno","description":"Kata para practicar TDD y Extreme programming, desarrollando un compilador para un lenguaje de programación basado en emojis","archived":false,"fork":false,"pushed_at":"2024-01-04T13:03:30.000Z","size":632,"stargazers_count":1,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-12T07:17:46.739Z","etag":null,"topics":["emojis","extreme-programming","kata","multi-language","tdd","tdd-kata"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/F0rno.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-11T17:59:37.000Z","updated_at":"2025-01-20T19:41:11.000Z","dependencies_parsed_at":"2024-01-04T14:24:28.572Z","dependency_job_id":"ce873801-dfb2-4822-9025-09929e974ed0","html_url":"https://github.com/F0rno/kata-Hand-Programming-Language","commit_stats":null,"previous_names":["f0rno/kata-hand-programming-language"],"tags_count":0,"template":false,"template_full_name":"SoftwareCraftersMurcia/kata-setup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F0rno%2Fkata-Hand-Programming-Language","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F0rno%2Fkata-Hand-Programming-Language/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F0rno%2Fkata-Hand-Programming-Language/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F0rno%2Fkata-Hand-Programming-Language/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/F0rno","download_url":"https://codeload.github.com/F0rno/kata-Hand-Programming-Language/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248530604,"owners_count":21119601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emojis","extreme-programming","kata","multi-language","tdd","tdd-kata"],"created_at":"2024-11-15T01:27:55.122Z","updated_at":"2025-04-12T07:17:51.441Z","avatar_url":"https://github.com/F0rno.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eHand Programming Language Kata\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./imgs/Turing_Machine.png\"\u003e\n\u003c/p\u003e\n\n# Objetivo\n\nEl objetivo de esta kata es aplicar y perfeccionar las técnicas de TDD y Extreme Programming al desarrollar un interprete para un lenguaje basado en emojis\n\n### Funcionamiento\n\nEste lenguaje modifica una memoria de tamaño indefinido, compuesta por celdas que empiezan inicializadas a 0\n\n* 👉 mueve el puntero de memoria a la siguiente celda\n* 👈 mueve el puntero de memoria a la celda anterior\n* 👆 incrementa el valor de la celda de memoria actual\n* 👇 disminuye el valor de la celda de memoria actual\n* 👊 muestra el valor de la celda actual según su equivalencia en ASCII\n* 🤜 si la celda de memoria en la posición actual tiene valor 0, salta justo después del 🤛 correspondiente\n* 🤛 si la celda de memoria en la posición actual no tiene valor 0, salta justo después de la 🤜 correspondiente\n\n#### [⚠️](https://emojiterra.com/es/senal-de-advertencia/) *Aclaraciones* [⚠️](https://emojiterra.com/es/senal-de-advertencia/)\n\n- Las celdas de memoria son bytes, con un valor de 0 al 255\n  - Si disminuyes 0 obtendrás 255\n  - Si incrementas 255 obtendrás 0\n- La memoria empieza en la posición 0\n- La memoria se puede incrementar de manera “infinita”, pero si disminuyes la dirección de memoria 0, tendrás que devolver la mayor dirección de memoria conocida\n\n## Retos\n\n#### **1. Incrementa el puntero de memoria `👉`**\n\n* Pasa de la posición 0 de memoria, a la 1\n* Pasa de la posición 1 de memoria, a la 2\n* Pasa de la posición 255 de memoria, a la 256\n* Pasa de la posición 256 de memoria, a la 257\n\n#### **2. Decrementa el puntero de memoria `👈`**\n\n* Pasa de la posición 3 de memoria, a la 2\n* Pasa de la posición 2 de memoria, a la 1\n* Pasa de la posición 1 de memoria, a la 0\n\n`A partir de aquí deberías tener en cuenta implementar la estructura de datos que actuara como memoria`\n\n* Pasa de la posición 0 de memoria, a la mayor posición conocida\n\n#### **3. Leer posiciones de memoria**\n\n* Establece las siguientes direcciones de memoria a estos valores:\n  * 0 = 1\n  * 1 = 2\n  * 2 = 3\n* Lee el valor de memoria en la posición 0 y obtén 1\n* Lee el valor de memoria en la posición 1 y obtén 2\n* Lee el valor de memoria en la posición 2 y obtén 3\n* Lee el valor de la mayor posición de memoria conocida y obtén 3\n* Lee el valor de memoria en la posición 3 y obtén 0\n\n#### **4. Incrementa el valor de posiciones en memoria `👆`**\n\n* Incrementa una celda con valor 0 a 1\n* Incrementa una celda con valor 1 a 2\n* Incrementa una celda con valor 2 a 3\n* Incrementa una celda con valor 255 a 0\n\n#### **5. Decrementa el valor de una posición de memoria `👇`**\n\n* Disminuye una celda con valor 3 a 2\n* Disminuye una celda con valor 2 a 1\n* Disminuye una celda con valor 1 a 0\n* Disminuye una celda con valor 0 a 255\n\n#### 6. Escribe en posiciones de memoria\n\n* Escribe en la posición 0, 1\n* Escribe en la posición 1, 2\n* Escribe en la posición 2, 3\n* Escribe en la posición 3, 4\n\n#### 7. Obtén el carácter ASCII `👊`\n\n* De una celda con valor 65 obtén su valor ASCII, \"A\"\n* De una celda con valor 66 obtén su valor ASCII, \"B\"\n* De una celda con valor 67 obtén su valor ASCII, \"C\"\n* De una celda con valor 68 obtén su valor ASCII, \"D\"\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./imgs/tabla_ASCII.png\"\u003e\n\u003c/p\u003e\n\n#### **8. Ejecuta los siguiente emojis para obtener sus respectivos mensajes**\n\n* A\n  * 👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊\n* B\n  * 👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊\n* C\n  * 👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊\n* Hola\n  * 👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊👉👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊👉👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊\n\n#### **9. Condicionales (`🤜` y `🤛`)**\n\n* Cuando te encuentres un `🤜` haz que el puntero de ejecución del programa salte al `🤛` correspondiente, si el valor de la celda de memoria actual es 0\n  * Test cases\n    * 🤜👆🤛\n    * 👆🤜👆🤛\n  * A\n    * 🤜👆🤛👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊\n  * B\n    * 👆🤜👆🤛👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊\n* Cuando te encuentres un `🤛` haz que el puntero de ejecución del programa salte al `🤜` correspondiente, si el valor de la celda de memoria actual es diferente a 0\n  * Test cases\n    * 👆🤛👆🤜\n    * 🤛👆🤜\n  * A\n    * 👆🤛👆🤜👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊\n  * B\n    * 🤛👆🤜👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊\n\n#### **10. Ejecuta los siguientes emojis para obtener el mensaje \"Emojis everywhere\"**\n\n* 👉👉👉🤜👆👇👆👇👆👇👆👇👆👇👆👇🤛👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👉👉👉👉👉👉👉👉👆🤛👆👇👆👇👆👇👆👇👆👇👆👇👆👇👆👇🤜👇👈👈👈👈👈👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👉👉👉👉👉👆🤛👆👇👆👇👆👇👆👇👆👇👆👇🤜👇👈👈👈👈👈👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊👉👉👉👉👆🤛👆👇👆👇👆👇👆👇👆👇👆👇👆👇👆👇🤜👇👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👉👉👉👉👉👉👆🤛👆👇👆👇👆👇👆👇🤜👇👈👈👈👈👈👈👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊👉👉👉👉👉👉👆🤛👆👇👆👇👆👇👆👇🤜👇👈👈👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👉👉👉👉👉👉👉👆🤛👆👇👆👇👆👇👆👇👆👇👆👇👆👇👆👇🤜👇👈👈👈👈👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👉👉👉👉👉👉👉👉👉👆🤛👆👇👆👇👆👇👆👇👆👇👆👇🤜👇👈👈👈👈👈👈👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👉👉👉👉👉👉👆🤛👆👇👆👇👆👇👆👇🤜👇👈👈👈👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👉👉👉🤜👆👇👆👇👆👇👆👇👆👇👆👇👆👇🤛👈👈👈👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊👉👉👉👆🤛👆👇👆👇👆👇👆👇👆👇🤜👇👈👈👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊👉👉👉👉👉👉👉👉👉🤜👆👇👆👇👆👇👆👇🤛👈👈👈👈👈👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👉👉👉👉🤜👆👇👆👇👆👇👆👇👆👇👆👇👆👇👆👇🤛👈👈👈👈👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊👉👉👉👉👉👆🤛👆👇👆👇👆👇👆👇👆👇🤜👇👈👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👉👉👉👉👉👆🤛👆👇👆👇👆👇👆👇👆👇👆👇👆👇👆👇🤜👇👈👈👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊👉👉👉👆🤛👆👇👆👇👆👇👆👇🤜👇👈👈👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👊👉👉👉👉👉👉👉👆🤛👆👇👆👇👆👇👆👇🤜👇👈👈👈👈👈👈👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👊\n\n# Reconocimientos y Agradecimientos\n\n* **Esta kata es un fork de [hand-challenge](https://github.com/jesus-seijas-sp/hand-challenge) por [Jesús Seijas](https://github.com/jesus-seijas-sp)**\n* **Agradecimientos a [Emmanuel Valverde Ramos](https://github.com/khru) por el feedback**\n* **Creada por mí, [F0rno](https://github.com/F0rno)**\n\n# Base para hacer tests\n\nConfiguración básica para empezar a hacer una kata o aprender a hacer tests en los siguientes lenguajes:\n\n- PHP con PHPUnit\n- Javascript con Jest\n- Typescript con Node\n- Typescript con Deno\n- Java con Junit y Mockito\n- Scala con Munit y Scalacheck\n- Kotlin con JUnit5 y MockK\n- C# con xUnit (FluentAsertion) y NSubstitute (para mock)\n\n# Configuración específica por lenguaje\n\n## PHP con PHPUnit\n\n1. Instalar [composer](https://getcomposer.org/) `curl -sS https://getcomposer.org/installer | php`\n2. `composer install` (estando en la carpeta php)\n3. `vendor/bin/phpunit` o `composer test`\n\n### 📚 Documentación\n\n- [PHPUnit](https://phpunit.readthedocs.io/)\n\n## Javascript con Jest\n\n1. Instalar [Node](http://nodejs.org/)\n2. `npm install` (Estando en la carpeta javascript)\n3. `npm test`\n\n### 📚 Documentación\n\n- [Jest](https://jestjs.io)\n\n## [Typescript con Node](/typescript/README.md)\n\n## Typescript con Deno\n\n1. Instalar [Deno](https://deno.land/#installation)\n2. `deno test` (Estando en la carpeta typescript)\n\n### 📚 Documentación\n\n- [Deno](https://deno.land/manual)\n- [BDD module](https://deno.land/manual/testing/behavior_driven_development)\n- [Expect module](https://deno.land/x/expect)\n\n## Java con Junit y Mockito\n\n1. Instalar las dependencias y tests con Maven [mvn test]\n2. Ejecutar los tests con el IDE\n\n### 📚 Documentación\n\n- [JUnit](https://github.com/junit-team/junit/wiki)\n- [Mockito](http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html)\n\n## Scala con Munit y Scalacheck\n\n1. `sbt` (en la carpeta scala)\n2. `~test` para ejecutar los test en hot reload\n\n### 📚 Documentación\n\n- [Munit](https://scalameta.org/munit/docs/tests.html)\n- [Scalacheck](https://github.com/typelevel/scalacheck/blob/main/doc/UserGuide.md) para testing basado en propiedades\n\n### Linux/Mac\n\n1. Instalar [SDKMan](https://sdkman.io/)\n2. `sdk install java 11.0.12-open` instala OpenJDK\n3. `sdk install sbt` una vez instalado SDKMan\n\n### Windows\n\n1. Instalar [OpenJDK](https://docs.microsoft.com/es-es/java/openjdk/download#openjdk-110141-lts--see-previous-releases)\n2. Instalar [SBT](https://www.scala-sbt.org/download.html)\n\n### Visual Studio Code\n\n1. Descargar [Visual Studio Code](https://code.visualstudio.com/)\n2. Instalar para VS Code [Metals](https://scalameta.org/metals/docs/editors/vscode)\n\n## Kotlin con JUnit5 y MockK\n\n1. Por consola: Puedes instalar dependencias y lanzar los tests con `gradlew test`\n2. Usando IDE: Simplemente abre el proyecto desde el raiz de la plantilla Kotlin\n\n### 📚 Documentación\n\n- [JUnit5](https://junit.org/junit5/)\n- [MockK](https://mockk.io/)\n\n## C# con xUnit (con FluentAsertion) y NSubstitute (para mock)\n\n1. Instalar Microsoft Visual Studio Community 2022\n2. Abre el proyecto y se descargaran automáticamente los paquetes Nuguet necesarios\n\n### 📚 Documentación\n\n- [xUnit](https://xunit.net/)\n- [NSubstitute](https://nsubstitute.github.io/help.html)\n- [FluentAssertions](https://fluentassertions.com/introduction)\n\n## Python\n\n1. Instalar python 3.x\n2. Una vez descargado el código fuente dentro de la carpeta */python/ creamos un virtual enviroment:\n3. `python3 -m venv env`\n4. Activamos en virtual environment:\n\n- windows: `.\\env\\Scripts\\activate.bat`\n- linux/mac: `source env/bin/activate`\n\n5. `pytest` para ejecutar los tests.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff0rno%2Fkata-hand-programming-language","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ff0rno%2Fkata-hand-programming-language","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff0rno%2Fkata-hand-programming-language/lists"}