Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
92e97c2
Initial commit with DataCloudHooks implementation, FormulaDataCloudXM…
adatta0728 Mar 3, 2026
da1db6b
Created separate maven project for DataCloud Hyper DB test harness to…
adatta0728 Apr 1, 2026
9ce8032
Remove DataCloud goldfiles fro main formula-engine-impl project, gold…
adatta0728 Apr 1, 2026
fd6346c
Iterate on tests in DataCloudTestCaseFilter to reduce testCases that …
adatta0728 Apr 21, 2026
f845075
Update FormulaDataCloudHooks.sqlToCharTime() to identify and update e…
adatta0728 Apr 21, 2026
7fde5f8
Updated expected values in Data360 Hyper FormulaTestV2.xml to account…
adatta0728 Apr 22, 2026
9791a8e
Update expected output values for testCases with Division/math precis…
adatta0728 Apr 22, 2026
3f8417e
Update expected output values to handle CEIL/FLOOR to produce differe…
adatta0728 Apr 23, 2026
8608acb
Update expected output value and remove testDATEVALUEWithString from …
adatta0728 Apr 25, 2026
a997aa6
Update expected output values to handle Timestamp subtraction precisi…
adatta0728 Apr 26, 2026
e2ee677
Update expected output values for testcases with match function preci…
adatta0728 Apr 26, 2026
e1eb85e
Update expected output values in formulaTestV2.xml to account for Err…
adatta0728 Apr 28, 2026
38ef9c3
Resolve Duration formatting — numeric field overflow for very large d…
adatta0728 Apr 29, 2026
2c4271d
Resolve floating-point geography precision differences
adatta0728 Apr 30, 2026
35e1945
Handle Currency formatting — Hyper does not support TO_CHAR with nume…
adatta0728 Apr 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
105 changes: 105 additions & 0 deletions datacloud-test/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>formula-engine-datacloud-test</artifactId>
<name>Formula Engine DataCloud Test</name>
<description>
Test of the formula engine when using Salesforce DataCloud Hyper DB.
</description>

<parent>
<groupId>com.salesforce.formula</groupId>
<artifactId>formula-engine</artifactId>
<version>0.9.11-SNAPSHOT</version>
</parent>

<properties>
<maven.deploy.skip>true</maven.deploy.skip>
</properties>

<dependencies>
<dependency>
<groupId>com.salesforce.formula</groupId>
<artifactId>formula-engine-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.salesforce.formula</groupId>
<artifactId>formula-engine-impl</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.salesforce.formula</groupId>
<artifactId>formula-engine-test-utils</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Get the test classes/resources for validation -->
<dependency>
<groupId>com.salesforce.formula</groupId>
<artifactId>formula-engine-impl</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
<type>test-jar</type>
<scope>test</scope>
</dependency>

<!-- Json Function Dependencies -->
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>

