[an error occurred while processing this directive]
Наборы тестов получены с помощью генератора тестов и проверены на синтаксическую и семантическую корректность компилятором из пакета MinGW.
Набор тестов состоит из программ на языке C. Тело каждой программы состоит из одного оператора цикла (цикл for). Тело оператора цикла представлено последовательностью из множества операторов присвоения, условных операторов, операторов цикла с предусловием, операторов выбора и операторов цикла с параметром. Последовательность операторов может быть разбита, по крайней мере, на два блока, удовлетворяющим всем следующим условиям:
Набор тестов полон, если в нем встречаются все возможные четверки, которые можно составить из оператора присвоения, условного оператора (с одной и двумя ветвями), оператора цикла с предусловием, оператора выбора и оператора цикла с параметром. Мощность набора тестов: 64 = 1296.
Конфигурационный файл, на основе которого генерируются тесты, имеет следующий вид:
<?xml version="1.0" encoding="UTF-8"?> <program class="loop_distribution"> <params blockDependency="desc" /> <body> <statFor m="4" statAssign="1" statIf="1" StatIfThenElse="1" StatWhile="1" StatSwitch="1" StatFor="1"> <block m="2"> <statIf statAssign="1" statIf="1" StatIfThenElse="1" StatWhile="1" StatSwitch="1" StatFor="1" StatGoTo="1" /> <StatIfThenElse statAssign="1" statIf="1" StatIfThenElse="1" StatWhile="1" StatSwitch="1" StatFor="1" StatGoTo="1" /> <StatWhile statAssign="1" statIf="1" StatBreak="1" StatContinue="1" /> <StatSwitch statAssign="1" statIf="1" StatIfThenElse="1" StatWhile="1" StatSwitch="1" StatFor="1" StatGoTo="1" /> <StatFor statAssign="1" statIf="1" StatIfThenElse="1" StatWhile="1" StatSwitch="1" StatFor="1" StatGoTo="1" /> </block> <block m="2"> <statIf statAssign="1" statIf="1" StatIfThenElse="1" StatWhile="1" StatSwitch="1" StatFor="1" StatGoTo="1" /> <StatIfThenElse statAssign="1" statIf="1" StatIfThenElse="1" StatWhile="1" StatSwitch="1" StatFor="1" StatGoTo="1" /> <StatWhile statAssign="1" statIf="1" StatBreak="1" StatContinue="1" /> <StatSwitch statAssign="1" statIf="1" StatIfThenElse="1" StatWhile="1" StatSwitch="1" StatFor="1" StatGoTo="1" /> <StatFor statAssign="1" statIf="1" StatIfThenElse="1" StatWhile="1" StatSwitch="1" StatFor="1" StatGoTo="1" /> </block> </statFor> </body> </program>
С помощью конфигурационного файла задается общая структура тестовых программ и накладываются ограничения на информационные зависимости. Тестовая программа обязательно должна содержать оператор цикла с параметром FOR (элемент <statFor> непосредственно вложен в элемент <body>). Имена операторов, которые могут быть непосредственно вложены в тело цикла, в конфигурационном файле объявлены как атрибуты элемента <statFor>. Атрибут m определяет, что тело оператора цикла содержит одну из возможных четверок операторов, объявленных в атрибутах элемента <statFor>. Тело оператора цикла с параметром разделено на 2 блока (элементы <block>, вложенные в элемент <statFor>). Атрибуты m элементов <block> определяют, что в каждом блоке содержится по 2 оператора. Атрибут blockDependency элемента <params> определяет, что между любыми двумя блоками в
программе могут встречаться информационные зависимости, направленные только сверху вниз.
Скачать набор тестов для преобразования «LoopDistribution»
Набор тестов состоит из программ на языке C. Тело каждой программы состоит из пяти подряд идущих операторов цикла (цикл FOR). Каждое тело оператора цикла состоит из последовательности операторов присвоения (от 10 до 50 операторов в последовательности).
Последовательности операторов присвоения в теле цикла удовлетворяются всем следующим условиям:
Выделим набор операций M:
№ | Операция | Значение |
1 | * | Умножение |
2 | / | Деление и целочисленное деление нацело |
3 | % | Деление по модулю и остаток от деления |
4 | || | Логическое ИЛИ |
5 | && | Логическое И |
6 | ^ | Поразрядное исключающее ИЛИ |
7 | << | Поразрядный сдвиг влево |
8 | >> | Поразрядный сдвиг вправо |
Конфигурационный файл, на основе которого генерируются тесты, имеет следующий вид:
<?xml version="1.0" encoding="UTF-8"?> <program class="C2HDL"> <params blockDependency="desc" /> <body> <statFor m="5"> <block m="10..50"> <statAssign m="3"> <ops><![CDATA[* / % || && ^ << >>]]></ops> </statAssign> </block> </statFor> </body> </program>
Тело программы состоит из пяти подряд идущих операторов цикла FOR (элемент <statFor> с атрибутом m = 5). Тело цикла составляет от 10 до 50 операторов присвоения. Каждый оператор присвоения считается отдельным блоком. Для оператора присвоения выделено 8 операций (элемент <ops>). Атрибут m элемента <statAssign> указывает, что должен быть произведен перебор всех троек выделенных операций. Наряду с выделенными операциями в правой части оператора присвоения могут так же встречаться операции «+» и «–». Атрибут blockDependency элемента <params> определяет, что между любыми двумя блоками в программе могут встречаться информационные зависимости, направленные только сверху вниз.
Скачать набор тестов для конвертера C2HDL