pascalabcnet/TestSuite/CompilationSamples/Tasks1Begin.pas
AlexanderZemlyak ba4d274058
Async await merge (#3177)
* s.ToLines
RenameDirectory

* Исправление ToLines

* Убрал из грамматики узлы await - случайно оставались

* Sync `.ToLines` with `System.IO.StringReader` (#3154)

* 3.9.0.3494

* add tests

* #3152

* #3152

* Don't skip PCU errors in `CompileAllUnits`

* fix #3155

* Create the array types outside of any unit/scope

* Add `use` test

* RobotField - try в блоке создания

* Исправлена Range(a, b, step: real)

LightPT - CheckOutput может принимать параметры типа последователльность - они будут вытягиваться в одну последовательность
  Для этого исправлен FlattenElement
  FlattenOutput применяется автоматически - его теперь не надо вызывать явно
TaskLoops поправлен и упрощен в соответствии с CheckOutput

* Поправлен LightPT

Упрощены TasksArr.pas TasksMatr.pas TasksStr.pas

* fix `GetReferenceFileName` dll copy (#3173)

* Исправление зависимостей проектов (#3174)

* Add workflow to build each project separately

* Make `Compiler` depend on `PascalLanguage` and `PascalABCSaushkinParser`  06e595

* Make IDE's depend on `PABCNETC`

It's launched as a separate process from IDE

* Revert pascal language moving to language plugins (#3175)

* Return Parsers folder with standard parsers and move SyntaxTreeConverters back to Core

* Rename PascalLanguage project to PascalABCLanguageInfo

* Fix pascal dll loading

* Поправлены Tasks1Arr.pas Tasks1Begin.pas Tasks1BoolIfCase.pas

* Поправил в трех проектах пути к bin

LightPT - Read...(prompt) - больше комбинаций

Loop_If_2_Sum в Tasks1Loops.pas

* #3172

* 3.9.0.3500
Хороший коммит )

* Remove extra tests

* Fix dependencies in Compiler project

* LightPT - убрал CheckOutputNew
TasksArr.pas, TasksStr.pas - правки

* #3164

* Убрали зависимость компилятора от парсера Паскаля

---------

Co-authored-by: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Co-authored-by: Sun Serega <sunserega2@gmail.com>
Co-authored-by: Ivan Bondarev <ibond84@googlemail.com>
2024-07-05 23:04:23 +03:00

235 lines
7.5 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit Tasks1Begin;
uses LightPT;
var AllTaskNames: array of string;
procedure CheckTaskT(name: string);
begin
ClearOutputListFromSpaces;
case name of
'Var_1': begin
CheckData(InitialOutput := |cInt|);
CheckOutput(3,32);
end;
'Var_2': begin
CheckData(InitialOutput := cInt*2);
CheckOutput(3,4,20,45);
end;
'Var_4': begin
CheckData(Input := Empty);
CheckOutput(25,3.14,100,0.75);
end;
'Var_5': begin
TaskResult := Solved;
end;
'Var_6': begin
CheckData(Input := Empty);
CompareTypeWithOutput(cStr,cStr,cStr,cStr,cInt,cInt);
end;
'Calculations1': begin
CheckData(InitialOutput := |cInt|*3);
CheckOutput(35,65,35+65,35*65);
end;
'Calculations2': begin
CheckData(InitialOutput := |cInt,cInt,cStr,cInt|);
CheckOutput(35,65,cStr,35+65,cStr,35*65); // Это круто - можно перемежать типы и значения!
end;
'Calculations3': begin
CheckData(InitialOutput := |cStr,cInt,cInt,cInt|);
CheckOutput(cStr,3,4,5,cStr,3+4+5);
end;
'Calculations4': begin
CheckData(InitialOutput := |cStr,cInt|);
CheckOutput(cStr,253,cStr,253/10,cStr,253/100);
end;
'Read1': begin
CheckData(InitialInput := |cInt,cInt|);
TestCount := 5;
GenerateTestData := tnum -> begin
var (a,b) := Random2(1,100);
InputList.AddTestData(|a,b|);
end;
CheckOutput(Int(0)+Int(1));
end;
'Read2': begin
FilterOnlyNumbersAndBools;
CheckData(Input := |cRe,cRe|);
var S := Re(0)*Re(1);
var P := 2*(Re(0)+Re(1));
TestCount := 10;
GenerateTests(10, tRe(1,10,digits := 0)*2);
CheckOutputSilent(S,P); // Все сообщения ColoredMessage гасятся
if TaskResult <> Solved then // Это прикольный способ - проверить, что вывел то, но не в том порядке!
CheckOutput(P,S);
end;
'Task1': begin
FilterOnlyNumbersAndBools;
CheckData(Input := |cRe,cRe|);
var S := Re(0)+Re(1);
var P := Re(0)*Re(1);
GenerateTests(10,tRe(1,10,0)*2); // Это когда нет особых случаев
CheckOutputSilent(S,P); // Все сообщения ColoredMessage гасятся
if TaskResult <> Solved then
CheckOutput(P,S);
end;
'Task2': begin
FilterOnlyNumbersAndBools;
CheckData(Input := |cRe|);
var x := Re(0);
TestCount := 10;
GenerateTestData := tnum -> begin // это когда есть особый случай
var a: real;
if tnum = 5 then
a := RandomReal(1,100,digits := 0)
else a := RandomReal(1,10,digits := 0);
InputList.AddTestData(|a|);
end;
CheckOutput(x*x,x*x*x,x*x*x*x);
end;
'Intermediate1': begin
CheckData(Input := Empty);
CheckOutput(27);
end;
'Intermediate2': begin
CheckData(Input := Empty);
CheckOutput(2.5);
end;
'Swap1':
begin
FilterOnlyNumbers;
CheckData(Input := Empty);
CheckOutput(666.666, 555.555);
end;
'Swap2': CheckOutput('Иванов', 'Петров', 'Петров', 'Иванов');
'AssignAdd1':
begin
FilterOnlyNumbers;
CheckData(InitialOutput := |cInt, cInt|);
CheckOutput(Arr(1..9));
end;
'AssignAdd2':
begin
FilterOnlyNumbers;
CheckInitialOutput(cInt, cInt, cInt);
CheckOutput(1, 2, 4, 7, 11, 16, 22, 29, 37, 46);
end;
'AssignMult':
begin
FilterOnlyNumbers;
CheckInitialOutput(cInt, cInt);
CheckOutput(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024);
end;
'AssignMultAddGame':
begin
FilterOnlyNumbers;
CheckData(Input := Empty);
if OutputList.Count <> 1 then
begin
ColoredMessage('Вы должны вывести ровно одно значение');
exit;
end;
TaskResult := TaskStatus.PartialSolution;
if CompareValues(OutputList[0],18) then
exit;
if CompareValues(OutputList[0],33) then
ColoredMessage('Молодец! Теперь получи в переменной a значение 67',MsgColorGray)
else CheckOutput(67);
end;
'AssignMultAddКруги':
begin
FilterOnlyNumbers;
CheckData(Input := Empty);
CheckOutput(38);
end;
'Sqrt1':
begin
FilterOnlyNumbers;
CheckData(Input := Empty);
if OutputList.Count <> 1 then
begin
ColoredMessage('Вы должны вывести ровно одно значение');
exit;
end;
TaskResult := TaskStatus.PartialSolution;
if CompareValues(OutputList[0],Sqrt(2)) then
exit;
if CompareValues(OutputList[0],Sqrt(3)) then
ColoredMessage('Молодец! Теперь получи значение Sqrt(5)',MsgColorGray)
else if CompareValues(OutputList[0],Sqrt(5)) then
ColoredMessage('Молодец! Теперь получи значение Sqrt(7)',MsgColorGray)
else if CompareValues(OutputList[0],Sqrt(7)) then
CheckOutput(Sqrt(7)) // Верно
else CheckOutput(Sqrt(7)) // Неверно
end;
'Abs_1':
begin
FilterOnlyNumbers;
CheckData(Input := Empty);
// Просто поясняющее сообщение. Ничего не проверяется
ColoredMessage('Abs - функция, убирающая знак числа. В математике известна как модуль числа', MsgColorGray);
end;
'Abs_2_AB':
begin
FilterOnlyNumbers;
CheckData(InitialOutput := cInt * 6);
CheckOutput(5,3,2,-1,5,6,7,4,3,9,18,9);
end;
'SwapProc1':
begin
FilterOnlyNumbers;
CheckData(Input := Empty);
CheckOutput(3,1,7,5,1,3,5,7);
end;
'SwapProc2':
begin
FilterOnlyNumbers;
CheckData(Input := Empty);
CheckOutput(1,2,3,4,2,1,3,4,2,3,1,4,2,3,4,1);
end;
'DivMod01':
begin
FilterOnlyNumbers;
CheckData(Input := Empty);
// Просто поясняющее сообщение
ColoredMessage('Перепишите результат в тетрадь', MsgColorGray);
end;
'DivMod02':
begin
FilterOnlyNumbers;
CheckData(InitialOutput := |cInt|*6);
CheckOutputAfterInitial(3,1,5,1,7,1);
//ColoredMessage('Если x - четно, то x mod 2 = 0', MsgColorGray);
end;
'DivMod03':
begin
TaskResult := PartialSolution;
FilterOnlyNumbers;
CheckData(Input := Empty);
if OutputList.Count = 6 then
begin
if CompareValues(OutputList[0],37) then // Здесь используется CompareValues, а не CompareWithOutput т к логика сложнее
ColoredMessage('Измените значение a на 123', MsgColorGray)
else if CompareValues(OutputList[0],123) then
ColoredMessage('Верно. Проверьте еще значение a = 12345', MsgColorGray)
else if CompareValues(OutputList[0],12345) then
begin
ColoredMessage('Верно!', MsgColorGreen);
TaskResult := Solved;
end;
end;
end;
end;
end;
initialization
CheckTask := CheckTaskT;
AllTaskNames := Arr('Var_1','Var_2','Var_4','Var_5','Var_6',
'Calculations1','Calculations2','Calculations3','Calculations4',
'Read1','Read2','Task1','Task2','Intermediate1','Intermediate2','Swap1','Swap2',
'AssignAdd1','AssignAdd2','AssignMult','AssignMultAddGame','AssignMultAddКруги',
'Sqrt1','Abs_1','Abs_2_AB','SwapProc1','SwapProc2','DivMod01','DivMod02','DivMod03' );
finalization
end.