Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Candid type object #1468

Closed
wants to merge 35 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
e75b418
rename CandidMeta to CandidValueAndMeta
bdemann Nov 28, 2023
2aaa026
Rename Arb to match type
bdemann Nov 28, 2023
754171c
change file name to match new name
bdemann Nov 28, 2023
3b04ff8
rename to PrimitiveCandidValueAndMetaArb
bdemann Nov 29, 2023
84ce629
split CandidMetaArb into two parts, type and value
bdemann Nov 29, 2023
e63b884
WIP
bdemann Nov 29, 2023
104001c
move candid class to it's own file
bdemann Nov 29, 2023
6f57062
set min field count of records to 1
bdemann Nov 29, 2023
babcd83
checkpoint
bdemann Nov 29, 2023
d91b890
refactor
bdemann Nov 29, 2023
877eeea
Add more definitionArbs
bdemann Nov 29, 2023
c6a6ce3
add primitive type arbs
bdemann Nov 29, 2023
cdbb3af
Add primitives to CandidDefinitionArb
bdemann Nov 29, 2023
b695744
add opt, tuple, and variant
bdemann Nov 30, 2023
077e37f
rename some metas to definition
bdemann Nov 30, 2023
e28e7e2
add principal
bdemann Nov 30, 2023
2ca9d6d
add service and func
bdemann Nov 30, 2023
1888493
refactoring
bdemann Dec 1, 2023
4d915dd
reorder blob arb
bdemann Dec 1, 2023
a7c9011
checkpoint
bdemann Dec 1, 2023
d7a0cac
simplify constructed arbs
bdemann Dec 1, 2023
1a13066
rename
bdemann Dec 1, 2023
744429f
move service and func def and values to own files
bdemann Dec 1, 2023
8ccfe9f
simplify CandidArb
bdemann Dec 1, 2023
40c2ffc
change candid type to string union
bdemann Dec 1, 2023
d0d3b65
rename file to match arb inside
bdemann Dec 1, 2023
ea71846
fix type errors
bdemann Dec 1, 2023
ee4e7b1
add blob to definition arb
bdemann Dec 1, 2023
5c3c754
pr fixes
bdemann Dec 1, 2023
00fc3d9
pr_fixes
bdemann Dec 1, 2023
9cbaa53
pr fixes
bdemann Dec 2, 2023
1585c70
fix imports
bdemann Dec 2, 2023
6555b5f
update arbitraries to functions
bdemann Dec 4, 2023
600a8f7
remove unnecessary recursion
bdemann Dec 4, 2023
fa4a236
rename typeAnn to candidTypeObject
bdemann Dec 4, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 0 additions & 34 deletions property_tests/arbitraries/candid/candid_arb.ts

This file was deleted.

84 changes: 84 additions & 0 deletions property_tests/arbitraries/candid/candid_definition_arb/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import fc from 'fast-check';
import { BoolDefinitionArb } from '../primitive/bool';
import { Float32DefinitionArb } from '../primitive/floats/float32_arb';
import { Float64DefinitionArb } from '../primitive/floats/float64_arb';
import { FuncDefinitionArb } from '../reference/func_arb/definition_arb';
import { Int16DefinitionArb } from '../primitive/ints/int16_arb';
import { Int32DefinitionArb } from '../primitive/ints/int32_arb';
import { Int64DefinitionArb } from '../primitive/ints/int64_arb';
import { Int8DefinitionArb } from '../primitive/ints/int8_arb';
import { IntDefinitionArb } from '../primitive/ints/int_arb';
import { Nat16DefinitionArb } from '../primitive/nats/nat16_arb';
import { Nat32DefinitionArb } from '../primitive/nats/nat32_arb';
import { Nat64DefinitionArb } from '../primitive/nats/nat64_arb';
import { Nat8DefinitionArb } from '../primitive/nats/nat8_arb';
import { NatDefinitionArb } from '../primitive/nats/nat_arb';
import { OptDefinitionArb } from '../constructed/opt_arb/definition_arb';
import { PrincipalDefinitionArb } from '../reference/principal_arb';
import { RecordDefinitionArb } from '../constructed/record_arb/definition_arb';
import { TextDefinitionArb } from '../primitive/text';
import { TupleDefinitionArb } from '../constructed/tuple_arb/definition_arb';
import { VariantDefinitionArb } from '../constructed/variant_arb/definition_arbs';
import { VecDefinitionArb } from '../constructed/vec_arb/definition_arb';
import {
CandidDefinition,
FuncCandidDefinition,
OptCandidDefinition,
RecordCandidDefinition,
TupleCandidDefinition,
VariantCandidDefinition,
VecCandidDefinition
} from './types';
import { BlobDefinitionArb } from '../constructed/blob_arb/definition_arb';

