On Thu, 3 Oct 2024 00:47:23 GMT, Joe Darcy <da...@openjdk.org> wrote:

> My initial question is what additional regression test cases should be added 
> to probe the new code.

@rgiulietti @jddarcy This should be the path tree for the test cases of the 
algorithm, whether `signum == 1`:

If `mc.roundingMode == RoundingMode.UNNECESSARY || mc.precision == 0` (line 
2165):
- If the input is an even power of 10:
    - [ ] `result.scale < preferredScale` (line 2174);
    - [ ] `result.scale > preferredScale` (line 2174).
- Otherwise, for both cases `result.scale > preferredScale` (line 2265) and 
`result.scale < preferredScale` (line 2267):
    - for both cases `(strippedScale & 1) == 0` (line 2188) and `(strippedScale 
& 1) != 0` (line 2190):
        - [ ] `sqrtRem[1].signum != 0` (line 2200);
        - [ ] `sqrtRem[1].signum == 0 && (mc.precision != 0 && 
result.precision() > mc.precision)` (line 2200);
        - [ ] `sqrtRem[1].signum == 0 && mc.precision == 0` (line 2200);
        - [ ]  `sqrtRem[1].signum == 0 && (mc.precision != 0 && 
result.precision() <= mc.precision)` (line 2200).

Otherwise (line 2202):
- [ ] `workingScale != (int) workingScale` (line 2217);
- for both cases `result.scale > preferredScale` (line 2265) and `result.scale 
< preferredScale` (line 2267):
    - [ ] `mc.roundingMode == RoundingMode.DOWN || mc.roundingMode == 
RoundingMode.FLOOR` (line 2225);
    - otherwise (line 2227):
        - if `halfWay` (line 2232):
            - [ ] `digit > 5` (line 2239);
            - otherwise:
                - if `digit == 5` (line 2241):
                    - [ ] `mc.roundingMode == RoundingMode.HALF_UP` (line 2242);
                    - otherwise:
                        - [ ] `mc.roundingMode == RoundingMode.HALF_EVEN && 
sqrt.testBit(0)` (line 2243);
                        - for both cases `mc.roundingMode != 
RoundingMode.HALF_EVEN` and `!sqrt.testBit(0)`:
                            - [ ] `sqrtRem[1].signum != 0` (line 2245);
                            - [ ] `sqrtRem[1].signum == 0 && 
working.compareTo(new BigDecimal(workingInt)) != 0` (line 2245);
                            - [ ] `sqrtRem[1].signum == 0 && 
working.compareTo(new BigDecimal(workingInt)) == 0` (line 2245);
                - [ ] `digit < 5` (line 2241).
        - if `!halfWay` (line 2249):
            - [ ] `sqrtRem[1].signum != 0` (line 2251);
            - [ ] `sqrtRem[1].signum == 0 && working.compareTo(new 
BigDecimal(workingInt)) != 0` (line 2251);
            - [ ] `sqrtRem[1].signum == 0 && working.compareTo(new 
BigDecimal(workingInt)) == 0` (line 2251).

-------------

PR Comment: https://git.openjdk.org/jdk/pull/21301#issuecomment-2427077593

Reply via email to