diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 89598e5f0..1bdf132e6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -164,12 +164,13 @@ The implementation that we have right now is being refactored to produce FunC AS One can find the end-to-end codegen test spec files in the [src/test/e2e-emulated](./src/test/e2e-emulated/) folder. The test contracts are located in [src/test/e2e-emulated/contracts](./src/test/e2e-emulated/contracts) subfolder. Many of those spec files test various language features in relative isolation. An important spec file that tests argument passing semantics for functions and assignment semantics for variables is here: [src/test/e2e-emulated/semantics.spec.ts](./src/test/e2e-emulated/semantics.spec.ts). -Note: If you add an end-to-end test contract, you also need to include it into [tact.config.json](./tact.config.json) and run `yarn gen` to compile it and create TypeScript wrappers. +Note: If you add an end-to-end test contract, you also need to include it into [tact.config.json](src/test/tact.config.json) and run `yarn gen` to compile it and create TypeScript wrappers. `yarn gen` also re-compiles test contracts, so it's important to run it when code generation is changed. Some other codegen tests are as follows: +- [src/test/benchmarks](./src/test/benchmarks): check gas consumption; - [src/test/exit-codes](./src/test/exit-codes): test that certain actions produce the expected exit codes; - [src/test/codegen](./src/test/codegen/): test that these contracts compile just fine without running any dynamic tests: bug fixes for FunC code generation often add tests into this folder. diff --git a/scripts/prepare.ts b/examples/contracts.build.ts similarity index 74% rename from scripts/prepare.ts rename to examples/contracts.build.ts index f421d02da..cbcbbf31c 100644 --- a/scripts/prepare.ts +++ b/examples/contracts.build.ts @@ -2,12 +2,15 @@ import fs from "fs"; import { run } from "../src/node"; import path from "path"; import { glob } from "glob"; -import { verify } from "../src/verify"; +import { verify } from "./verify"; import { Logger } from "../src/context/logger"; import { __DANGER__disableVersionNumber } from "../src/pipeline/version"; +const configPath = path.join(__dirname, "tact.config.json"); +const packagesPath = path.resolve(__dirname, "output", "*.pkg"); + // Read cases -void (async () => { +const main = async () => { // Disable version number in packages __DANGER__disableVersionNumber(); @@ -16,18 +19,14 @@ void (async () => { try { // Compile projects const compileResult = await run({ - configPath: path.join(__dirname, "..", "tact.config.json"), + configPath, }); if (!compileResult.ok) { throw new Error("Tact projects compilation failed"); } // Verify projects - for (const pkgPath of glob.sync( - path.normalize( - path.resolve(__dirname, "..", "examples", "output", "*.pkg"), - ), - )) { + for (const pkgPath of glob.sync(path.normalize(packagesPath))) { const res = await verify({ pkg: fs.readFileSync(pkgPath, "utf-8"), }); @@ -39,4 +38,6 @@ void (async () => { logger.error(error as Error); process.exit(1); } -})(); +}; + +void main(); diff --git a/examples/tact.config.json b/examples/tact.config.json new file mode 100644 index 000000000..0be8c8de0 --- /dev/null +++ b/examples/tact.config.json @@ -0,0 +1,83 @@ +{ + "$schema": "../src/config/configSchema.json", + "projects": [ + { + "name": "echo", + "path": "./echo.tact", + "output": "./output" + }, + { + "name": "inheritance", + "path": "./inheritance.tact", + "output": "./output" + }, + { + "name": "large", + "path": "./large.tact", + "output": "./output" + }, + { + "name": "native", + "path": "./native.tact", + "output": "./output" + }, + { + "name": "maps", + "path": "./maps.tact", + "output": "./output" + }, + { + "name": "payouts", + "path": "./payouts.tact", + "output": "./output" + }, + { + "name": "external", + "path": "./external.tact", + "output": "./output", + "options": { + "external": true + } + }, + { + "name": "wallet", + "path": "./wallet.tact", + "output": "./output" + }, + { + "name": "wallet-opt", + "path": "./wallet-opt.tact", + "output": "./output", + "options": { + "experimental": { + "inline": true + } + } + }, + { + "name": "treasure", + "path": "./treasure.tact", + "output": "./output" + }, + { + "name": "multisig", + "path": "./multisig.tact", + "output": "./output" + }, + { + "name": "multisig-3", + "path": "./multisig-3.tact", + "output": "./output" + }, + { + "name": "increment", + "path": "./increment.tact", + "output": "./output" + }, + { + "name": "rugpull", + "path": "./rugpull.tact", + "output": "./output" + } + ] +} diff --git a/src/verify.ts b/examples/verify.ts similarity index 90% rename from src/verify.ts rename to examples/verify.ts index 2832b7a2d..3efad28c7 100644 --- a/src/verify.ts +++ b/examples/verify.ts @@ -1,10 +1,10 @@ import normalize from "path-normalize"; import { Cell } from "@ton/core"; -import { Config, Options } from "./config/parseConfig"; -import { ILogger, Logger } from "./context/logger"; -import { PackageFileFormat, run } from "./"; -import { fileFormat } from "./packaging/fileFormat"; -import { getCompilerVersion } from "./pipeline/version"; +import { Config, Options } from "../src/config/parseConfig"; +import { ILogger, Logger } from "../src/context/logger"; +import { PackageFileFormat, run } from "../src"; +import { fileFormat } from "../src/packaging/fileFormat"; +import { getCompilerVersion } from "../src/pipeline/version"; export type VerifyResult = | { diff --git a/knip.json b/knip.json index cec03815f..627647469 100644 --- a/knip.json +++ b/knip.json @@ -4,6 +4,7 @@ "project": ["src/**/*.ts", "bin/tact.js", "bin/unboc.js"], "ignore": [ "src/ast/ast.ts", + "src/config/parseConfig.ts", "src/prettyPrinter.ts", "src/error/display-to-json.ts", "src/grammar/src-info.ts", diff --git a/package.json b/package.json index 57da158c1..8edad5e45 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,9 @@ "gen:grammar:new": "pgen src/grammar/next/grammar.gg -o src/grammar/next/grammar.ts", "gen:grammar": "yarn gen:grammar:old && yarn gen:grammar:new", "gen:pack": "ts-node ./scripts/pack.ts", - "gen:compiler": "ts-node ./scripts/prepare.ts", - "gen": "yarn gen:grammar && yarn gen:pack && yarn gen:compiler", + "gen:contracts:examples": "ts-node examples/contracts.build.ts", + "gen:contracts:test": "ts-node src/test/contracts.build.ts", + "gen": "yarn gen:grammar && yarn gen:pack && yarn gen:contracts:examples && yarn gen:contracts:test", "clean": "rm -fr dist", "cleanall": "rm -fr dist node_modules", "build": "tsc && node --no-warnings=ExperimentalWarning -r ts-node/register ./scripts/copy-files", @@ -24,7 +25,8 @@ "release": "yarn clean && yarn build && yarn coverage && yarn release-it --npm.yarn1", "type": "tsc --noEmit", "lint": "yarn eslint .", - "lint:schema": "ajv validate -s src/config/configSchema.json -d tact.config.json", + "lint:one-schema": "ajv validate -s src/config/configSchema.json -d", + "lint:schema": "yarn lint:one-schema src/test/tact.config.json && yarn lint:one-schema examples/tact.config.json", "fmt": "yarn prettier -l -w .", "fmt:check": "yarn prettier --check .", "spell": "yarn cspell --no-progress \"**\"", @@ -41,7 +43,8 @@ "bin/**/*", "stdlib/**/*", "!**/test", - "!/docs" + "!/docs", + "!**/*.build.ts" ], "main": "./dist/index.js", "bin": { diff --git a/src/index.ts b/src/index.ts index da6e97f12..5727622e6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -31,6 +31,5 @@ export { VirtualFileSystem } from "./vfs/VirtualFileSystem"; export { createVirtualFileSystem } from "./vfs/createVirtualFileSystem"; export * from "./browser"; -export * from "./verify"; export * from "./context/logger"; export * from "./error/errors"; diff --git a/src/benchmarks/benchmarks.spec.ts b/src/test/benchmarks/benchmarks.spec.ts similarity index 100% rename from src/benchmarks/benchmarks.spec.ts rename to src/test/benchmarks/benchmarks.spec.ts diff --git a/src/benchmarks/contracts/functions.tact b/src/test/benchmarks/contracts/functions.tact similarity index 100% rename from src/benchmarks/contracts/functions.tact rename to src/test/benchmarks/contracts/functions.tact diff --git a/src/test/contracts.build.ts b/src/test/contracts.build.ts new file mode 100644 index 000000000..6b56904a9 --- /dev/null +++ b/src/test/contracts.build.ts @@ -0,0 +1,27 @@ +import { run } from "../node"; +import path from "path"; +import { Logger } from "../context/logger"; +import { __DANGER__disableVersionNumber } from "../pipeline/version"; + +const configPath = path.join(__dirname, "tact.config.json"); + +const main = async () => { + // Disable version number in packages + __DANGER__disableVersionNumber(); + + const logger = new Logger(); + + try { + const compileResult = await run({ + configPath, + }); + if (!compileResult.ok) { + throw new Error("Tact projects compilation failed"); + } + } catch (error) { + logger.error(error as Error); + process.exit(1); + } +}; + +void main(); diff --git a/src/test/tact.config.json b/src/test/tact.config.json new file mode 100644 index 000000000..e8d6cd512 --- /dev/null +++ b/src/test/tact.config.json @@ -0,0 +1,368 @@ +{ + "$schema": "../config/configSchema.json", + "projects": [ + { + "name": "maps1", + "path": "./e2e-emulated/contracts/maps1.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "maps2", + "path": "./e2e-emulated/contracts/maps2.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "map-traverse", + "path": "./e2e-emulated/contracts/map-traverse.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "map-comparison", + "path": "./e2e-emulated/contracts/map-comparison.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "mutating-methods", + "path": "./e2e-emulated/contracts/mutating-methods.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "non-mutating-methods", + "path": "./e2e-emulated/contracts/non-mutating-methods.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "underscore-variable", + "path": "./e2e-emulated/contracts/underscore-variable.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "optionals", + "path": "./e2e-emulated/contracts/optionals.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "sample-jetton", + "path": "./e2e-emulated/contracts/sample-jetton.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "serialization", + "path": "./e2e-emulated/contracts/serialization.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "serialization-2", + "path": "./e2e-emulated/contracts/serialization-2.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "serialization-3", + "path": "./e2e-emulated/contracts/serialization-3.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "strings", + "path": "./e2e-emulated/contracts/strings.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "constants", + "path": "./e2e-emulated/contracts/constants.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "math", + "path": "./e2e-emulated/contracts/math.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "dns", + "path": "./e2e-emulated/contracts/dns.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "integer-literals", + "path": "./e2e-emulated/contracts/integer-literals.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "random", + "path": "./e2e-emulated/contracts/random.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "ordering", + "path": "./e2e-emulated/contracts/ordering.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "deep", + "path": "./e2e-emulated/contracts/deep-sequence.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "bounced-routing", + "path": "./e2e-emulated/contracts/bounced-routing.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "external-fallbacks", + "path": "./e2e-emulated/contracts/external-fallbacks.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "external": true + } + }, + { + "name": "debug", + "path": "./e2e-emulated/contracts/debug.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "send", + "path": "./e2e-emulated/contracts/send.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "intrinsics", + "path": "./e2e-emulated/contracts/intrinsics.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "masterchain", + "path": "./e2e-emulated/contracts/masterchain.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "try-catch", + "path": "./e2e-emulated/contracts/try-catch.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "address", + "path": "./e2e-emulated/contracts/address.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "ternary", + "path": "./e2e-emulated/contracts/ternary.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "implicit-init", + "path": "./e2e-emulated/contracts/implicit-init.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "recursion", + "path": "./e2e-emulated/contracts/recursion.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "local-type-inference", + "path": "./e2e-emulated/contracts/local-type-inference.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "stdlib", + "path": "./e2e-emulated/contracts/stdlib.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "structs", + "path": "./e2e-emulated/contracts/structs.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "initof", + "path": "./e2e-emulated/contracts/initof.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "initof-2", + "path": "./e2e-emulated/contracts/initof-2.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "initof-3", + "path": "./e2e-emulated/contracts/initof-3.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "getters", + "path": "./e2e-emulated/contracts/getters.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "allocation", + "path": "./e2e-emulated/contracts/allocation.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "traits", + "path": "./e2e-emulated/contracts/traits.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "receiver-empty", + "path": "./e2e-emulated/contracts/receiver-empty.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "init-of-message", + "path": "./e2e-emulated/contracts/init-of-message.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "init-return", + "path": "./e2e-emulated/contracts/init-return.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "semantics", + "path": "./e2e-emulated/contracts/semantics.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "contract-methods", + "path": "./e2e-emulated/contracts/contract-methods.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "asm-functions", + "path": "./e2e-emulated/contracts/asm-functions.tact", + "output": "./e2e-emulated/contracts/output" + }, + { + "name": "text-message-receivers", + "path": "./e2e-emulated/contracts/text-message-receivers.tact", + "output": "./e2e-emulated/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "benchmark_functions", + "path": "./benchmarks/contracts/functions.tact", + "output": "./benchmarks/contracts/output" + }, + { + "name": "benchmark_functions_inline", + "path": "./benchmarks/contracts/functions.tact", + "output": "./benchmarks/contracts/output", + "options": { + "experimental": { + "inline": true + } + } + }, + { + "name": "codegen", + "path": "./codegen/all-contracts.tact", + "output": "./codegen/output", + "options": { + "debug": true + } + }, + { + "name": "repeat-range", + "path": "./exit-codes/contracts/repeat-range.tact", + "output": "./exit-codes/contracts/output" + }, + { + "name": "tact-reserved-contract-errors", + "path": "./exit-codes/contracts/tact-reserved-contract-errors.tact", + "output": "./exit-codes/contracts/output", + "options": { + "debug": true + } + }, + { + "name": "compute-phase-errors", + "path": "./exit-codes/contracts/compute-phase-errors.tact", + "output": "./exit-codes/contracts/output" + } + ] +} diff --git a/tact.config.json b/tact.config.json deleted file mode 100644 index 761e46f0b..000000000 --- a/tact.config.json +++ /dev/null @@ -1,446 +0,0 @@ -{ - "$schema": "./src/config/configSchema.json", - "projects": [ - { - "name": "echo", - "path": "./examples/echo.tact", - "output": "./examples/output" - }, - { - "name": "inheritance", - "path": "./examples/inheritance.tact", - "output": "./examples/output" - }, - { - "name": "large", - "path": "./examples/large.tact", - "output": "./examples/output" - }, - { - "name": "native", - "path": "./examples/native.tact", - "output": "./examples/output" - }, - { - "name": "maps", - "path": "./examples/maps.tact", - "output": "./examples/output" - }, - { - "name": "payouts", - "path": "./examples/payouts.tact", - "output": "./examples/output" - }, - { - "name": "external", - "path": "./examples/external.tact", - "output": "./examples/output", - "options": { - "external": true - } - }, - { - "name": "wallet", - "path": "./examples/wallet.tact", - "output": "./examples/output" - }, - { - "name": "wallet-opt", - "path": "./examples/wallet-opt.tact", - "output": "./examples/output", - "options": { - "experimental": { - "inline": true - } - } - }, - { - "name": "treasure", - "path": "./examples/treasure.tact", - "output": "./examples/output" - }, - { - "name": "multisig", - "path": "./examples/multisig.tact", - "output": "./examples/output" - }, - { - "name": "multisig-3", - "path": "./examples/multisig-3.tact", - "output": "./examples/output" - }, - { - "name": "increment", - "path": "./examples/increment.tact", - "output": "./examples/output" - }, - { - "name": "rugpull", - "path": "./examples/rugpull.tact", - "output": "./examples/output" - }, - { - "name": "maps1", - "path": "./src/test/e2e-emulated/contracts/maps1.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "maps2", - "path": "./src/test/e2e-emulated/contracts/maps2.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "map-traverse", - "path": "./src/test/e2e-emulated/contracts/map-traverse.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "map-comparison", - "path": "./src/test/e2e-emulated/contracts/map-comparison.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "mutating-methods", - "path": "./src/test/e2e-emulated/contracts/mutating-methods.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "non-mutating-methods", - "path": "./src/test/e2e-emulated/contracts/non-mutating-methods.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "underscore-variable", - "path": "./src/test/e2e-emulated/contracts/underscore-variable.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "optionals", - "path": "./src/test/e2e-emulated/contracts/optionals.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "sample-jetton", - "path": "./src/test/e2e-emulated/contracts/sample-jetton.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "serialization", - "path": "./src/test/e2e-emulated/contracts/serialization.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "serialization-2", - "path": "./src/test/e2e-emulated/contracts/serialization-2.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "serialization-3", - "path": "./src/test/e2e-emulated/contracts/serialization-3.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "strings", - "path": "./src/test/e2e-emulated/contracts/strings.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "constants", - "path": "./src/test/e2e-emulated/contracts/constants.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "math", - "path": "./src/test/e2e-emulated/contracts/math.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "dns", - "path": "./src/test/e2e-emulated/contracts/dns.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "integer-literals", - "path": "./src/test/e2e-emulated/contracts/integer-literals.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "random", - "path": "./src/test/e2e-emulated/contracts/random.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "ordering", - "path": "./src/test/e2e-emulated/contracts/ordering.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "deep", - "path": "./src/test/e2e-emulated/contracts/deep-sequence.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "bounced-routing", - "path": "./src/test/e2e-emulated/contracts/bounced-routing.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "external-fallbacks", - "path": "./src/test/e2e-emulated/contracts/external-fallbacks.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "external": true - } - }, - { - "name": "debug", - "path": "./src/test/e2e-emulated/contracts/debug.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "send", - "path": "./src/test/e2e-emulated/contracts/send.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "intrinsics", - "path": "./src/test/e2e-emulated/contracts/intrinsics.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "masterchain", - "path": "./src/test/e2e-emulated/contracts/masterchain.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "try-catch", - "path": "./src/test/e2e-emulated/contracts/try-catch.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "address", - "path": "./src/test/e2e-emulated/contracts/address.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "ternary", - "path": "./src/test/e2e-emulated/contracts/ternary.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "implicit-init", - "path": "./src/test/e2e-emulated/contracts/implicit-init.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "recursion", - "path": "./src/test/e2e-emulated/contracts/recursion.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "local-type-inference", - "path": "./src/test/e2e-emulated/contracts/local-type-inference.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "benchmark_functions", - "path": "./src/benchmarks/contracts/functions.tact", - "output": "./src/benchmarks/contracts/output" - }, - { - "name": "benchmark_functions_inline", - "path": "./src/benchmarks/contracts/functions.tact", - "output": "./src/benchmarks/contracts/output", - "options": { - "experimental": { - "inline": true - } - } - }, - { - "name": "codegen", - "path": "./src/test/codegen/all-contracts.tact", - "output": "./src/test/codegen/output", - "options": { - "debug": true - } - }, - { - "name": "stdlib", - "path": "./src/test/e2e-emulated/contracts/stdlib.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "structs", - "path": "./src/test/e2e-emulated/contracts/structs.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "initof", - "path": "./src/test/e2e-emulated/contracts/initof.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "initof-2", - "path": "./src/test/e2e-emulated/contracts/initof-2.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "initof-3", - "path": "./src/test/e2e-emulated/contracts/initof-3.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "getters", - "path": "./src/test/e2e-emulated/contracts/getters.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "allocation", - "path": "./src/test/e2e-emulated/contracts/allocation.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "traits", - "path": "./src/test/e2e-emulated/contracts/traits.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "receiver-empty", - "path": "./src/test/e2e-emulated/contracts/receiver-empty.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "init-of-message", - "path": "./src/test/e2e-emulated/contracts/init-of-message.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "init-return", - "path": "./src/test/e2e-emulated/contracts/init-return.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "repeat-range", - "path": "./src/test/exit-codes/contracts/repeat-range.tact", - "output": "./src/test/exit-codes/contracts/output" - }, - { - "name": "semantics", - "path": "./src/test/e2e-emulated/contracts/semantics.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "contract-methods", - "path": "./src/test/e2e-emulated/contracts/contract-methods.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "asm-functions", - "path": "./src/test/e2e-emulated/contracts/asm-functions.tact", - "output": "./src/test/e2e-emulated/contracts/output" - }, - { - "name": "text-message-receivers", - "path": "./src/test/e2e-emulated/contracts/text-message-receivers.tact", - "output": "./src/test/e2e-emulated/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "tact-reserved-contract-errors", - "path": "./src/test/exit-codes/contracts/tact-reserved-contract-errors.tact", - "output": "./src/test/exit-codes/contracts/output", - "options": { - "debug": true - } - }, - { - "name": "compute-phase-errors", - "path": "./src/test/exit-codes/contracts/compute-phase-errors.tact", - "output": "./src/test/exit-codes/contracts/output" - } - ] -}