export const CandidDefinitionArb: fc.Arbitrary<CandidDefinition> = fc.letrec(
(tie) => ({
CandidDefinition: fc.oneof(
BlobDefinitionArb(),
tie('Opt').map((sample) => sample as OptCandidDefinition),
tie('Record').map((sample) => sample as RecordCandidDefinition),
tie('Tuple').map((sample) => sample as TupleCandidDefinition),
tie('Variant').map((sample) => sample as VariantCandidDefinition),
tie('Vec').map((sample) => sample as VecCandidDefinition),
BoolDefinitionArb(),
Float32DefinitionArb(),
Float64DefinitionArb(),
IntDefinitionArb(),
Int8DefinitionArb(),
Int16DefinitionArb(),
Int32DefinitionArb(),
Int64DefinitionArb(),
NatDefinitionArb(),
Nat8DefinitionArb(),
Nat16DefinitionArb(),
Nat32DefinitionArb(),
Nat64DefinitionArb(),
// NullDefinitionArb(), // Must be excluded until https://github.com/demergent-labs/azle/issues/1453 gets resolved
TextDefinitionArb(),
tie('Func').map((sample) => sample as FuncCandidDefinition),
PrincipalDefinitionArb()
// tie('Service').map((sample) => sample as ServiceCandidDefinition) // Services Aren't working with deep equals
),
Func: FuncDefinitionArb(
tie('CandidDefinition') as fc.Arbitrary<CandidDefinition>
),
Opt: OptDefinitionArb(
tie('CandidDefinition') as fc.Arbitrary<CandidDefinition>
),
Record: RecordDefinitionArb(
tie('CandidDefinition') as fc.Arbitrary<CandidDefinition>
),
// Service: ServiceDefinitionArb(
// tie('CandidDefinition') as fc.Arbitrary<CandidDefinition>
// ),
Tuple: TupleDefinitionArb(
tie('CandidDefinition') as fc.Arbitrary<CandidDefinition>
),
Variant: VariantDefinitionArb(
tie('CandidDefinition') as fc.Arbitrary<CandidDefinition>
),
Vec: VecDefinitionArb(
tie('CandidDefinition') as fc.Arbitrary<CandidDefinition>
)
})
).CandidDefinition;
71 changes: 71 additions & 0 deletions property_tests/arbitraries/candid/candid_definition_arb/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { CandidType } from '../candid_type';

export type CandidDefinition =
| MultiTypeConstructedDefinition
| SingleTypeConstructedDefinition
| PrimitiveDefinition
| UnnamedMultiTypeConstructedDefinition
| FuncCandidDefinition
| ServiceCandidDefinition;

export type MultiTypeConstructedDefinition = {
candidMeta: CandidMeta;
innerTypes: [string, CandidDefinition][];
};

export type UnnamedMultiTypeConstructedDefinition = {
candidMeta: CandidMeta;
innerTypes: CandidDefinition[];
};

export type SingleTypeConstructedDefinition = {
candidMeta: CandidMeta;
innerType: CandidDefinition;
};

export type PrimitiveDefinition = {
candidMeta: CandidMeta;
};

// Constructed
export type OptCandidDefinition = SingleTypeConstructedDefinition;
export type VecCandidDefinition = SingleTypeConstructedDefinition;
export type RecordCandidDefinition = MultiTypeConstructedDefinition;
export type VariantCandidDefinition = MultiTypeConstructedDefinition;
export type TupleCandidDefinition = UnnamedMultiTypeConstructedDefinition;
export type BlobCandidDefinition = PrimitiveDefinition;

// Primitives
export type FloatCandidDefinition = PrimitiveDefinition;
export type IntCandidDefinition = PrimitiveDefinition;
export type NatCandidDefinition = PrimitiveDefinition;
export type BoolCandidDefinition = PrimitiveDefinition;
export type NullCandidDefinition = PrimitiveDefinition;
export type TextCandidDefinition = PrimitiveDefinition;
export type VoidCandidDefinition = PrimitiveDefinition;

// Reference
export type FuncCandidDefinition = {
candidMeta: CandidMeta;
paramCandidMeta: CandidDefinition[];
returnCandidMeta: CandidDefinition;
};
export type PrincipalCandidDefinition = PrimitiveDefinition;
export type ServiceCandidDefinition = {
name: string;
candidMeta: CandidMeta;
funcs: ServiceMethodDefinition[];
};
export type ServiceMethodDefinition = {
name: string;
imports: Set<string>;
typeAliasDeclarations: string[];
src: string;
};

type CandidMeta = {
candidTypeObject: string; // Either a type reference or type literal
typeAliasDeclarations: string[];
imports: Set<string>;
candidType: CandidType;
};
21 changes: 14 additions & 7 deletions property_tests/arbitraries/candid/candid_return_type_arb.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
import fc from 'fast-check';

import { CandidMeta } from './candid_arb';
import { CandidType, CandidTypeArb } from './candid_type_arb';
import {
CandidValueAndMeta,
CandidValueAndMetaArb
} from './candid_value_and_meta_arb';
import { VoidArb } from './primitive/void';
import { CorrespondingJSType } from './corresponding_js_type';

export type CandidReturnType = CandidType | undefined;
export type CandidReturnType = CorrespondingJSType | undefined;

export const CandidReturnTypeArb = fc.oneof(
{ arbitrary: CandidTypeArb, weight: 17 },
{ arbitrary: VoidArb, weight: 1 }
) as fc.Arbitrary<CandidMeta<CandidReturnType>>;
export function CandidReturnTypeArb(): fc.Arbitrary<
CandidValueAndMeta<CandidReturnType>
> {
return fc.oneof(
{ arbitrary: CandidValueAndMetaArb(), weight: 17 },
{ arbitrary: VoidArb(), weight: 1 }
);
}
30 changes: 30 additions & 0 deletions property_tests/arbitraries/candid/candid_type.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
export type CandidType = ComplexCandidType | SimpleCandidType;

export type ComplexCandidType =
| 'Func'
| 'Opt'
| 'Record'
| 'Service'
| 'Tuple'
| 'Variant'
| 'Vec';

export type SimpleCandidType =
| 'blob'
| 'bool'
| 'float32'
| 'float64'
| 'int'
| 'int16'
| 'int32'
| 'int64'
| 'int8'
| 'nat'
| 'nat16'
| 'nat32'
| 'nat64'
| 'nat8'
| 'Null'
| 'Principal'
| 'text'
| 'Void';
106 changes: 0 additions & 106 deletions property_tests/arbitraries/candid/candid_type_arb.ts

This file was deleted.

Loading