Skip to content

Commit

Permalink
Add tests and update baselines
Browse files Browse the repository at this point in the history
  • Loading branch information
Andy Hanson committed Nov 9, 2018
1 parent d4973d5 commit fa63536
Show file tree
Hide file tree
Showing 27 changed files with 213 additions and 83 deletions.
18 changes: 12 additions & 6 deletions tests/baselines/reference/anyInferenceAnonymousFunctions.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,42 @@ var paired: any[];
>paired : Symbol(paired, Decl(anyInferenceAnonymousFunctions.ts, 0, 3))

paired.reduce(function (a1, a2) {
>paired.reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>paired.reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>paired : Symbol(paired, Decl(anyInferenceAnonymousFunctions.ts, 0, 3))
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>a1 : Symbol(a1, Decl(anyInferenceAnonymousFunctions.ts, 2, 24))
>a2 : Symbol(a2, Decl(anyInferenceAnonymousFunctions.ts, 2, 27))

return a1.concat({});
>a1.concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>a1 : Symbol(a1, Decl(anyInferenceAnonymousFunctions.ts, 2, 24))
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))

} , []);

paired.reduce((b1, b2) => {
>paired.reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>paired.reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>paired : Symbol(paired, Decl(anyInferenceAnonymousFunctions.ts, 0, 3))
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>b1 : Symbol(b1, Decl(anyInferenceAnonymousFunctions.ts, 8, 15))
>b2 : Symbol(b2, Decl(anyInferenceAnonymousFunctions.ts, 8, 18))

return b1.concat({});
>b1.concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>b1 : Symbol(b1, Decl(anyInferenceAnonymousFunctions.ts, 8, 15))
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))

} , []);

paired.reduce((b3, b4) => b3.concat({}), []);
>paired.reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>paired.reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>paired : Symbol(paired, Decl(anyInferenceAnonymousFunctions.ts, 0, 3))
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>b3 : Symbol(b3, Decl(anyInferenceAnonymousFunctions.ts, 13, 15))
>b4 : Symbol(b4, Decl(anyInferenceAnonymousFunctions.ts, 13, 18))
>b3.concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>b3 : Symbol(b3, Decl(anyInferenceAnonymousFunctions.ts, 13, 15))
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))

paired.map((c1) => c1.count);
>paired.map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --))
Expand Down
54 changes: 27 additions & 27 deletions tests/baselines/reference/anyInferenceAnonymousFunctions.types
Original file line number Diff line number Diff line change
Expand Up @@ -3,55 +3,55 @@ var paired: any[];
>paired : any[]

paired.reduce(function (a1, a2) {
>paired.reduce(function (a1, a2) { return a1.concat({});} , []) : any
>paired.reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue: any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>paired.reduce(function (a1, a2) { return a1.concat({});} , []) : any[]
>paired.reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>paired : any[]
>reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue: any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>function (a1, a2) { return a1.concat({});} : (a1: any, a2: any) => any
>a1 : any
>reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>function (a1, a2) { return a1.concat({});} : (a1: any[], a2: any) => any[]
>a1 : any[]
>a2 : any

return a1.concat({});
>a1.concat({}) : any
>a1.concat : any
>a1 : any
>concat : any
>a1.concat({}) : any[]
>a1.concat : { (...items: ConcatArray<any>[]): any[]; (...items: any[]): any[]; }
>a1 : any[]
>concat : { (...items: ConcatArray<any>[]): any[]; (...items: any[]): any[]; }
>{} : {}

} , []);
>[] : undefined[]

