if !System.get_env("EXERCISM_TEST_EXAMPLES") do Code.load_file("robot_simulator.exs", __DIR__) end ExUnit.start() ExUnit.configure(exclude: :pending, trace: true) defmodule RobotSimulatorTest do use ExUnit.Case test "create has sensible defaults" do robot = RobotSimulator.create() assert RobotSimulator.position(robot) == {0, 0} assert RobotSimulator.direction(robot) == :north end @tag :pending test "create works with valid arguments" do robot = RobotSimulator.create(:north, {0, 0}) assert RobotSimulator.position(robot) == {0, 0} assert RobotSimulator.direction(robot) == :north robot = RobotSimulator.create(:south, {-10, 0}) assert RobotSimulator.position(robot) == {-10, 0} assert RobotSimulator.direction(robot) == :south robot = RobotSimulator.create(:east, {0, 10}) assert RobotSimulator.position(robot) == {0, 10} assert RobotSimulator.direction(robot) == :east robot = RobotSimulator.create(:west, {100, -100}) assert RobotSimulator.position(robot) == {100, -100} assert RobotSimulator.direction(robot) == :west end @tag :pending test "create errors if invalid direction given" do position = {0, 0} invalid_direction = {:error, "invalid direction"} assert RobotSimulator.create(:invalid, position) == invalid_direction assert RobotSimulator.create(0, position) == invalid_direction assert RobotSimulator.create("east", position) == invalid_direction end @tag :pending test "create errors if invalid position given" do direction = :north invalid_position = {:error, "invalid position"} assert RobotSimulator.create(direction, {0, 0, 0}) == invalid_position assert RobotSimulator.create(direction, {0, :invalid}) == invalid_position assert RobotSimulator.create(direction, {"0", 0}) == invalid_position assert RobotSimulator.create(direction, "invalid") == invalid_position assert RobotSimulator.create(direction, 0) == invalid_position assert RobotSimulator.create(direction, [0, 0]) == invalid_position assert RobotSimulator.create(direction, nil) == invalid_position end @tag :pending test "simulate robots" do robot1 = RobotSimulator.create(:north, {0, 0}) |> RobotSimulator.simulate("LAAARALA") assert RobotSimulator.direction(robot1) == :west assert RobotSimulator.position(robot1) == {-4, 1} robot2 = RobotSimulator.create(:east, {2, -7}) |> RobotSimulator.simulate("RRAAAAALA") assert RobotSimulator.direction(robot2) == :south assert RobotSimulator.position(robot2) == {-3, -8} robot3 = RobotSimulator.create(:south, {8, 4}) |> RobotSimulator.simulate("LAAARRRALLLL") assert RobotSimulator.direction(robot3) == :north assert RobotSimulator.position(robot3) == {11, 5} end @tag :pending test "simulate errors on invalid instructions" do assert RobotSimulator.create() |> RobotSimulator.simulate("UUDDLRLRBASTART") == {:error, "invalid instruction"} end end