unit TestUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, user_types, class_values, class_param, class_model, class_point,
  ADVPicture, class_source;

type
  TTestForm = class(TForm)
    ResultMemo: TMemo;
    TestGoBtn: TButton;
    pict: TAdvPicture;
    procedure FormCreate(Sender: TObject);
    procedure TestGoBtnClick(Sender: TObject);
    procedure TestRDValuesClass();
    procedure TestRDModelParamClass;
    procedure TestRDPointClass;
    function print_array_to_string(local_array:TRDValues_array):string;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  TestForm: TTestForm;

implementation

uses IzmUnit;

{$R *.dfm}

procedure TTestForm.FormCreate(Sender: TObject);
begin
  ResultMemo.Lines.Clear;
end;

function TTestForm.print_array_to_string(local_array: TRDValues_array):string;
var
  I: Integer;
  str:string;
begin
  for I := 1 to length(local_array) do
  begin
    str:=str+'  '+floattostr(local_Array[i]);
  end;
  result:=str;
end;

procedure TTestForm.TestRDValuesClass();
var TestArray: TRDValues_array;
    AValues: TRDValues;
    position: integer;
begin
  AValues:=TRDValues.Create;
    //Задание массива
    TestArray[ 1 ] := -6;
    TestArray[ 2 ] := 5;
    TestArray[ 3 ] := -6.3;
    TestArray[ 4 ] := 7;
    TestArray[ 5 ] := 0;

  AValues.Set_all_values(TestArray);

with ResultMemo.Lines do
    begin
      Add( 'Исходный массив' + print_array_to_string(TestArray) );

      Add( '   1.1 Функция Get_Avg:' );
      Add( '       Результат: '+floattostr(AValues.Get_avr));

      Add( '   1.2 Функция Set_one_value:' );
        AValues.Set_one_value( 54567,1 );
          Add( '       Результат: '+print_array_to_string( AValues.Get_values ) );
        AValues.Set_one_value( 54567,2 );
          Add( '       Результат: '+print_array_to_string( AValues.Get_values) );
        AValues.Set_one_value( 54567,3 );
          Add( '        Результат: '+print_array_to_string( AValues.Get_values) );
        AValues.Set_one_value( 54567,4 );
          Add( '        Результат: '+print_array_to_string( AValues.Get_values) );
        AValues.Set_one_value( 54567,5 );
      Add( '        Результат: '+print_array_to_string( AValues.Get_values) );

      Add( '   1.3 Функция Set_all_values:' );
        AValues.Set_all_values( TestArray );
      Add( '        Результат: '+print_array_to_string( AValues.Get_values ) );

      Add( '   1.4 Функция Sort_asc:' );
      Add( '        Результат: '+print_array_to_string( AValues.Sort_asc() ) );
      Add( '        Результат: '+print_array_to_string( AValues.Get_values ) );

      Add( '   1.5 Функция Sort_desc:' );
      Add( '        Результат: '+print_array_to_string( AValues.Sort_desc() ) );
      Add( '        Результат: '+print_array_to_string( AValues.Get_values ) );

      Add( '   1.6 Функция Get_max:' );
      Add( '        Результат: '+floattostr( AValues.Get_max( position ) ) );
      Add( '        Результат: '+inttostr( position ) );
      Add( '        Результат: '+print_array_to_string( AValues.Get_values ) );


      Add( '   1.7 Функция Get_min:' );
      Add( '        Результат: '+floattostr( AValues.Get_min( position ) ) );
      Add( '        Результат: '+inttostr( position ) );
      Add( '        Результат: '+print_array_to_string( AValues.Get_values) );


    end;
AValues.Free;

end;

procedure TTestForm.TestRDModelParamClass;
var //RDParam_List:TRDparam_List;
    RDParam: TRDParam;
    tmp:integer;
    str:TRDValues_array;
begin
  with ResultMemo.Lines do
    begin
      RDParam := TRDParam.Create('param_name', 'param_desc');


      tmp := RDParam.models.Add( TRDModel.Create('model_name', 'model_desc') );
      (RDParam.models.Items[tmp] as TRDModel).sources.src_program.Set_one_value(6,3);
      str:=(RDParam.models.Find_by_name('model_name') as TRDModel).sources.src_program.Get_values;
      (RDParam.models.Find_by_name('model_name') as TRDModel).Destroy;


      RDParam.Free;

      add('       Номер добавленной модели: '+inttostr(tmp));
      add ('      Массивчик: '+print_array_to_string(str));
    end;
end;

procedure TTestForm.TestRDPointClass;
var RDPoint: TRDPoint;
    arr: TValue_UI;
  I: integer;
begin
  with ResultMemo.Lines do
    begin
      Add( '    4.1 Добавление точки ' );
      try
        //RDPoint := TRDPoint.Create('', ''); //тестирование assert
        RDPoint := TRDPoint.Create( 'PL1_r', 'descpr' );
      finally
        Add( '        Успешно ' );
      end;

      Add( '    4.2 Получение имени и описания параметра' );
      try
        Add(RDPoint.Get_name+'     '+RDPoint.Get_description);
      finally
        Add( '        Успешно ' );
      end;

      Add( '    4.3 Получение изображения точки' );
      try
        with pict do
        begin
          Picture := RDPoint.image.get_image;
          RDPoint.image.Destroy_internal_image;
        end;
      finally
        Add( '        Успешно');
      end;

      Add( '    4.4 Работа с током и напряжением' );
      try
        randomize();
        for I := 1 to length( arr ) do
        begin
          arr[ i ] := random( 2400 );
        end;
        RDPoint.U_Values.Set_values( arr );
        arr := RDPoint.U_Values.Get_values;

      finally
        Add( '        Успешно');
      end;

      RDPoint.Params.Add( TRDParam.Create('R','Сопротивление'));
      RDPoint.Params.Find_by_name('R').models.Add(TRDModel.Create('model','desc'));
      RDPoint.Params.Find_by_name('R').models.Find_by_name('model').sources.src_program.Get_avr;



    end;


end;

procedure TTestForm.TestGoBtnClick(Sender: TObject);
begin
   with ResultMemo.Lines do
    begin
      Add( 'Тестиование начато.' );
      Add( '1. Блок №1. Тестирование класса @class_values@' );
       Add( '     Пропущено' );
       //TestRDValuesClass;
      Add( '' );

      Add( '2. Блок №2. Тестирование класса @class_source@' );
      Add( '  Нечего там тестировать! :)' );

      Add( '3. Блок №3. Тестирование класса @class_model, class_param@' );
        Add( '     Пропущено' );
        //TestRDModelParamClass;
      Add( '4. Блок №4. Тестирование класса @class_point@' );
        Add( '     Пропущено' );
        //TestRDPointClass;
    end;


    IzmForm.Show;
end;

end.