paired.reduce((b1, b2) => {
>paired.reduce((b1, b2) => { return b1.concat({});} , []) : any
>paired.reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue: any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>paired.reduce((b1, b2) => { return b1.concat({});} , []) : any[]
>paired.reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>paired : any[]
>reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue: any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>(b1, b2) => { return b1.concat({});} : (b1: any, b2: any) => any
>b1 : any
>reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>(b1, b2) => { return b1.concat({});} : (b1: any[], b2: any) => any[]
>b1 : any[]
>b2 : any

return b1.concat({});
>b1.concat({}) : any
>b1.concat : any
>b1 : any
>concat : any
>b1.concat({}) : any[]
>b1.concat : { (...items: ConcatArray<any>[]): any[]; (...items: any[]): any[]; }
>b1 : any[]
>concat : { (...items: ConcatArray<any>[]): any[]; (...items: any[]): any[]; }
>{} : {}

} , []);
>[] : undefined[]

paired.reduce((b3, b4) => b3.concat({}), []);
>paired.reduce((b3, b4) => b3.concat({}), []) : any
>paired.reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue: any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>paired.reduce((b3, b4) => b3.concat({}), []) : any[]
>paired.reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>paired : any[]
>reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue: any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>(b3, b4) => b3.concat({}) : (b3: any, b4: any) => any
>b3 : any
>reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any): any; <U>(callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; }
>(b3, b4) => b3.concat({}) : (b3: any[], b4: any) => any[]
>b3 : any[]
>b4 : any
>b3.concat({}) : any
>b3.concat : any
>b3 : any
>concat : any
>b3.concat({}) : any[]
>b3.concat : { (...items: ConcatArray<any>[]): any[]; (...items: any[]): any[]; }
>b3 : any[]
>concat : { (...items: ConcatArray<any>[]): any[]; (...items: any[]): any[]; }
>{} : {}
>[] : undefined[]

Expand Down
26 changes: 26 additions & 0 deletions tests/baselines/reference/arrayReduce.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
tests/cases/compiler/arrayReduce.ts(10,2): error TS2322: Type '{ kind: string; value: number; }' is not assignable to type 'Operation'.
Types of property 'kind' are incompatible.
Type 'string' is not assignable to type '"add" | "subtract"'.


==== tests/cases/compiler/arrayReduce.ts (1 errors) ====
function toStrings(arr: ReadonlyArray<object>): string[] {
return arr.reduce((acc, obj) => {
acc.push(obj.toString());
return acc;
}, [] as string[]);
}

interface Operation { readonly kind: "add" | "subtract"; readonly value: number; }
function add(arr: ReadonlyArray<Operation>): Operation {
return arr.reduce(({ value }, { kind, value: v }) => {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
return { kind: "add", value: kind === "add" ? value + v : value - v };
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}, { kind: "add", value: 5 });
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS2322: Type '{ kind: string; value: number; }' is not assignable to type 'Operation'.
!!! error TS2322: Types of property 'kind' are incompatible.
!!! error TS2322: Type 'string' is not assignable to type '"add" | "subtract"'.
}

14 changes: 14 additions & 0 deletions tests/baselines/reference/arrayReduce.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ function toStrings(arr: ReadonlyArray<object>): string[] {
return acc;
}, [] as string[]);
}

interface Operation { readonly kind: "add" | "subtract"; readonly value: number; }
function add(arr: ReadonlyArray<Operation>): Operation {
return arr.reduce(({ value }, { kind, value: v }) => {
return { kind: "add", value: kind === "add" ? value + v : value - v };
}, { kind: "add", value: 5 });
}


//// [arrayReduce.js]
Expand All @@ -14,3 +21,10 @@ function toStrings(arr) {
return acc;
}, []);
}
function add(arr) {
return arr.reduce(function (_a, _b) {
var value = _a.value;
var kind = _b.kind, v = _b.value;
return { kind: "add", value: kind === "add" ? value + v : value - v };
}, { kind: "add", value: 5 });
}
35 changes: 35 additions & 0 deletions tests/baselines/reference/arrayReduce.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,38 @@ function toStrings(arr: ReadonlyArray<object>): string[] {
}, [] as string[]);
}

