Project

General

Profile

test-date-format-formatting-adjustment.p

Vladimir Tsichevski, 04/02/2025 02:39 PM

Download (3.19 KB)

 
1
/*------------------------------------------------------------------------------------------------------
2
 This program tests the hypothesis that format adjustments applied during date formatting are identical
3
 to those applied in date format declarations and date format assignments in OpenEdge ABL for each
4
 possible SESSION:DATE-FORMAT setting.
5

    
6
 To achieve this, it formats a fixed date value using each of the 576 possible date format permutations
7
 (covering all combinations of "9", "99", "999", and "9999" with separators ".", "-", and "/") in two
8
 ways under the same SESSION:DATE-FORMAT setting:
9
 
10
 1. first, with the format as assigned to a variable, and
11
 2. second, with the format as adjusted for assignment.
12

    
13
 The resulting strings are written to a file to be compared for equality by extra tools.
14
 If all comparisons match, the format adjustment processes are likely equivalent. If any comparison
15
 fails, the proposition is disproven.
16
------------------------------------------------------------------------------------------------------*/
17

    
18
/* Constants for components and separators */
19
DEFINE VARIABLE vNines AS CHARACTER EXTENT 4 INITIAL ["9", "99", "999", "9999"] NO-UNDO.
20
DEFINE VARIABLE vSeparators AS CHARACTER EXTENT 3 INITIAL [".", "-", "/"] NO-UNDO.
21
DEFINE VARIABLE vSessionFormats AS CHARACTER EXTENT 6 INITIAL ["mdy", "dmy", "ymd", "myd", "dym", "ydm"] NO-UNDO.
22
DEFINE VARIABLE vFixedDate AS DATE INITIAL 1/2/3 NO-UNDO. /* Fixed test date */
23

    
24
/* Variables for iteration */
25
DEFINE VARIABLE vFirst AS INTEGER NO-UNDO.
26
DEFINE VARIABLE vSecond AS INTEGER NO-UNDO.
27
DEFINE VARIABLE vThird AS INTEGER NO-UNDO.
28
DEFINE VARIABLE vSep1 AS INTEGER NO-UNDO.
29
DEFINE VARIABLE vSep2 AS INTEGER NO-UNDO.
30
DEFINE VARIABLE vSession AS INTEGER NO-UNDO.
31
DEFINE VARIABLE vFormat AS CHARACTER NO-UNDO.
32
DEFINE VARIABLE vAssignedString AS CHARACTER NO-UNDO.
33
DEFINE VARIABLE vAdjustedString AS CHARACTER NO-UNDO.
34
DEFINE VARIABLE vMismatches AS INTEGER NO-UNDO.
35

    
36
DEFINE FRAME myFrame
37
   vFixedDate
38
   WITH NO-LABELS NO-BOX DOWN SIZE 62 BY 10.
39

    
40
DO vSession = 1 TO 6:
41
    DEFINE VARIABLE order AS CHARACTER NO-UNDO.
42
    order = vSessionFormats[vSession].
43

    
44
    OUTPUT TO VALUE( "date_format_formatting_adjusted_" + order + ".i" ).
45

    
46
    SESSION:DATE-FORMAT = order.
47
    
48
    DO vFirst = 1 TO 4:
49
        DO vSecond = 1 TO 4:
50
            DO vThird = 1 TO 4:
51
                DO vSep1 = 1 TO 3:
52
                    DO vSep2 = 1 TO 3:
53
                        DO WITH FRAME myFrame:
54
                            /* Generate format permutation */
55
                            vFormat = vNines[vFirst] + vSeparators[vSep1] +
56
                                      vNines[vSecond] + vSeparators[vSep2] +
57
                                      vNines[vThird].
58
                            vFixedDate:FORMAT = vFormat.
59
                            DEFINE VARIABLE asString AS CHARACTER NO-UNDO.
60
                            asString = STRING(1/2/3, vFormat) NO-ERROR.
61
                            IF NOT ERROR-STATUS:ERROR THEN 
62
                                DISPLAY /*vFormat NO-LABELS*/ vFixedDate NO-LABELS "" asString NO-LABELS FORMAT "X(30)" NO-ERROR.
63
                        END.
64
                    END.
65
                END.
66
            END.
67
        END.
68
    END.
69
    OUTPUT CLOSE.
70
END.