diff --git a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/AddColumns_NumberIsFloatDisabled.txt b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/AddColumns_NumberIsFloatDisabled.txt deleted file mode 100644 index dfc11b3df2..0000000000 --- a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/AddColumns_NumberIsFloatDisabled.txt +++ /dev/null @@ -1,21 +0,0 @@ -#SETUP: disable:SupportColumnNamesAsIdentifiers -#SETUP: disable:NumberIsFloat -#SETUP: DecimalSupport - -// DV Decimal: These tests are compabtible with the SQL compiler used by Dataverse, with a max/min of +/-100,000,000,000 and ten decimal places. -// Variants of 10000000000.0000000001 are used which is not representable in floating point (rounds to 10000000000). -// These tests are also runnable with the C# semantics for decimal which is why they are included in the Power-Fx repo, ensuring consistency between DV and C#. -// Where possible, unless specifically testing the C# range, should be written in the DV rnage. - ->> AddColumns(["1","2","3"],"dec",Decimal(Value)+10000000000.0000000007) -Table({Value:"1",dec:10000000001.0000000007},{Value:"2",dec:10000000002.0000000007},{Value:"3",dec:10000000003.0000000007}) - ->> AddColumns(["1","2","3"],"dec",Value+10000000000.0000000007) -Table({Value:"1",dec:10000000001.0000000007},{Value:"2",dec:10000000002.0000000007},{Value:"3",dec:10000000003.0000000007}) - ->> AddColumns(["1","2","3"],"dec",Float(Value)+10000000000.0000000007) -Table({Value:"1",dec:10000000001},{Value:"2",dec:10000000002},{Value:"3",dec:10000000003}) - ->> AddColumns(["1","2","3"],"dec",Value(Value)+10000000000.0000000007) -Table({Value:"1",dec:10000000001.0000000007},{Value:"2",dec:10000000002.0000000007},{Value:"3",dec:10000000003.0000000007}) - diff --git a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/ArgCoercion_V1CompatDisabled.txt b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/ArgCoercion_V1CompatDisabled.txt deleted file mode 100644 index aa2d2a48e5..0000000000 --- a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/ArgCoercion_V1CompatDisabled.txt +++ /dev/null @@ -1,17 +0,0 @@ -#SETUP: disable:PowerFxV1CompatibilityRules,ConsistentOneColumnTableResult,TableSyntaxDoesntWrapRecords - ->> Last([ {a:2}, {a:true, b:true, c:20}, {a:2, b:2, c:true} ]).c -true - -// Without PowerFxV1CompatibilityRules feature, the following coercions will fail ->> Len(GUID()) -Error({Kind:ErrorKind.InvalidArgument}) - ->> GUID() & GUID() <> "" -Error(Table({Kind:ErrorKind.InvalidArgument},{Kind:ErrorKind.InvalidArgument})) - ->> Len(Lower(GUID())) -Error({Kind:ErrorKind.InvalidArgument}) - ->> Len(GUID() & GUID()) -Error(Table({Kind:ErrorKind.InvalidArgument},{Kind:ErrorKind.InvalidArgument})) \ No newline at end of file diff --git a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/BasicCoercion.txt b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/BasicCoercion.txt index b39aa57745..4e217419ef 100644 --- a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/BasicCoercion.txt +++ b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/BasicCoercion.txt @@ -51,3 +51,121 @@ Errors: Error 0-14: Invalid argument type. Expecting one of the following: Boole >> If(Date(2000,1,1),1,2) Errors: Error 3-17: Invalid argument type (Date). Expecting a Boolean value instead. + +// ************** Coercions between date/time values ************** + +>> If(1<0, DateTime(2000,1,1,1,1,1), Time(12,34,56,789)) +DateTime(1899,12,30,12,34,56,789) + +>> If(1<0, DateTime(2000,1,1,1,1,1), Date(2023,3,27)) +DateTime(2023,3,27,0,0,0,0) + +>> If(1<0, Time(1,2,3), Date(2000,1,1)) +Time(0,0,0,0) + +>> If(1<0, Date(2000,1,1), Time(12,0,0)) +Date(1899,12,30) + +>> If(1<0, Time(1,2,3), DateTime(2000,1,1,12,34,56,789)) +Time(12,34,56,789) + +>> If(1<0, Date(2000,1,1), DateTime(2134,5,6,12,0,0)) +Date(2134,5,6) + +// ************** Blank value coercion ************** + +// Boolean to number +>> If(1<0, 1, If(1<0,false)) +Blank() + +// Boolean to text +>> If(1<0, "A", If(1<0,false)) +Blank() + +// Number to boolean +>> If(1<0, 1, If(1<0,1)) +Blank() + +// Number to text +>> If(1<0, "A", If(1<0,1)) +Blank() + +// Number to datetime +>> If(1<0, DateTime(2023,1,1,3,4,5), If(1<0,1)) +Blank() + +// Number to date +>> If(1<0, Date(2023,1,1), If(1<0,1)) +Blank() + +// Number to time +>> If(1<0, Time(1,2,3), If(1<0,1)) +Blank() + +// Text to booleam +>> If(1<0, false, If(1<0,"a")) +Blank() + +// Text to number +>> If(1<0, 1, If(1<0,"a")) +Blank() + +// Text to datetime +>> If(1<0, DateTime(2023,1,1,3,4,5), If(1<0,"a")) +Blank() + +// Text to date +>> If(1<0, Date(2023,1,1), If(1<0,"a")) +Blank() + +// Text to time +>> If(1<0, Time(1,2,3), If(1<0,"a")) +Blank() + +// Date to number +>> If(1<0, 1, If(1<0,Date(2000,1,1))) +Blank() + +// Date to text +>> If(1<0, "A", If(1<0,Date(2000,1,1))) +Blank() + +// Date to datetime +>> If(1<0, DateTime(2023,1,1,3,4,5), If(1<0,Date(2000,1,1))) +Blank() + +// Date to time +>> If(1<0, Time(1,2,3), If(1<0,Date(2000,1,1))) +Blank() + +// DateTime to number +>> If(1<0, 1, If(1<0,DateTime(2023,1,1,3,4,5))) +Blank() + +// DateTime to text +>> If(1<0, "A", If(1<0,DateTime(2023,1,1,3,4,5))) +Blank() + +// DateTime to date +>> If(1<0, Date(2023,1,1), If(1<0,DateTime(2023,1,1,3,4,5))) +Blank() + +// DateTime to time +>> If(1<0, Time(1,2,3), If(1<0,DateTime(2023,1,1,3,4,5))) +Blank() + +// Time to number +>> If(1<0, 1, If(1<0,Time(1,2,3))) +Blank() + +// Time to text +>> If(1<0, "A", If(1<0,Time(1,2,3))) +Blank() + +// Time to datetime +>> If(1<0, DateTime(2023,1,1,3,4,5), If(1<0,Time(1,2,3))) +Blank() + +// Time to date +>> If(1<0, Date(2023,1,1), If(1<0,Time(1,2,3))) +Blank() diff --git a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/BasicCoercion_V1Compat.txt b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/BasicCoercion_V1Compat.txt deleted file mode 100644 index b96e59effc..0000000000 --- a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/BasicCoercion_V1Compat.txt +++ /dev/null @@ -1,123 +0,0 @@ -#SETUP: PowerFxV1CompatibilityRules - ->> GUID("AAAAAAAA-BBBB-CCCC-DDDD-EEEEFFFFFFFF") & " is a GUID" -"aaaaaaaa-bbbb-cccc-dddd-eeeeffffffff is a GUID" - ->> If(1<0, GUID("AAAAAAAA-BBBB-CCCC-DDDD-EEEEFFFFFFFF"), "11111111-2222-3333-4444-555566666666") -GUID("11111111-2222-3333-4444-555566666666") - ->> If(1<0, Time(1,2,3), Date(2000,1,1)) -Time(0,0,0,0) - ->> If(1<0, Time(1,2,3), DateTime(2000,1,1,12,34,56,789)) -Time(12,34,56,789) - ->> If(1<0, Date(2000,1,1), Time(12,0,0)) -Date(1899,12,30) - ->> If(1<0, Date(2000,1,1), DateTime(2134,5,6,12,0,0)) -Date(2134,5,6) - ->> If(1<0, DateTime(2000,1,1,1,1,1), Time(12,34,56,789)) -DateTime(1899,12,30,12,34,56,789) - ->> If(1<0, DateTime(2000,1,1,1,1,1), Date(2023,3,27)) -DateTime(2023,3,27,0,0,0,0) - -// ************** Blank value coercion ************** - -// Boolean to number ->> If(1<0, 1, If(1<0,false)) -Blank() - -// Boolean to text ->> If(1<0, "A", If(1<0,false)) -Blank() - -// Number to boolean ->> If(1<0, 1, If(1<0,1)) -Blank() - -// Number to text ->> If(1<0, "A", If(1<0,1)) -Blank() - -// Number to datetime ->> If(1<0, DateTime(2023,1,1,3,4,5), If(1<0,1)) -Blank() - -// Number to date ->> If(1<0, Date(2023,1,1), If(1<0,1)) -Blank() - -// Number to time ->> If(1<0, Time(1,2,3), If(1<0,1)) -Blank() - -// Text to booleam ->> If(1<0, false, If(1<0,"a")) -Blank() - -// Text to number ->> If(1<0, 1, If(1<0,"a")) -Blank() - -// Text to datetime ->> If(1<0, DateTime(2023,1,1,3,4,5), If(1<0,"a")) -Blank() - -// Text to date ->> If(1<0, Date(2023,1,1), If(1<0,"a")) -Blank() - -// Text to time ->> If(1<0, Time(1,2,3), If(1<0,"a")) -Blank() - -// Date to number ->> If(1<0, 1, If(1<0,Date(2000,1,1))) -Blank() - -// Date to text ->> If(1<0, "A", If(1<0,Date(2000,1,1))) -Blank() - -// Date to datetime ->> If(1<0, DateTime(2023,1,1,3,4,5), If(1<0,Date(2000,1,1))) -Blank() - -// Date to time ->> If(1<0, Time(1,2,3), If(1<0,Date(2000,1,1))) -Blank() - -// DateTime to number ->> If(1<0, 1, If(1<0,DateTime(2023,1,1,3,4,5))) -Blank() - -// DateTime to text ->> If(1<0, "A", If(1<0,DateTime(2023,1,1,3,4,5))) -Blank() - -// DateTime to date ->> If(1<0, Date(2023,1,1), If(1<0,DateTime(2023,1,1,3,4,5))) -Blank() - -// DateTime to time ->> If(1<0, Time(1,2,3), If(1<0,DateTime(2023,1,1,3,4,5))) -Blank() - -// Time to number ->> If(1<0, 1, If(1<0,Time(1,2,3))) -Blank() - -// Time to text ->> If(1<0, "A", If(1<0,Time(1,2,3))) -Blank() - -// Time to datetime ->> If(1<0, DateTime(2023,1,1,3,4,5), If(1<0,Time(1,2,3))) -Blank() - -// Time to date ->> If(1<0, Date(2023,1,1), If(1<0,Time(1,2,3))) -Blank() diff --git a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/BasicCoercion_V1CompatDisabled.txt b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/BasicCoercion_V1CompatDisabled.txt deleted file mode 100644 index 2b773a3764..0000000000 --- a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/BasicCoercion_V1CompatDisabled.txt +++ /dev/null @@ -1,25 +0,0 @@ -#SETUP: disable:PowerFxV1CompatibilityRules - ->> GUID("AAAAAAAA-BBBB-CCCC-DDDD-EEEEFFFFFFFF") & " is a GUID" -"aaaaaaaa-bbbb-cccc-dddd-eeeeffffffff is a GUID" - ->> If(1<0, GUID("AAAAAAAA-BBBB-CCCC-DDDD-EEEEFFFFFFFF"), "11111111-2222-3333-4444-555566666666") -"11111111-2222-3333-4444-555566666666" - ->> If(1<0, Time(1,2,3), Date(2000,1,1)) -DateTime(2000,1,1,0,0,0,0) - ->> If(1<0, Time(1,2,3), DateTime(2000,1,1,12,34,56,789)) -DateTime(2000,1,1,12,34,56,789) - ->> If(1<0, Date(2000,1,1), Time(12,0,0)) -DateTime(1899,12,30,12,0,0,0) - ->> If(1<0, Date(2000,1,1), DateTime(2134,5,6,12,0,0)) -DateTime(2134,5,6,12,0,0,0) - ->> If(1<0, DateTime(2000,1,1,1,1,1), Time(12,34,56,789)) -DateTime(1899,12,30,12,34,56,789) - ->> If(1<0, DateTime(2000,1,1,1,1,1), Date(2023,3,27)) -DateTime(2023,3,27,0,0,0,0) diff --git a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/Coalesce.txt b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/Coalesce.txt index a87733b7a2..23a0b5ec63 100644 --- a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/Coalesce.txt +++ b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/Coalesce.txt @@ -272,3 +272,18 @@ DateTime(2022,8,7,12,34,56,0) // This may not work in different locales >> Coalesce("",DateTime(2022,1,2,6,30,0)) "1/2/2022 6:30 AM" + +>> Coalesce(If(1<0,1), IfError(If(1<0,2),22), 3) +3 + +>> Coalesce("", Blank(), If(1<0,IfError("c","c")), IfError("d","d")) +"d" + +>> Coalesce(1, 2, 3, 4) +1 + +>> Coalesce(If(1<0,false), If(1<0,true), false, true) +false + +>> Coalesce(If(1<0,false), If(1<0,true), true) +true diff --git a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/inScalar.txt b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/inScalar.txt index ee5dbf7222..8095b13ad4 100644 --- a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/inScalar.txt +++ b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/inScalar.txt @@ -105,3 +105,27 @@ false >> "jOHN" exactin ["Jane", "John"] false + +>> "a" in Blank() +false + +>> "a" exactin Blank() +false + +>> "" in Blank() +true + +>> "" exactin Blank() +true + +>> Blank() in Blank() +true + +>> Blank() exactin Blank() +true + +>> Blank() in "hello" +true + +>> Blank() exactin "hello" +true diff --git a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/inScalar_V1Compat.txt b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/inScalar_V1Compat.txt deleted file mode 100644 index ea7b962eaf..0000000000 --- a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/inScalar_V1Compat.txt +++ /dev/null @@ -1,29 +0,0 @@ -#SETUP: PowerFxV1CompatibilityRules - -// In (Case insensitive), ExactIn (case sensitive) -// Scalar, Table forms. -// https://docs.microsoft.com/en-us/powerapps/maker/canvas-apps/functions/operators#in-and-exactin-operators - ->> "a" in Blank() -false - ->> "a" exactin Blank() -false - ->> "" in Blank() -true - ->> "" exactin Blank() -true - ->> Blank() in Blank() -true - ->> Blank() exactin Blank() -true - ->> Blank() in "hello" -true - ->> Blank() exactin "hello" -true diff --git a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/inScalar_V1CompatDisabled.txt b/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/inScalar_V1CompatDisabled.txt deleted file mode 100644 index c68c2f9ae5..0000000000 --- a/src/tests/Microsoft.PowerFx.Core.Tests.Shared/ExpressionTestCases/inScalar_V1CompatDisabled.txt +++ /dev/null @@ -1,14 +0,0 @@ -#SETUP: disable:PowerFxV1CompatibilityRules - -// In (Case insensitive), ExactIn (case sensitive) -// Scalar, Table forms. -// https://docs.microsoft.com/en-us/powerapps/maker/canvas-apps/functions/operators#in-and-exactin-operators - ->> "a" in Blank() -false - ->> "" in Blank() -true - ->> Blank() in Blank() -true diff --git a/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/InterpreterExpressionTestCases/BasicCoercion_V1CompatDisabled_Overrides.txt b/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/InterpreterExpressionTestCases/BasicCoercion_V1CompatDisabled_Overrides.txt index b0bf3a4809..9d5b830c21 100644 --- a/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/InterpreterExpressionTestCases/BasicCoercion_V1CompatDisabled_Overrides.txt +++ b/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/InterpreterExpressionTestCases/BasicCoercion_V1CompatDisabled_Overrides.txt @@ -1,10 +1,37 @@ -#OVERRIDE: BasicCoercion_V1CompatDisabled.txt +#OVERRIDE: BasicCoercion.txt #SETUP: disable:PowerFxV1CompatibilityRules // Bug in pre-V1, fixed in V1 >> GUID("AAAAAAAA-BBBB-CCCC-DDDD-EEEEFFFFFFFF") & " is a GUID" #skip +>> If(1<0, GUID("AAAAAAAA-BBBB-CCCC-DDDD-EEEEFFFFFFFF"), "11111111-2222-3333-4444-555566666666") +"11111111-2222-3333-4444-555566666666" + +// Before V1, mixing Time/Date would result in DateTime +>> If(1<0, Time(1,2,3), DateTime(2000,1,1,12,34,56,789)) +DateTime(2000,1,1,12,34,56,789) + +// Before V1, mixing Time/Date would result in DateTime +>> If(1<0, Date(2000,1,1), DateTime(2134,5,6,12,0,0)) +DateTime(2134,5,6,12,0,0,0) + +// Bug in pre-V1, fixed in V1 +>> If(1<0, DateTime(2023,1,1,3,4,5), If(1<0,Date(2000,1,1))) +#skip + +// Bug in pre-V1, fixed in V1 +>> If(1<0, Time(1,2,3), If(1<0,Date(2000,1,1))) +#skip + +// Bug in pre-V1, fixed in V1 +>> If(1<0, DateTime(2023,1,1,3,4,5), If(1<0,Time(1,2,3))) +#skip + +// Bug in pre-V1, fixed in V1 +>> If(1<0, Date(2023,1,1), If(1<0,Time(1,2,3))) +#skip + // Bug in pre-V1, fixed in V1 >> If(1<0, DateTime(2000,1,1,1,1,1), Time(12,34,56,789)) #skip diff --git a/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/InterpreterExpressionTestCases/inScalar_V1CompatDisabled_Overrides.txt b/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/InterpreterExpressionTestCases/inScalar_V1CompatDisabled_Overrides.txt index 0cf12aa529..32c7e7b10b 100644 --- a/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/InterpreterExpressionTestCases/inScalar_V1CompatDisabled_Overrides.txt +++ b/src/tests/Microsoft.PowerFx.Interpreter.Tests.Shared/InterpreterExpressionTestCases/inScalar_V1CompatDisabled_Overrides.txt @@ -1,14 +1,34 @@ -#OVERRIDE: inScalar_V1CompatDisabled.txt +#OVERRIDE: inScalar.txt #SETUP: disable:PowerFxV1CompatibilityRules // Bug in pre-V1, fixed in V1 >> "a" in Blank() #skip +// Bug in pre-V1, fixed in V1 +>> "a" exactin Blank() +#skip + // Bug in pre-V1, fixed in V1 >> "" in Blank() #skip +// Bug in pre-V1, fixed in V1 +>> "" exactin Blank() +#skip + // Bug in pre-V1, fixed in V1 >> Blank() in Blank() #skip + +// Bug in pre-V1, fixed in V1 +>> Blank() exactin Blank() +#skip + +// Bug in pre-V1, fixed in V1 +>> Blank() in "hello" +#skip + +// Bug in pre-V1, fixed in V1 +>> Blank() exactin "hello" +#skip