From 85ddb2aa27266e9426c51f71c09baa840f2b6467 Mon Sep 17 00:00:00 2001 From: DieMyst Date: Fri, 21 Apr 2023 12:32:15 +0400 Subject: [PATCH] tests for arrow return from function --- aqua/examples/returnArrow.aqua | 31 +++++++++++++++++++++++++++++++ package-lock.json | 32 +++++++++----------------------- package.json | 2 +- src/__test__/examples.spec.ts | 19 +++++++++++++++++++ src/examples/returnArrowCall.ts | 9 +++++++++ 5 files changed, 69 insertions(+), 24 deletions(-) create mode 100644 aqua/examples/returnArrow.aqua create mode 100644 src/examples/returnArrowCall.ts diff --git a/aqua/examples/returnArrow.aqua b/aqua/examples/returnArrow.aqua new file mode 100644 index 0000000..e2a9469 --- /dev/null +++ b/aqua/examples/returnArrow.aqua @@ -0,0 +1,31 @@ +import "@fluencelabs/aqua-lib/builtin.aqua" + +export callReturnedArrow, callReturnedChainArrow + +func returnCall(arg: string) -> string -> string, string: + str <- Op.concat_strings(arg, " literal") + closure = (s: string) -> string, string: + <- s, Op.concat_strings(s, str) + <- closure + +func callReturnedArrow(argForFunc: string, argForClosure: string) -> string, string: + a = returnCall(argForFunc) + b, c <- a(argForClosure) + <- b, c + +func secondReturnCall(arg: string) -> (string -> string, string), (string -> string, string), (string -> string, string): + str <- Op.concat_strings(arg, " second literal") + closure = (s: string) -> string, string: + <- s, Op.concat_strings(s, str) + b = closure + a = returnCall(" from second") + <- b, closure, a + +func callReturnedChainArrow(argForFirst: string, argForSecond: string) -> string, string, string, string, string, string, string, string: + first = returnCall(argForFirst) + second, third, fourth <- secondReturnCall(argForSecond) + a, b <- first("first") + c, d <- second("second") + e, f <- third("third") + g, h <- fourth("fourth") + <- a, b, c, d, e, f, g, h \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f92f839..f6561ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "loglevel": "1.8.1" }, "devDependencies": { - "@fluencelabs/aqua": "0.10.3", + "@fluencelabs/aqua": "0.10.5", "@fluencelabs/aqua-dht": "0.2.5", "@fluencelabs/aqua-lib": "0.6.0", "@types/jest": "29.4.0", @@ -819,15 +819,15 @@ } }, "node_modules/@fluencelabs/aqua": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.10.3.tgz", - "integrity": "sha512-v7Jy+KzZkUm7NuUgrp7UQ8gxuhykxuTU3JigCdxiZMcG3/zD+OtHzsSggVLxVjDP7CKuTcjEKZSCxObwHp/Tpw==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.10.5.tgz", + "integrity": "sha512-fcrxmkfLKXTIYjM2Gf9ZlF17IvTGwy84b1Eu5FPjsZD74Wnof9tbfHJMg5g2WK9FBMwaakwCQ3RtAS6MqyQhEg==", "dev": true, "dependencies": { "@fluencelabs/aqua-ipfs": "0.5.9", "@fluencelabs/aqua-lib": "0.6.0", "@fluencelabs/fluence": "0.28.0", - "@fluencelabs/fluence-network-environment": "1.0.13", + "@fluencelabs/fluence-network-environment": "1.0.14", "ipfs-http-client": "50.1.2" }, "bin": { @@ -871,12 +871,6 @@ "integrity": "sha512-ifjtCM93KO3LhzPkMxqmXhwLmrg/scjOiyTihEVg7ns5N+BVzaK1eWzdOdqGdl9ZVoah43pdlQUepEo7VdRmsw==", "dev": true }, - "node_modules/@fluencelabs/aqua/node_modules/@fluencelabs/fluence-network-environment": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@fluencelabs/fluence-network-environment/-/fluence-network-environment-1.0.13.tgz", - "integrity": "sha512-2pci3T0sUHE08jwEs1r/vHKVT4XUh/A3j/QJ0eIhddsxyIjEksjdn05X7DF6STD14CF8GgBVOJEPgav8qaUMpA==", - "dev": true - }, "node_modules/@fluencelabs/avm": { "version": "0.35.3", "resolved": "https://npm.fluence.dev/@fluencelabs%2favm/-/avm-0.35.3.tgz", @@ -14077,24 +14071,16 @@ } }, "@fluencelabs/aqua": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.10.3.tgz", - "integrity": "sha512-v7Jy+KzZkUm7NuUgrp7UQ8gxuhykxuTU3JigCdxiZMcG3/zD+OtHzsSggVLxVjDP7CKuTcjEKZSCxObwHp/Tpw==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@fluencelabs/aqua/-/aqua-0.10.5.tgz", + "integrity": "sha512-fcrxmkfLKXTIYjM2Gf9ZlF17IvTGwy84b1Eu5FPjsZD74Wnof9tbfHJMg5g2WK9FBMwaakwCQ3RtAS6MqyQhEg==", "dev": true, "requires": { "@fluencelabs/aqua-ipfs": "0.5.9", "@fluencelabs/aqua-lib": "0.6.0", "@fluencelabs/fluence": "0.28.0", - "@fluencelabs/fluence-network-environment": "1.0.13", + "@fluencelabs/fluence-network-environment": "1.0.14", "ipfs-http-client": "50.1.2" - }, - "dependencies": { - "@fluencelabs/fluence-network-environment": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@fluencelabs/fluence-network-environment/-/fluence-network-environment-1.0.13.tgz", - "integrity": "sha512-2pci3T0sUHE08jwEs1r/vHKVT4XUh/A3j/QJ0eIhddsxyIjEksjdn05X7DF6STD14CF8GgBVOJEPgav8qaUMpA==", - "dev": true - } } }, "@fluencelabs/aqua-dht": { diff --git a/package.json b/package.json index 5e2de4f..8fbf4d5 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "do": "aqua dist deploy --addr /dns4/kras-04.fluence.dev/tcp/19001/wss/p2p/12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi --config-path deploy.json --service tsOracle" }, "devDependencies": { - "@fluencelabs/aqua": "0.10.3", + "@fluencelabs/aqua": "0.10.5", "@fluencelabs/aqua-dht": "0.2.5", "@fluencelabs/aqua-lib": "0.6.0", "@types/jest": "29.4.0", diff --git a/src/__test__/examples.spec.ts b/src/__test__/examples.spec.ts index 4dc20dd..e35f382 100644 --- a/src/__test__/examples.spec.ts +++ b/src/__test__/examples.spec.ts @@ -57,6 +57,7 @@ import {lng58Bug} from '../compiled/examples/closures.js'; import {config, isEphemeral} from '../config.js'; import {bugLng79Call} from "../examples/canonCall.js"; import {bugLng119Call} from "../examples/functorsCall.js"; +import {returnArrowCall, returnArrowChainCall} from "../examples/returnArrowCall.js"; var selfPeerId: string; var peer1: IFluenceClient; @@ -121,6 +122,24 @@ describe('Testing examples', () => { expect(argResult).toBe('privet'); }); + it('returnArrow.aqua', async () => { + let [result1, result2] = await returnArrowCall(); + + expect(result1).toBe('arg for closure '); + expect(result2).toBe('arg for closure arg for func literal'); + }); + + it('returnArrow.aqua chain', async () => { + let argResult = await returnArrowChainCall(); + + expect(argResult).toBe( + ["first", "firstarg for func1 literal", + "second", "secondarg for func2 second literal", + "third", "thirdarg for func2 second literal", + "fourth", "fourth from second literal" + ]); + }); + it('streamRestrictions.aqua', async () => { let streamResResult = await streamResCall(); diff --git a/src/examples/returnArrowCall.ts b/src/examples/returnArrowCall.ts new file mode 100644 index 0000000..6dc9cad --- /dev/null +++ b/src/examples/returnArrowCall.ts @@ -0,0 +1,9 @@ +import {callReturnedArrow, callReturnedChainArrow} from "../compiled/examples/returnArrow.js"; + +export async function returnArrowCall(): Promise<[string, string]> { + return await callReturnedArrow("arg for func ", "arg for closure ") +} + +export async function returnArrowChainCall(): Promise<[string, string, string, string, string, string, string, string]> { + return await callReturnedChainArrow("arg for func1 ", "arg for func2 ") +} \ No newline at end of file