DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦aacce327e⟧ Ada Source

    Length: 35840 (0x8c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, generic, package body Cvt_Test_Utilities, package body Dummy_Converters, package body Raw_Data_Tests, package body U_Char_Tests, package body X_String_Tests, seg_005511

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 

E3 Source Code



with Test_Io;

with Xlbt_Arithmetic;  
with Xlbt_String;
--

with Xlbmt_Network_Types;

package body Cvt_Test_Utilities is
------------------------------------------------------------------------------
-- Cvt_Test_Utilities - test generics and support routines useful for
-- testing data conversions.
------------------------------------------------------------------------------
-- 09/05/90 DRK     | Created.
------------------------------------------------------------------------------

    generic  
        type Original is private;  
        Original_Name : String;  
        type Converted_Element is (<>);  
        type Converted_Index is range <>;  
        type Converted is array (Converted_Index range <>) of Converted_Element;  
        with procedure To_Conv   (Conv : out Converted; Orig : Original);  
        with procedure From_Conv (Orig : out Original; Conv : Converted);  
    procedure Base_Tester (Image : String; Orig : Original; Conv : Converted);

    procedure Base_Tester (Image : String; Orig : Original; Conv : Converted) is
        ------------------------------------------------------------------
        -- Image        - Specifies a text representation for Orig.
        -- Orig         - Specifies the original value to be converted.
        -- Conv         - Specifies the equivalent converted value.
        --
        -- Called to exercise various conversions of private values.
        ------------------------------------------------------------------

        Normal_Data     : Converted (1 .. Conv'Length)     := Conv;  
        Zero_Index_Data : Converted (0 .. Conv'Length - 1) := Conv;  
        Two_Index_Data  : Converted (2 .. Conv'Length + 1) := Conv;  
        Oversized_Data  : Converted (1 .. Conv'Length + 1) :=  
           Conv & (1 => Converted_Element'Val (0));  
        Undersized_Data : Converted (1 .. Conv'Length - 1) :=  
           Conv (Conv'First .. Conv'Last - 1);
        --       -- Constants used in various test cases.

        type Anomalies is (None, Zero_Index, Two_Index, Oversized, Undersized);
        --
        -- The type of problem we expect to encounter in a test.
        --     None       - no problems should be detected.
        --     Zero_Index - the Conv array has starting index = 0.
        --     Two_Index  - the Conv array has starting index = 2.
        --     Oversized  - the Conv array is too large.
        --     Undersized - the Conv array is too small.

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

        Failed : Boolean := False;
        --
        -- Has this test failed?

        procedure Check (Condition       : Boolean;  
                         Failure_Message : String;  
                         Success_Message : String := ".") is
            -- Do a simple check for a test.
        begin  
            if not Condition then  
                Test_Io.Put_Line (Failure_Message);  
                Failed := True;  
            else  
                Test_Io.Put (Success_Message);  
            end if;  
        end Check;

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

        procedure Test_To_Conv (Value    : Original;  
                                Expected : Converted;  
                                Anomaly  : Anomalies := None) is
            --------------------------------------------------------------
            -- Value    - Specifies the value to be converted.
            -- Expected - Specifies the expected result value (and
            --            the bounds of the result array being used).
            -- Anomaly  - Specifies the expected final result.
            --
            -- Try a single To_Conv conversion and verify its result.
            --------------------------------------------------------------

            Conv : Converted (Expected'Range);  
            Bool : Boolean;  
        begin
            -- Try the conversion.
            To_Conv (Conv, Value);

            -- Check our results.
            case Anomaly is  
                when None =>  
                    Bool := Conv = Expected;  
                    Check (Bool, "<To_Conv failed>");  
                when Zero_Index =>  
                    Bool := Conv = Expected;  
                    Check (Bool, "<To_Conv failed on a 0-based slice>");  
                when Two_Index =>  
                    Bool := Conv = Expected;  
                    Check (Bool, "<To_Conv failed on a 2-based slice>");  
                when Oversized =>  
                    Check (False, "<To_Conv accepted an oversized array>");  
                when Undersized =>  
                    Check (False, "<To_Conv accepted an undersized array>");  
            end case;  
        exception  
            when Constraint_Error =>
                -- Oversized and Undersized anomalies should get here.
                case Anomaly is  
                    when None =>  
                        Check (False, "<To_Conv raised Constraint_Error>");  
                    when Zero_Index =>  
                        Check (False,  
                               "<To_Conv couldn't handle a 0-based slice>");  
                    when Two_Index =>  
                        Check (False,  
                               "<To_Conv couldn't handle a 2-based slice>");  
                    when Oversized | Undersized =>  
                        Check (True, ".");  
                end case;  
            when Dummy_Converters.Unimplemented =>
                -- Ignore this test.
                null;  
            when others =>
                -- Nobody should get here.
                Check (False, "<To_Conv croaked: expected " &  
                                 Anomalies'Image (Anomaly) & ">");  
        end Test_To_Conv;

        procedure Test_From_Conv (Value    : Converted;  
                                  Expected : Original;  
                                  Anomaly  : Anomalies := None) is
            --------------------------------------------------------------
            -- Value    - Specifies the value to be converted.
            -- Expected - Specifies the expected result value.
            -- Anomaly  - Specifies the expected final result.
            --
            -- Try a single From_Conv conversion and verify its result.
            --------------------------------------------------------------

            Conv : Original;  
            Bool : Boolean;  
        begin
            -- Try the conversion.
            From_Conv (Conv, Value);

            -- Check our results.
            case Anomaly is  
                when None =>  
                    Bool := Conv = Expected;  
                    Check (Bool, "<From_Conv failed>");  
                when Zero_Index =>  
                    Bool := Conv = Expected;  
                    Check (Bool, "<From_Conv failed on a 0-based slice>");  
                when Two_Index =>  
                    Bool := Conv = Expected;  
                    Check (Bool, "<From_Conv failed on a 2-based slice>");  
                when Oversized =>  
                    Check (False, "<From_Conv accepted an oversized array>");  
                when Undersized =>  
                    Check (False, "<From_Conv accepted an undersized array>");  
            end case;  
        exception  
            when Constraint_Error =>
                -- Oversized and Undersized anomalies should get here.
                case Anomaly is  
                    when None =>  
                        Check (False, "<From_Conv raised Constraint_Error>");  
                    when Zero_Index =>  
                        Check (False,  
                               "<From_Conv couldn't handle a 0-based slice>");  
                    when Two_Index =>  
                        Check (False,  
                               "<From_Conv couldn't handle a 2-based slice>");  
                    when Oversized | Undersized =>  
                        Check (True, ".");  
                end case;  
            when Dummy_Converters.Unimplemented =>
                -- Ignore this test.
                null;  
            when others =>
                -- Nobody should get here.
                Check (False, "<From_Conv croaked: expected " &  
                                 Anomalies'Image (Anomaly) & ">");  
        end Test_From_Conv;

    begin
        -- Start a test.
        Test_Io.Put (Original_Name & "'(" & Image & ") ");

        -- Try the normal conversions.
        Test_To_Conv (Orig, Normal_Data);  
        Test_From_Conv (Normal_Data, Orig);

        -- Try some conversions with non-standard array bounds.
        Test_To_Conv (Orig, Zero_Index_Data, Zero_Index);  
        Test_From_Conv (Zero_Index_Data, Orig, Zero_Index);  
        Test_To_Conv (Orig, Two_Index_Data, Two_Index);  
        Test_From_Conv (Two_Index_Data, Orig, Two_Index);

        -- Try some conversions with oversized arrays.
        Test_To_Conv (Orig, Oversized_Data, Oversized);  
        Test_From_Conv (Oversized_Data, Orig, Oversized);

        -- Try some conversions with undersized arrays.
        if Conv'Length > 0 then  
            Test_To_Conv (Orig, Undersized_Data, Undersized);  
            Test_From_Conv (Undersized_Data, Orig, Undersized);  
        end if;

        -- All done.
        Test_Io.Put_Line (" done.");  
        if Failed then  
            Test_Io.Put_Error ("Converter tests for " &  
                               Original_Name & " failed.");  
        end if;  
    exception  
        when others =>  
            Check (False, "<unexpected exception>");  
            Test_Io.Put_Line (" aborted.");  
            Test_Io.Put_Exception ("Converter tests for " & Original_Name &  
                                   " raised an unexpected exception.");  
    end Base_Tester;

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

    package body Raw_Data_Tests is

        ------------------------------------------------------------------
        -- The test generics in this section will perform a series of
        -- standard tests with a given pair of converter subprograms.  The
        -- test generics below require both To_Raw and From_Raw converters.
        -- If a particular conversion is not used by the protocol, the
        -- standard converter packages will not supply a converter
        -- subprogram.  Instantiate an appropriate Dummy_Generic_Converter
        -- to handle these cases.  The test generics below all accept and
        -- handle the Dummy_Generic_Converters.Unimplemented exception.
        --
        -- Logging information is produced via Test_Io calls.
        ------------------------------------------------------------------


--      generic
--          type Original is private;
--          Original_Name : String;
--          with procedure To_Raw   (Raw  : out X_Raw_Data_Array;
--                                   Orig :     Original);
--          with procedure From_Raw (Orig : out Original;
--                                   Raw  :     X_Raw_Data_Array);
        procedure Tester (Image : String;  
                          Orig  : Original;  
                          Raw   : Xlbmt_Network_Types.X_Raw_Data_Array) is
            --------------------------------------------------------------
            -- Image        - Specifies a text representation for Orig.
            -- Orig         - Specifies the original value to be converted.
            -- Raw          - Specifies the equivalent raw value.
            --
            -- Called to exercise various conversions of private values.
            --------------------------------------------------------------

            procedure Test is new Base_Tester  
                                     (Original, Original_Name,  
                                      Xlbmt_Network_Types.X_Raw_Data,  
                                      Xlbmt_Network_Types.X_Raw_Data_Index,  
                                      Xlbmt_Network_Types.X_Raw_Data_Array,  
                                      To_Raw, From_Raw);  
        begin  
            Test (Image, Orig, Raw);  
        end Tester;

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

--      generic
--          type Original       is private;
--          type Index          is (<>);
--          type Original_Array is array (Index range <>) of Original;
--          Original_Name : String;
--          with procedure To_Raw   (Raw  : out X_Raw_Data_Array;
--                                   Orig :     Original_Array);
--          with procedure From_Raw (Orig : out Original_Array;
--                                   Raw  :     X_Raw_Data_Array);
        procedure Tester_1d (Image : String;  
                             Orig  : Original_Array;  
                             Raw   : Xlbmt_Network_Types.X_Raw_Data_Array) is
            --------------------------------------------------------------
            -- Image        - Specifies a text representation for Orig.
            -- Orig         - Specifies the original value to be converted.
            -- Raw          - Specifies the equivalent raw value.
            --
            -- Called to exercise various conversions of array values.
            --------------------------------------------------------------

            subtype Constrained_Array is Original_Array (Orig'Range);  
            procedure Constrained_Test is  
               new Cvt_Test_Utilities.Raw_Data_Tests.Tester  
                      (Constrained_Array, Original_Name, To_Raw, From_Raw);  
        begin  
            Constrained_Test (Image, Orig, Raw);  
        end Tester_1d;

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

--      generic
--          type Original       is private;
--          type Index1         is (<>);
--          type Index2         is (<>);
--          type Original_Array is array (Index1 range <>,
--                                        Index2 range <>) of Original;
--          Original_Name : String;
--          with procedure To_Raw   (Raw  : out X_Raw_Data_Array;
--                                   Orig :     Original_Array);
--          with procedure From_Raw (Orig : out Original_Array;
--                                   Raw  :     X_Raw_Data_Array);
        procedure Tester_2d (Image : String;  
                             Orig  : Original_Array;  
                             Raw   : Xlbmt_Network_Types.X_Raw_Data_Array) is
            --------------------------------------------------------------
            -- Image        - Specifies a text representation for Orig.
            -- Orig         - Specifies the original value to be converted.
            -- Raw          - Specifies the equivalent raw value.
            --
            -- Called to exercise various conversions of 2d array values.
            --------------------------------------------------------------

            subtype Constrained_Array is Original_Array  
                                            (Orig'Range (1), Orig'Range (2));  
            procedure Constrained_Test is  
               new Cvt_Test_Utilities.Raw_Data_Tests.Tester  
                      (Constrained_Array, Original_Name, To_Raw, From_Raw);  
        begin  
            Constrained_Test (Image, Orig, Raw);  
        end Tester_2d;

    end Raw_Data_Tests;

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

    package body U_Char_Tests is

        ------------------------------------------------------------------
        -- The test generics in this section will perform a series of
        -- standard tests with a given pair of converter subprograms.  The
        -- test generics below require both To_Uca and From_Uca converters.
        -- If a particular conversion is not used by the protocol, the
        -- standard converter packages will not supply a converter
        -- subprogram.  Instantiate an appropriate Dummy_Generic_Converter
        -- to handle these cases.  The test generics below all accept and
        -- handle the Dummy_Generic_Converters.Unimplemented exception.
        --
        -- Logging information is produced via Test_Io calls.
        ------------------------------------------------------------------


--      generic
--          type Original is private;
--          Original_Name : String;
--          with procedure To_Uca   (Uca  : out U_Char_Array;
--                                   Orig :     Original);
--          with procedure From_Uca (Orig : out Original;
--                                   Uca  :     U_Char_Array);
        procedure Tester (Image : String;  
                          Orig  : Original;  
                          Uca   : Xlbt_Arithmetic.U_Char_Array) is
            --------------------------------------------------------------
            -- Image        - Specifies a text representation for Orig.
            -- Orig         - Specifies the original value to be converted.
            -- Uca          - Specifies the equivalent converted value.
            --
            -- Called to exercise various conversions of private values.
            --------------------------------------------------------------

            procedure Test is new Base_Tester (Original, Original_Name,  
                                               Xlbt_Arithmetic.U_Char,  
                                               Xlbt_Arithmetic.S_Natural,  
                                               Xlbt_Arithmetic.U_Char_Array,  
                                               To_Uca, From_Uca);  
        begin  
            Test (Image, Orig, Uca);  
        end Tester;

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

--      generic
--          type Original       is private;
--          type Index          is (<>);
--          type Original_Array is array (Index range <>) of Original;
--          Original_Name : String;
--          with procedure To_Uca   (Uca  : out U_Char_Array;
--                                   Orig :     Original_Array);
--          with procedure From_Uca (Orig : out Original_Array;
--                                   Uca  :     U_Char_Array);
        procedure Tester_1d (Image : String;  
                             Orig  : Original_Array;  
                             Uca   : Xlbt_Arithmetic.U_Char_Array) is
            --------------------------------------------------------------
            -- Image        - Specifies a text representation for Orig.
            -- Orig         - Specifies the original value to be converted.
            -- Uca          - Specifies the equivalent converted value.
            --
            -- Called to exercise various conversions of array values.
            --------------------------------------------------------------

            subtype Constrained_Array is Original_Array (Orig'Range);  
            procedure Constrained_Test is  
               new Cvt_Test_Utilities.U_Char_Tests.Tester  
                      (Constrained_Array, Original_Name, To_Uca, From_Uca);  
        begin  
            Constrained_Test (Image, Orig, Uca);  
        end Tester_1d;

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

--      generic
--          type Original       is private;
--          type Index1         is (<>);
--          type Index2         is (<>);
--          type Original_Array is array (Index1 range <>,
--                                        Index2 range <>) of Original;
--          Original_Name : String;
--          with procedure To_Uca   (Uca  : out U_Char_Array;
--                                   Orig :     Original_Array);
--          with procedure From_Uca (Orig : out Original_Array;
--                                   Uca  :     U_Char_Array);
        procedure Tester_2d (Image : String;  
                             Orig  : Original_Array;  
                             Uca   : Xlbt_Arithmetic.U_Char_Array) is
            --------------------------------------------------------------
            -- Image        - Specifies a text representation for Orig.
            -- Orig         - Specifies the original value to be converted.
            -- Uca          - Specifies the equivalent converted value.
            --
            -- Called to exercise various conversions of 2d array values.
            --------------------------------------------------------------

            subtype Constrained_Array is Original_Array  
                                            (Orig'Range (1), Orig'Range (2));  
            procedure Constrained_Test is  
               new Cvt_Test_Utilities.U_Char_Tests.Tester  
                      (Constrained_Array, Original_Name, To_Uca, From_Uca);  
        begin  
            Constrained_Test (Image, Orig, Uca);  
        end Tester_2d;

    end U_Char_Tests;

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

    package body X_String_Tests is

        ------------------------------------------------------------------
        -- The test generics in this section will perform a series of
        -- standard tests with a given pair of converter subprograms.  The
        -- test generics below require both To_Raw and From_Raw converters.
        -- If a particular conversion is not used by the protocol, the
        -- standard converter packages will not supply a converter
        -- subprogram.  Instantiate an appropriate Dummy_Generic_Converter
        -- to handle these cases.  The test generics below all accept and
        -- handle the Dummy_Generic_Converters.Unimplemented exception.
        --
        -- Logging information is produced via Test_Io calls.
        ------------------------------------------------------------------


--      generic
--          type Original is private;
--          Original_Name : String;
--          with procedure To_Str8   (Str8 : out X_String;
--                                    Orig :     Original);
--          with procedure From_Str8 (Orig : out Original;
--                                    Str8 :     X_String);
        procedure Tester (Image : String;  
                          Orig  : Original;  
                          Str8  : Xlbt_String.X_String) is
            --------------------------------------------------------------
            -- Image        - Specifies a text representation for Orig.
            -- Orig         - Specifies the original value to be converted.
            -- Str8         - Specifies the equivalent Str8 value.
            --
            -- Called to exercise various conversions of private values.
            --------------------------------------------------------------

            procedure Test is new Base_Tester  
                                     (Original, Original_Name,  
                                      Xlbt_String.X_Character,  
                                      Xlbt_Arithmetic.S_Natural,  
                                      Xlbt_String.X_String, To_Str8, From_Str8);  
        begin  
            Test (Image, Orig, Str8);  
        end Tester;

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

--      generic
--          type Original       is private;
--          type Index          is (<>);
--          type Original_Array is array (Index range <>) of Original;
--          Original_Name : String;
--          with procedure To_Str8   (Str8 : out X_String;
--                                    Orig :     Original_Array);
--          with procedure From_Str8 (Orig : out Original_Array;
--                                    Str8 :     X_String);
        procedure Tester_1d (Image : String;  
                             Orig  : Original_Array;  
                             Str8  : Xlbt_String.X_String) is
            --------------------------------------------------------------
            -- Image        - Specifies a text representation for Orig.
            -- Orig         - Specifies the original value to be converted.
            -- Str8         - Specifies the equivalent raw value.
            --
            -- Called to exercise various conversions of array values.
            --------------------------------------------------------------

            subtype Constrained_Array is Original_Array (Orig'Range);  
            procedure Constrained_Test is  
               new Cvt_Test_Utilities.X_String_Tests.Tester  
                      (Constrained_Array, Original_Name, To_Str8, From_Str8);  
        begin  
            Constrained_Test (Image, Orig, Str8);  
        end Tester_1d;

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

--      generic
--          type Original       is private;
--          type Index1         is (<>);
--          type Index2         is (<>);
--          type Original_Array is array (Index1 range <>,
--                                        Index2 range <>) of Original;
--          Original_Name : String;
--          with procedure To_Str8   (Str8 : out X_String;
--                                    Orig :     Original_Array);
--          with procedure From_Str8 (Orig : out Original_Array;
--                                    Str8 :     X_String);
        procedure Tester_2d (Image : String;  
                             Orig  : Original_Array;  
                             Str8  : Xlbt_String.X_String) is
            --------------------------------------------------------------
            -- Image        - Specifies a text representation for Orig.
            -- Orig         - Specifies the original value to be converted.
            -- Str8         - Specifies the equivalent raw value.
            --
            -- Called to exercise various conversions of 2d array values.
            --------------------------------------------------------------

            subtype Constrained_Array is Original_Array  
                                            (Orig'Range (1), Orig'Range (2));  
            procedure Constrained_Test is  
               new Cvt_Test_Utilities.X_String_Tests.Tester  
                      (Constrained_Array, Original_Name, To_Str8, From_Str8);  
        begin  
            Constrained_Test (Image, Orig, Str8);  
        end Tester_2d;

    end X_String_Tests;

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

    package body Dummy_Converters is

        ------------------------------------------------------------------
        -- This package is a dummy version of Xlbmp_Generic_Converters
        -- and Xlbp_U_Char_Generics.  It is used by tests that want to
        -- use converters which aren't normally required by the
        -- protocol, and thus aren't provided by any of the standard
        -- converter packages.  The conversion generics here perform no
        -- actual work - they just raise Unimplemented so that the test
        -- generics will know to ignore this test.
        ------------------------------------------------------------------

--      generic
--          type Original  is (<>);
--          type Converted is private;
        procedure Convert_From_Discrete (Conv : out Converted;  
                                         Orig :     Original) is  
        begin  
            raise Unimplemented;  
        end Convert_From_Discrete;

--      generic
--          type Original  is private;
--          type Converted is private;
        procedure Convert_From_Private (Conv : out Converted;  
                                        Orig :     Original) is  
        begin  
            raise Unimplemented;  
        end Convert_From_Private;

--      generic
--          type Original       is private;
--          type Index          is (<>);
--          type Original_Array is array (Index range <>) of Original;
--          type Converted      is private;
        procedure Convert_From_Array (Conv : out Converted;  
                                      Orig :     Original_Array) is  
        begin  
            raise Unimplemented;  
        end Convert_From_Array;

--      generic
--          type Original       is private;
--          type Index1         is (<>);
--          type Index2         is (<>);
--          type Original_Array is array (Index1 range <>,
--                                        Index2 range <>) of Original;
--          type Converted      is private;
        procedure Convert_From_2d_Array (Conv : out Converted;  
                                         Orig :     Original_Array) is  
        begin  
            raise Unimplemented;  
        end Convert_From_2d_Array;

--      generic
--          type Original  is (<>);
--          type Converted is private;
        procedure Convert_To_Discrete (Orig : out Original;  
                                       Conv :     Converted) is  
        begin  
            raise Unimplemented;  
        end Convert_To_Discrete;

--      generic
--          type Original  is private;
--          type Converted is private;
        procedure Convert_To_Private (Orig : out Original;  
                                      Conv :     Converted) is  
        begin  
            raise Unimplemented;  
        end Convert_To_Private;

--      generic
--          type Original       is private;
--          type Index          is (<>);
--          type Original_Array is array (Index range <>) of Original;
--          type Converted      is private;
        procedure Convert_To_Array (Orig : out Original_Array;  
                                    Conv :     Converted) is  
        begin  
            raise Unimplemented;  
        end Convert_To_Array;

--      generic
--          type Original       is private;
--          type Index1         is (<>);-          type Index2         is (<>);
--          type Original_Array is array (Index1 range <>,
--                                        Index2 range <>) of Original;
--          type Converted      is private;
        procedure Convert_To_2d_Array (Orig : out Original_Array;  
                                       Conv :     Converted) is  
        begin  
            raise Unimplemented;  
        end Convert_To_2d_Array;

    end Dummy_Converters;

--\x0c
end Cvt_Test_Utilities;  

E3 Meta Data

    nblk1=22
    nid=0
    hdr6=44
        [0x00] rec0=1a rec1=00 rec2=01 rec3=08c
        [0x01] rec0=00 rec1=00 rec2=22 rec3=004
        [0x02] rec0=13 rec1=00 rec2=02 rec3=002
        [0x03] rec0=00 rec1=00 rec2=21 rec3=014
        [0x04] rec0=17 rec1=00 rec2=03 rec3=05c
        [0x05] rec0=16 rec1=00 rec2=04 rec3=02a
        [0x06] rec0=17 rec1=00 rec2=05 rec3=066
        [0x07] rec0=16 rec1=00 rec2=06 rec3=026
        [0x08] rec0=16 rec1=00 rec2=07 rec3=046
        [0x09] rec0=13 rec1=00 rec2=08 rec3=09a
        [0x0a] rec0=19 rec1=00 rec2=09 rec3=056
        [0x0b] rec0=18 rec1=00 rec2=0a rec3=05a
        [0x0c] rec0=12 rec1=00 rec2=0b rec3=04e
        [0x0d] rec0=13 rec1=00 rec2=0c rec3=082
        [0x0e] rec0=16 rec1=00 rec2=0d rec3=066
        [0x0f] rec0=11 rec1=00 rec2=0e rec3=032
        [0x10] rec0=15 rec1=00 rec2=0f rec3=028
        [0x11] rec0=14 rec1=00 rec2=10 rec3=036
        [0x12] rec0=13 rec1=00 rec2=11 rec3=01e
        [0x13] rec0=12 rec1=00 rec2=12 rec3=066
        [0x14] rec0=14 rec1=00 rec2=13 rec3=058
        [0x15] rec0=13 rec1=00 rec2=14 rec3=062
        [0x16] rec0=12 rec1=00 rec2=15 rec3=090
        [0x17] rec0=17 rec1=00 rec2=16 rec3=044
        [0x18] rec0=13 rec1=00 rec2=17 rec3=01e
        [0x19] rec0=11 rec1=00 rec2=18 rec3=00e
        [0x1a] rec0=14 rec1=00 rec2=19 rec3=07c
        [0x1b] rec0=16 rec1=00 rec2=1a rec3=040
        [0x1c] rec0=11 rec1=00 rec2=1b rec3=06a
        [0x1d] rec0=15 rec1=00 rec2=1c rec3=044
        [0x1e] rec0=1a rec1=00 rec2=1d rec3=010
        [0x1f] rec0=18 rec1=00 rec2=1e rec3=02c
        [0x20] rec0=1c rec1=00 rec2=1f rec3=002
        [0x21] rec0=0e rec1=00 rec2=20 rec3=001
    tail 0x21500a1ee81978b4c3b03 0x42a00088462063203