{
  Solutions to the Advent Of Code.
  Copyright (C) 2023  Stefan Müller

  This program is free software: you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
  Foundation, either version 3 of the License, or (at your option) any later
  version.

  This program is distributed in the hope that it will be useful, but WITHOUT
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

  You should have received a copy of the GNU General Public License along with
  this program.  If not, see <http://www.gnu.org/licenses/>.
}

unit UTrebuchetTestCases;

{$mode ObjFPC}{$H+}

interface

uses
  Classes, SysUtils, fpcunit, testregistry, USolver, UBaseTestCases, UTrebuchet;

type

  { TTrebuchetExampleTestCase }

  TTrebuchetExampleTestCase = class(TExampleEngineBaseTest)
  protected
    function CreateSolver: ISolver; override;
  published
    procedure TestPart1;
  end;

  { TExample2Trebuchet }

  TExample2Trebuchet = class(TTrebuchet)
    function GetDataFileName: string; override;
  end;

  { TTrebuchetExample2TestCase }

  TTrebuchetExample2TestCase = class(TExampleEngineBaseTest)
  protected
    function CreateSolver: ISolver; override;
  published
    procedure TestPart2;
  end;

implementation

{ TTrebuchetExampleTestCase }

function TTrebuchetExampleTestCase.CreateSolver: ISolver;
begin
  Result := TTrebuchet.Create;
end;

procedure TTrebuchetExampleTestCase.TestPart1;
begin
  AssertEquals(142, FSolver.GetResultPart1);
end;

{ TExample2Trebuchet }

function TExample2Trebuchet.GetDataFileName: string;
begin
  Result := 'trebuchet2.txt';
end;

{ TTrebuchetExample2TestCase }

function TTrebuchetExample2TestCase.CreateSolver: ISolver;
begin
  Result := TExample2Trebuchet.Create;
end;

procedure TTrebuchetExample2TestCase.TestPart2;
begin
  AssertEquals(281, FSolver.GetResultPart2);
end;

initialization

  RegisterTest('TTrebuchet', TTrebuchetExampleTestCase);
  RegisterTest('TTrebuchet', TTrebuchetExample2TestCase);
end.