<!-- DataCloud JDBC Driver -->
<dependency>
<groupId>com.salesforce.datacloud</groupId>
<artifactId>jdbc</artifactId>
<version>0.41.0</version>
<classifier>shaded</classifier>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<!-- Required for Class.forName() to find the DataCloud JDBC driver in the shaded jar -->
<useSystemClassLoader>true</useSystemClassLoader>
<useManifestOnlyJar>false</useManifestOnlyJar>
<excludes>
<!-- DataCloudFormulaTestCase is not a standalone test; it is instantiated
by FormulaDataCloudXMLTests via createTestCase(). Exclude it so Surefire
does not try to run it directly (it lacks a no-arg/String constructor). -->
<exclude>**/DataCloudFormulaTestCase.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<testCase name="testAbsCurr">
<JsOutput highPrec="true" nullAsNull="false">$F.nvl(context.record.customnumber1__c,new $F.Decimal('0')).abs()</JsOutput>
<JsOutput highPrec="false" nullAsNull="false">Math.abs($F.nvl(context.record.customnumber1__c,0))</JsOutput>
<JsOutput highPrec="false" nullAsNull="true">(context.record.customnumber1__c!=null)?(Math.abs(context.record.customnumber1__c)):null</JsOutput>
<JsOutput highPrec="true" nullAsNull="true">(context.record.customnumber1__c!=null)?(context.record.customnumber1__c.abs()):null</JsOutput>
<SqlOutput nullAsNull="false">
<Sql>ABS(COALESCE($!s0s!$.customnumber1__c, 0))</Sql>
<Guard>null</Guard>
</SqlOutput>
<SqlOutput nullAsNull="true">
<Sql>ABS($!s0s!$.customnumber1__c)</Sql>
<Guard>null</Guard>
</SqlOutput>
</testCase>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<testCase name="testAbsSwapTypes">
<JsOutput highPrec="true" nullAsNull="false">$F.nvl(context.record.customnumber1__c,new $F.Decimal('0')).abs()</JsOutput>
<JsOutput highPrec="false" nullAsNull="false">Math.abs($F.nvl(context.record.customnumber1__c,0))</JsOutput>
<JsOutput highPrec="false" nullAsNull="true">(context.record.customnumber1__c!=null)?(Math.abs(context.record.customnumber1__c)):null</JsOutput>
<JsOutput highPrec="true" nullAsNull="true">(context.record.customnumber1__c!=null)?(context.record.customnumber1__c.abs()):null</JsOutput>
<SqlOutput nullAsNull="false">
<Sql>ABS(COALESCE($!s0s!$.customnumber1__c, 0))</Sql>
<Guard>null</Guard>
</SqlOutput>
<SqlOutput nullAsNull="true">
<Sql>ABS($!s0s!$.customnumber1__c)</Sql>
<Guard>null</Guard>
</SqlOutput>
</testCase>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<testCase name="testAbsUsesAbs">
<JsOutput highPrec="true" nullAsNull="false">$F.nvl(context.record.customnumber1__c,new $F.Decimal('0')).abs().abs()</JsOutput>
<JsOutput highPrec="false" nullAsNull="false">Math.abs(Math.abs($F.nvl(context.record.customnumber1__c,0)))</JsOutput>
<JsOutput highPrec="false" nullAsNull="true">(context.record.customnumber1__c!=null)?(Math.abs(Math.abs(context.record.customnumber1__c))):null</JsOutput>
<JsOutput highPrec="true" nullAsNull="true">(context.record.customnumber1__c!=null)?(context.record.customnumber1__c.abs().abs()):null</JsOutput>
<SqlOutput nullAsNull="false">
<Sql>ABS(ABS(COALESCE($!s0s!$.customnumber1__c, 0)))</Sql>
<Guard>null</Guard>
</SqlOutput>
<SqlOutput nullAsNull="true">
<Sql>ABS(ABS($!s0s!$.customnumber1__c))</Sql>
<Guard>null</Guard>
</SqlOutput>
</testCase>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<testCase name="testAbsUsesCase">
<JsOutput highPrec="true" nullAsNull="false">((($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0))).getTime())))?($F.nvl(context.record.customnumber1__c,new $F.Decimal('0'))):(($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0))).getTime())))?($F.nvl(context.record.customnumber2__c,new $F.Decimal('0'))):$F.nvl(context.record.customnumber3__c,new $F.Decimal('0'))).abs()</JsOutput>
<JsOutput highPrec="false" nullAsNull="false">Math.abs(((($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0))).getTime())))?($F.nvl(context.record.customnumber1__c,0)):(($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0))).getTime())))?($F.nvl(context.record.customnumber2__c,0)):$F.nvl(context.record.customnumber3__c,0)))</JsOutput>
<JsOutput highPrec="false" nullAsNull="true">(((($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0))).getTime())))?(context.record.customnumber1__c):(($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0))).getTime())))?(context.record.customnumber2__c):context.record.customnumber3__c)!=null)?(Math.abs(((($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0))).getTime())))?(context.record.customnumber1__c):(($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0))).getTime())))?(context.record.customnumber2__c):context.record.customnumber3__c))):null</JsOutput>
<JsOutput highPrec="true" nullAsNull="true">(((($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0))).getTime())))?(context.record.customnumber1__c):(($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0))).getTime())))?(context.record.customnumber2__c):context.record.customnumber3__c)!=null)?(((($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate2__c])?null:new Date(new Date(context.record.customdate2__c).setUTCHours(0,0,0,0))).getTime())))?(context.record.customnumber1__c):(($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))&amp;&amp;(($F.anl([($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate1__c])?null:new Date(new Date(context.record.customdate1__c).setUTCHours(0,0,0,0))).getTime())==($F.anl([($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0)))])?null:($F.anl([context.record.customdate3__c])?null:new Date(new Date(context.record.customdate3__c).setUTCHours(0,0,0,0))).getTime())))?(context.record.customnumber2__c):context.record.customnumber3__c).abs()):null</JsOutput>
<SqlOutput nullAsNull="false">
<Sql>ABS(CASE $!s0s!$.customdate1__c WHEN $!s0s!$.customdate2__c THEN COALESCE($!s0s!$.customnumber1__c, 0) WHEN $!s0s!$.customdate3__c THEN COALESCE($!s0s!$.customnumber2__c, 0) ELSE COALESCE($!s0s!$.customnumber3__c, 0) END)</Sql>
<Guard>null</Guard>
</SqlOutput>
<SqlOutput nullAsNull="true">
<Sql>ABS(CASE $!s0s!$.customdate1__c WHEN $!s0s!$.customdate2__c THEN $!s0s!$.customnumber1__c WHEN $!s0s!$.customdate3__c THEN $!s0s!$.customnumber2__c ELSE $!s0s!$.customnumber3__c END)</Sql>
<Guard>null</Guard>
</SqlOutput>
</testCase>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<testCase name="testAbsUsesCeiling">
<JsOutput highPrec="true" nullAsNull="false">($F.nvl(context.record.customnumber1__c,new $F.Decimal('0')).isPos()?$F.nvl(context.record.customnumber1__c,new $F.Decimal('0')).toDP(18).ceil():$F.nvl(context.record.customnumber1__c,new $F.Decimal('0')).toDP(18).floor()).abs()</JsOutput>
<JsOutput highPrec="false" nullAsNull="false">Math.abs((($F.nvl(context.record.customnumber1__c,0))&gt;=0?Math.ceil($F.nvl(context.record.customnumber1__c,0)):Math.floor($F.nvl(context.record.customnumber1__c,0))))</JsOutput>
<JsOutput highPrec="false" nullAsNull="true">(context.record.customnumber1__c!=null)?(Math.abs(((context.record.customnumber1__c)&gt;=0?Math.ceil(context.record.customnumber1__c):Math.floor(context.record.customnumber1__c)))):null</JsOutput>
<JsOutput highPrec="true" nullAsNull="true">(context.record.customnumber1__c!=null)?((context.record.customnumber1__c.isPos()?context.record.customnumber1__c.toDP(18).ceil():context.record.customnumber1__c.toDP(18).floor()).abs()):null</JsOutput>
<SqlOutput nullAsNull="false">
<Sql>ABS(CASE WHEN COALESCE($!s0s!$.customnumber1__c, 0)&gt;=0 THEN CEIL(ROUND(COALESCE($!s0s!$.customnumber1__c, 0)::numeric(38,18),18)) ELSE FLOOR(ROUND(COALESCE($!s0s!$.customnumber1__c, 0)::numeric(38,18),18)) END)</Sql>
<Guard>null</Guard>
</SqlOutput>
<SqlOutput nullAsNull="true">
<Sql>ABS(CASE WHEN $!s0s!$.customnumber1__c&gt;=0 THEN CEIL(ROUND($!s0s!$.customnumber1__c::numeric(38,18),18)) ELSE FLOOR(ROUND($!s0s!$.customnumber1__c::numeric(38,18),18)) END)</Sql>
<Guard>null</Guard>
</SqlOutput>
</testCase>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<testCase name="testAbsUsesFloor">
<JsOutput highPrec="true" nullAsNull="false">($F.nvl(context.record.customnumber1__c,new $F.Decimal('0')).isPos()?$F.nvl(context.record.customnumber1__c,new $F.Decimal('0')).toDP(18).floor():$F.nvl(context.record.customnumber1__c,new $F.Decimal('0')).toDP(18).ceil()).abs()</JsOutput>
<JsOutput highPrec="false" nullAsNull="false">Math.abs((($F.nvl(context.record.customnumber1__c,0))&gt;=0?Math.floor($F.nvl(context.record.customnumber1__c,0)):Math.ceil($F.nvl(context.record.customnumber1__c,0))))</JsOutput>
<JsOutput highPrec="false" nullAsNull="true">(context.record.customnumber1__c!=null)?(Math.abs(((context.record.customnumber1__c)&gt;=0?Math.floor(context.record.customnumber1__c):Math.ceil(context.record.customnumber1__c)))):null</JsOutput>
<JsOutput highPrec="true" nullAsNull="true">(context.record.customnumber1__c!=null)?((context.record.customnumber1__c.isPos()?context.record.customnumber1__c.toDP(18).floor():context.record.customnumber1__c.toDP(18).ceil()).abs()):null</JsOutput>
<SqlOutput nullAsNull="false">
<Sql>ABS(CASE WHEN COALESCE($!s0s!$.customnumber1__c, 0)&gt;=0 THEN FLOOR(ROUND(COALESCE($!s0s!$.customnumber1__c, 0)::numeric(38,18),18)) ELSE CEIL(ROUND(COALESCE($!s0s!$.customnumber1__c, 0)::numeric(38,18),18)) END)</Sql>
<Guard>null</Guard>
</SqlOutput>
<SqlOutput nullAsNull="true">
<Sql>ABS(CASE WHEN $!s0s!$.customnumber1__c&gt;=0 THEN FLOOR(ROUND($!s0s!$.customnumber1__c::numeric(38,18),18)) ELSE CEIL(ROUND($!s0s!$.customnumber1__c::numeric(38,18),18)) END)</Sql>
<Guard>null</Guard>
</SqlOutput>
</testCase>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<testCase name="testAbsUsesIf">
<JsOutput highPrec="true" nullAsNull="false">$F.nvl(context.record.customnumber1__c,new $F.Decimal('0')).abs()</JsOutput>
<JsOutput highPrec="false" nullAsNull="false">Math.abs($F.nvl(context.record.customnumber1__c,0))</JsOutput>
<JsOutput highPrec="false" nullAsNull="true">(context.record.customnumber1__c!=null)?(Math.abs(context.record.customnumber1__c)):null</JsOutput>
<JsOutput highPrec="true" nullAsNull="true">(context.record.customnumber1__c!=null)?(context.record.customnumber1__c.abs()):null</JsOutput>
<SqlOutput nullAsNull="false">
<Sql>ABS(COALESCE($!s0s!$.customnumber1__c, 0))</Sql>
<Guard>null</Guard>
</SqlOutput>
<SqlOutput nullAsNull="true">
<Sql>ABS($!s0s!$.customnumber1__c)</Sql>
<Guard>null</Guard>
</SqlOutput>
</testCase>
Loading