Files
exercism-workspace/role-playing-game/test/role_playing_game_test.gleam
Alexander Heldt 1de1e2fcb6 role-playing-game
2025-11-02 21:22:44 +01:00

71 lines
2.2 KiB
Gleam

import exercism/should
import exercism/test_runner
import gleam/option.{None, Some}
import role_playing_game.{Player}
pub fn main() {
test_runner.main()
}
pub fn introduce_someone_with_their_name_test() {
Player(name: Some("Gandalf"), level: 1, health: 42, mana: None)
|> role_playing_game.introduce
|> should.equal("Gandalf")
}
pub fn introducing_an_unidentified_player_should_return_mighty_magician_test() {
Player(name: None, level: 1, health: 42, mana: None)
|> role_playing_game.introduce
|> should.equal("Mighty Magician")
}
pub fn revive_a_player_that_is_alive_should_return_none_test() {
Player(name: None, level: 12, health: 42, mana: Some(7))
|> role_playing_game.revive
|> should.equal(None)
}
pub fn reviving_a_low_level_player_resets_its_health_to_100_test() {
Player(name: None, level: 3, health: 0, mana: None)
|> role_playing_game.revive
|> should.equal(Some(Player(name: None, level: 3, health: 100, mana: None)))
}
pub fn reviving_a_high_level_player_resets_both_its_health_and_mana_test() {
Player(name: None, level: 10, health: 0, mana: Some(14))
|> role_playing_game.revive
|> should.equal(
Some(Player(name: None, level: 10, health: 100, mana: Some(100))),
)
}
pub fn cast_spell_causes_damage_of_double_the_mana_test() {
Player(name: None, level: 10, health: 69, mana: Some(20))
|> role_playing_game.cast_spell(9)
|> should.equal(#(
Player(name: None, level: 10, health: 69, mana: Some(11)),
18,
))
}
pub fn casting_a_spell_with_insufficient_mana_does_none_test() {
Player(name: None, level: 10, health: 69, mana: Some(20))
|> role_playing_game.cast_spell(39)
|> should.equal(#(
Player(name: None, level: 10, health: 69, mana: Some(20)),
0,
))
}
pub fn casting_a_spell_without_a_mana_pool_decreases_the_players_health_test() {
Player(name: None, level: 5, health: 58, mana: None)
|> role_playing_game.cast_spell(7)
|> should.equal(#(Player(name: None, level: 5, health: 51, mana: None), 0))
}
pub fn a_players_health_cannot_go_below_0_test() {
Player(name: None, level: 5, health: 6, mana: None)
|> role_playing_game.cast_spell(12)
|> should.equal(#(Player(name: None, level: 5, health: 0, mana: None), 0))
}