interface Operation { readonly kind: "add" | "subtract"; readonly value: number; }
>Operation : Symbol(Operation, Decl(arrayReduce.ts, 5, 1))
>kind : Symbol(Operation.kind, Decl(arrayReduce.ts, 7, 21))
>value : Symbol(Operation.value, Decl(arrayReduce.ts, 7, 56))

function add(arr: ReadonlyArray<Operation>): Operation {
>add : Symbol(add, Decl(arrayReduce.ts, 7, 82))
>arr : Symbol(arr, Decl(arrayReduce.ts, 8, 13))
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --))
>Operation : Symbol(Operation, Decl(arrayReduce.ts, 5, 1))
>Operation : Symbol(Operation, Decl(arrayReduce.ts, 5, 1))

return arr.reduce(({ value }, { kind, value: v }) => {
>arr.reduce : Symbol(ReadonlyArray.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>arr : Symbol(arr, Decl(arrayReduce.ts, 8, 13))
>reduce : Symbol(ReadonlyArray.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>value : Symbol(value, Decl(arrayReduce.ts, 9, 21))
>kind : Symbol(kind, Decl(arrayReduce.ts, 9, 32))
>value : Symbol(Operation.value, Decl(arrayReduce.ts, 7, 56))
>v : Symbol(v, Decl(arrayReduce.ts, 9, 38))

return { kind: "add", value: kind === "add" ? value + v : value - v };
>kind : Symbol(kind, Decl(arrayReduce.ts, 10, 10))
>value : Symbol(value, Decl(arrayReduce.ts, 10, 23))
>kind : Symbol(kind, Decl(arrayReduce.ts, 9, 32))
>value : Symbol(value, Decl(arrayReduce.ts, 9, 21))
>v : Symbol(v, Decl(arrayReduce.ts, 9, 38))
>value : Symbol(value, Decl(arrayReduce.ts, 9, 21))
>v : Symbol(v, Decl(arrayReduce.ts, 9, 38))

}, { kind: "add", value: 5 });
>kind : Symbol(kind, Decl(arrayReduce.ts, 11, 5))
>value : Symbol(value, Decl(arrayReduce.ts, 11, 18))
}

44 changes: 43 additions & 1 deletion tests/baselines/reference/arrayReduce.types
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
function toStrings(arr: ReadonlyArray<object>): string[] {
>toStrings : (arr: ReadonlyArray<object>) => string[]
>arr : ReadonlyArray<object>
>ReadonlyArray : ReadonlyArray<T>

return arr.reduce((acc, obj) => {
>arr.reduce((acc, obj) => { acc.push(obj.toString()); return acc; }, [] as string[]) : string[]
Expand Down Expand Up @@ -31,3 +30,46 @@ function toStrings(arr: ReadonlyArray<object>): string[] {
>[] : undefined[]
}

interface Operation { readonly kind: "add" | "subtract"; readonly value: number; }
>kind : "add" | "subtract"
>value : number

function add(arr: ReadonlyArray<Operation>): Operation {
>add : (arr: ReadonlyArray<Operation>) => Operation
>arr : ReadonlyArray<Operation>

return arr.reduce(({ value }, { kind, value: v }) => {
>arr.reduce(({ value }, { kind, value: v }) => { return { kind: "add", value: kind === "add" ? value + v : value - v }; }, { kind: "add", value: 5 }) : { kind: string; value: number; }
>arr.reduce : { (callbackfn: (previousValue: Operation, currentValue: Operation, currentIndex: number, array: ReadonlyArray<Operation>) => Operation): Operation; <U>(callbackfn: (previousValue: U, currentValue: Operation, currentIndex: number, array: ReadonlyArray<Operation>) => U, initialValue: U): U; }
>arr : ReadonlyArray<Operation>
>reduce : { (callbackfn: (previousValue: Operation, currentValue: Operation, currentIndex: number, array: ReadonlyArray<Operation>) => Operation): Operation; <U>(callbackfn: (previousValue: U, currentValue: Operation, currentIndex: number, array: ReadonlyArray<Operation>) => U, initialValue: U): U; }
>({ value }, { kind, value: v }) => { return { kind: "add", value: kind === "add" ? value + v : value - v }; } : ({ value }: { kind: string; value: number; }, { kind, value: v }: Operation) => { kind: string; value: number; }
>value : number
>kind : "add" | "subtract"
>value : any
>v : number

return { kind: "add", value: kind === "add" ? value + v : value - v };
>{ kind: "add", value: kind === "add" ? value + v : value - v } : { kind: string; value: number; }
>kind : string
>"add" : "add"
>value : number
>kind === "add" ? value + v : value - v : number
>kind === "add" : boolean
>kind : "add" | "subtract"
>"add" : "add"
>value + v : number
>value : number
>v : number
>value - v : number
>value : number
>v : number

}, { kind: "add", value: 5 });
>{ kind: "add", value: 5 } : { kind: string; value: number; }
>kind : string
>"add" : "add"
>value : number
>5 : 5
}

Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(
a1(...array2); // Error parameter type is (number|string)[]
~~~~~~
!!! error TS2552: Cannot find name 'array2'. Did you mean 'Array'?
!!! related TS2728 /.ts/lib.es5.d.ts:1358:15: 'Array' is declared here.
!!! related TS2728 /.ts/lib.es5.d.ts:1354:15: 'Array' is declared here.
a5([1, 2, "string", false, true]); // Error, parameter type is [any, any, [[any]]]
~~~~~~~~
!!! error TS2322: Type 'string' is not assignable to type '[[any]]'.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ interface Array<T> {
>T : Symbol(T, Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 16))

reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T,
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 20), Decl(duplicateOverloadInTypeAugmentation1.ts, 2, 29))
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 20), Decl(duplicateOverloadInTypeAugmentation1.ts, 2, 29))
>callbackfn : Symbol(callbackfn, Decl(duplicateOverloadInTypeAugmentation1.ts, 1, 11))
>previousValue : Symbol(previousValue, Decl(duplicateOverloadInTypeAugmentation1.ts, 1, 24))
>T : Symbol(T, Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 16))
Expand All @@ -21,7 +21,7 @@ interface Array<T> {
>T : Symbol(T, Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 16))

reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U,
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 20), Decl(duplicateOverloadInTypeAugmentation1.ts, 2, 29))
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 20), Decl(duplicateOverloadInTypeAugmentation1.ts, 2, 29))
>U : Symbol(U, Decl(duplicateOverloadInTypeAugmentation1.ts, 3, 11))
>callbackfn : Symbol(callbackfn, Decl(duplicateOverloadInTypeAugmentation1.ts, 3, 14))
>previousValue : Symbol(previousValue, Decl(duplicateOverloadInTypeAugmentation1.ts, 3, 27))
Expand All @@ -44,9 +44,9 @@ var a: Array<string>;

var r5 = a.reduce((x, y) => x + y);
>r5 : Symbol(r5, Decl(duplicateOverloadInTypeAugmentation1.ts, 7, 3))
>a.reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 20), Decl(duplicateOverloadInTypeAugmentation1.ts, 2, 29))
>a.reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 20), Decl(duplicateOverloadInTypeAugmentation1.ts, 2, 29))
>a : Symbol(a, Decl(duplicateOverloadInTypeAugmentation1.ts, 6, 3))
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 20), Decl(duplicateOverloadInTypeAugmentation1.ts, 2, 29))
>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(duplicateOverloadInTypeAugmentation1.ts, 0, 20), Decl(duplicateOverloadInTypeAugmentation1.ts, 2, 29))
>x : Symbol(x, Decl(duplicateOverloadInTypeAugmentation1.ts, 7, 19))
>y : Symbol(y, Decl(duplicateOverloadInTypeAugmentation1.ts, 7, 21))
>x : Symbol(x, Decl(duplicateOverloadInTypeAugmentation1.ts, 7, 19))
Expand Down
Loading

0 comments on commit fa63536

Please sign in to comment.