@@ -1040,7 +1040,222 @@ const fixtures = [
10401040 funktionPrint(x_2.values.slice(0, 7));
10411041 rl.close()
10421042 ` )
1043- }
1043+ } ,
1044+ {
1045+ name : "reverse range step" ,
1046+ source :
1047+ `\`5..1\` t1t
1048+ print(1)` ,
1049+ expected : dedent ( `
1050+ import { createInterface } from "node:readline/promises";
1051+ import { stdin as input, stdout as output } from "node:process";
1052+ const rl = createInterface({ input, output });
1053+
1054+ function generateRange(start = 5, end = 1, step = 1) {
1055+ if (end < start) step *= -1;
1056+ return {
1057+ start,
1058+ end,
1059+ step
1060+ };
1061+ }
1062+
1063+ function initializeMutableRange(timestepRange = generateRange()) {
1064+ return {
1065+ timestepRange,
1066+ values: [],
1067+ index: -1,
1068+ size: 0
1069+ };
1070+ }
1071+
1072+ function funktionPrint(value) {
1073+ if (Array.isArray(value)) {
1074+ console.log(value.join('\\n'));
1075+ }
1076+ else if (typeof value === "object") {
1077+ console.log(value.values.join('\\n'));
1078+ }
1079+ else {
1080+ console.log(value);
1081+ }
1082+ }
1083+
1084+ function applyFunction(gen, iterations, f) {
1085+ let currentVal = gen.timestepRange.start + gen.timestepRange.step * (gen.index + 1);
1086+ if (gen.size === 0) {
1087+ gen.size++;
1088+ gen.index++;
1089+ const result = f(currentVal);
1090+ gen.values.push(Array.isArray(result) ? result.join(' ') : result);
1091+ currentVal += gen.timestepRange.step;
1092+ }
1093+ if (gen.timestepRange.step > 0) {
1094+ while (currentVal <= gen.timestepRange.end && iterations > 0) {
1095+ gen.size++;
1096+ gen.index++;
1097+ const result = f(currentVal);
1098+ gen.values.push(Array.isArray(result) ? result.join(' ') : result);
1099+ currentVal += gen.timestepRange.step;
1100+ iterations--;
1101+ }
1102+ } else {
1103+ while (currentVal >= gen.timestepRange.end && iterations > 0) {
1104+ gen.size++;
1105+ gen.index++;
1106+ const result = f(currentVal);
1107+ gen.values.push(Array.isArray(result) ? result.join(' ') : result);
1108+ currentVal += gen.timestepRange.step;
1109+ iterations--;
1110+ }
1111+ }
1112+ }
1113+ funktionPrint(1);
1114+ rl.close()
1115+ ` )
1116+ } ,
1117+ {
1118+ name : "equality operators" ,
1119+ source : `print(? 1 == 1 => "yes" : "no")` ,
1120+ expected : dedent ( `
1121+ import { createInterface } from "node:readline/promises";
1122+ import { stdin as input, stdout as output } from "node:process";
1123+ const rl = createInterface({ input, output });
1124+
1125+ function generateRange(start = 1, end = 5, step = 1) {
1126+ if (end < start) step *= -1;
1127+ return {
1128+ start,
1129+ end,
1130+ step
1131+ };
1132+ }
1133+
1134+ function initializeMutableRange(timestepRange = generateRange()) {
1135+ return {
1136+ timestepRange,
1137+ values: [],
1138+ index: -1,
1139+ size: 0
1140+ };
1141+ }
1142+
1143+ function funktionPrint(value) {
1144+ if (Array.isArray(value)) {
1145+ console.log(value.join('\\n'));
1146+ }
1147+ else if (typeof value === "object") {
1148+ console.log(value.values.join('\\n'));
1149+ }
1150+ else {
1151+ console.log(value);
1152+ }
1153+ }
1154+
1155+ function applyFunction(gen, iterations, f) {
1156+ let currentVal = gen.timestepRange.start + gen.timestepRange.step * (gen.index + 1);
1157+ if (gen.size === 0) {
1158+ gen.size++;
1159+ gen.index++;
1160+ const result = f(currentVal);
1161+ gen.values.push(Array.isArray(result) ? result.join(' ') : result);
1162+ currentVal += gen.timestepRange.step;
1163+ }
1164+ if (gen.timestepRange.step > 0) {
1165+ while (currentVal <= gen.timestepRange.end && iterations > 0) {
1166+ gen.size++;
1167+ gen.index++;
1168+ const result = f(currentVal);
1169+ gen.values.push(Array.isArray(result) ? result.join(' ') : result);
1170+ currentVal += gen.timestepRange.step;
1171+ iterations--;
1172+ }
1173+ } else {
1174+ while (currentVal >= gen.timestepRange.end && iterations > 0) {
1175+ gen.size++;
1176+ gen.index++;
1177+ const result = f(currentVal);
1178+ gen.values.push(Array.isArray(result) ? result.join(' ') : result);
1179+ currentVal += gen.timestepRange.step;
1180+ iterations--;
1181+ }
1182+ }
1183+ }
1184+ funktionPrint(( 1 === 1 ? "yes" : "no"));
1185+ rl.close()
1186+ ` )
1187+ } ,
1188+ {
1189+ name : "inequality operator" ,
1190+ source : `print(? 1 != 2 => "yes" : "no")` ,
1191+ expected : dedent ( `
1192+ import { createInterface } from "node:readline/promises";
1193+ import { stdin as input, stdout as output } from "node:process";
1194+ const rl = createInterface({ input, output });
1195+
1196+ function generateRange(start = 1, end = 5, step = 1) {
1197+ if (end < start) step *= -1;
1198+ return {
1199+ start,
1200+ end,
1201+ step
1202+ };
1203+ }
1204+
1205+ function initializeMutableRange(timestepRange = generateRange()) {
1206+ return {
1207+ timestepRange,
1208+ values: [],
1209+ index: -1,
1210+ size: 0
1211+ };
1212+ }
1213+
1214+ function funktionPrint(value) {
1215+ if (Array.isArray(value)) {
1216+ console.log(value.join('\\n'));
1217+ }
1218+ else if (typeof value === "object") {
1219+ console.log(value.values.join('\\n'));
1220+ }
1221+ else {
1222+ console.log(value);
1223+ }
1224+ }
1225+
1226+ function applyFunction(gen, iterations, f) {
1227+ let currentVal = gen.timestepRange.start + gen.timestepRange.step * (gen.index + 1);
1228+ if (gen.size === 0) {
1229+ gen.size++;
1230+ gen.index++;
1231+ const result = f(currentVal);
1232+ gen.values.push(Array.isArray(result) ? result.join(' ') : result);
1233+ currentVal += gen.timestepRange.step;
1234+ }
1235+ if (gen.timestepRange.step > 0) {
1236+ while (currentVal <= gen.timestepRange.end && iterations > 0) {
1237+ gen.size++;
1238+ gen.index++;
1239+ const result = f(currentVal);
1240+ gen.values.push(Array.isArray(result) ? result.join(' ') : result);
1241+ currentVal += gen.timestepRange.step;
1242+ iterations--;
1243+ }
1244+ } else {
1245+ while (currentVal >= gen.timestepRange.end && iterations > 0) {
1246+ gen.size++;
1247+ gen.index++;
1248+ const result = f(currentVal);
1249+ gen.values.push(Array.isArray(result) ? result.join(' ') : result);
1250+ currentVal += gen.timestepRange.step;
1251+ iterations--;
1252+ }
1253+ }
1254+ }
1255+ funktionPrint(( 1 !== 2 ? "yes" : "no"));
1256+ rl.close()
1257+ ` )
1258+ } ,
10441259] ;
10451260
10461261describe ( "The code generator" , ( ) => {
0 commit comments