From 554b7ce67da6fb5cfd6190d5096f9660a3e78aa9 Mon Sep 17 00:00:00 2001 From: Benjamin DeMann Date: Wed, 27 Dec 2023 14:12:39 -0700 Subject: [PATCH] update to limit size instead of forcing it to be empty --- .../candid/constructed/vec_arb/values_arb.ts | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/property_tests/arbitraries/candid/constructed/vec_arb/values_arb.ts b/property_tests/arbitraries/candid/constructed/vec_arb/values_arb.ts index 3422c4e7f1..1273433097 100644 --- a/property_tests/arbitraries/candid/constructed/vec_arb/values_arb.ts +++ b/property_tests/arbitraries/candid/constructed/vec_arb/values_arb.ts @@ -1,4 +1,4 @@ -import fc from 'fast-check'; +import fc, { ArrayConstraints } from 'fast-check'; import { Vec } from '.'; import { CandidType } from '../../candid_type'; import { CorrespondingJSType } from '../../corresponding_js_type'; @@ -13,6 +13,14 @@ import { import { CandidValues, CandidValueArb } from '../../candid_values_arb'; import { RecursiveShapes } from '../../recursive'; +/* +https://github.com/dfinity/candid/blob/491969f34dd791e51f69c5f8d3c6192ae405b839/spec/Candid.md#memory +Set size limit to follow candid spec +const NULL_VEC_SIZE_LIMIT = 2_000_000; +*/ +// TODO set to zero until the limit is unified on both the canister and client side as per https://github.com/demergent-labs/azle/issues/1538 +const EMPTYISH_VEC_SIZE_LIMIT = 0; + export function VecValuesArb( vecDefinition: VecCandidDefinition, recursiveShapes: RecursiveShapes, @@ -23,14 +31,9 @@ export function VecValuesArb( generateEmptyVec(vecDefinition.innerType.candidMeta.candidType) ); } - if (isEmptyInnerType(vecDefinition.innerType)) { - return fc.constant( - generateEmptyVec(vecDefinition.innerType.candidMeta.candidType) - ); - } const arbitraryMemberValues = fc .tuple( - fc.array(fc.constant(null)), + fc.array(fc.constant(null), determineVecConstraints(vecDefinition)), fc.constant(vecDefinition.innerType) ) .chain(([arrayTemplate, innerType]) => @@ -59,6 +62,15 @@ export function VecValuesArb( }); } +function determineVecConstraints( + vecDefinition: VecCandidDefinition +): ArrayConstraints | undefined { + if (isEmptyInnerType(vecDefinition.innerType)) { + return { maxLength: EMPTYISH_VEC_SIZE_LIMIT }; + } + return; +} + function generateEmptyVec(innerCandidType: CandidType): CandidValues { return { valueLiteral: typeValueLiteral('[]', innerCandidType),