---
# System prepended metadata

title: Homework 1 - Chess

---

# Homework 1 - Chess

Läxan för följande två veckor är att implementera logiken till ett schackspel (vems tur det är, hur pjäser får röra sig, schackning, rockader, promovering, passant, ...). Som referens för reglerna finns t.ex. [Wikipedia](https://sv.wikipedia.org/wiki/Schackregler). Koden **måste** vara skriven i Rust.

Ni ska implementera detta i form av ett bibliotek som ska kunna användas av vem som helst. Ni ska inte skriva ett GUI utan efter denna läxa kommer ni skriva ett GUI till någon annas bibliotek. Det räcker med något enkelt kommandoradsinterface som hjälper er att testa saker, detta är dock inte obligatoriskt.

Fokusera på att skriva ett bibliotek som är lätt av en av era ++ kamrater att använda. Se till att ert bibliotek har ett logisk och lätt använt API, kommentarer samt tester för att se till att koden fungerar.

Om ni har tid kan det vara roligt att lägga till några ytterligare features:
- Andra spelsätt -- t.ex. [Fischer random](https://en.wikipedia.org/wiki/Chess960) eller [Kriegspiel](https://en.wikipedia.org/wiki/Kriegspiel_(chess))
- Andra pjästyper

Ni **ska** använda er av Cargo och ni **ska** skriva bra tester.

Lägg koden i ett publikt gitrepo på github.com i INDA22PlusPlus organisationen, "INDA22PlusPlus/**_kth-id_**-chess".

Det är viktigt att ni gör denna läxa ordentligt, eftersom att senare läxor kommer att bygga vidare på den.

### Krav
* Koden måste vara skriven i Rust
* Cargo (Rusts build system) måste användas
* Koden måste vara väl tested
* Koden ska kunna användas som ett bibliotek av någon annan, alltså ska det inte bara vara ett CLI interface.
* Biblioteket ska ha ett logiskt API där inte flera steg måste göras i en specifik ordning för att saker ska fungera.

### Frågor att fundera på inför nästa övning (om ca 1 vecka):
 - Varför skriva tester?
 - Vad är TDD? Vad ser ni för för- och nackdelar med TDD?
 - Hur skriver man bra tester?
 
 
 ### Resurser för Test driven development
 Clean code pdf: https://oceanofpdf.com/authors/robert-c-martin/pdf-epub-clean-code-a-handbook-of-agile-software-craftsmanship-download/ 
 - kap 9 handlar om TDD
 
 Boken: https://doc.rust-lang.org/book/ch11-00-testing.html 
 - kap 15 handlar om tester i rust
 
 