Overview
Comment: | s_expressions-test_tools: new package with helper subprograms for S-expression tests |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
b0207d9353d146d8e8a2868ba351c7af |
User & Date: | nat on 2013-12-31 14:42:22 |
Other Links: | manifest | tags |
Context
2014-01-01
| ||
17:00 | s_expressions-encodings-tests: test suite for `Natools.S_Expressions.Encodings` check-in: d09d3219b5 user: nat tags: trunk | |
2013-12-31
| ||
14:42 | s_expressions-test_tools: new package with helper subprograms for S-expression tests check-in: b0207d9353 user: nat tags: trunk | |
2013-12-30
| ||
19:59 | s_expressions-encodings: new package for hexadecimal and base-64 encoding and decoding in S-expressions check-in: 1360e35d38 user: nat tags: trunk | |
Changes
Added tests/natools-s_expressions-test_tools.adb version [075dff7ba9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | ------------------------------------------------------------------------------ -- Copyright (c) 2013, Natacha Porté -- -- -- -- Permission to use, copy, modify, and distribute this software for any -- -- purpose with or without fee is hereby granted, provided that the above -- -- copyright notice and this permission notice appear in all copies. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -- -- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -- -- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -- -- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- -- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -- -- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -- -- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -- ------------------------------------------------------------------------------ package body Natools.S_Expressions.Test_Tools is Hex_Digits : constant String := "0123456789ABCDEF"; function Encode_Hex (Value : Offset; Length : Positive) return String; function Hex_Slice (Address : Offset; Address_Length : Positive; Data : Atom; Width : Positive) return String; function Is_Printable (Data : Octet) return Boolean; function Is_Printable (Data : Atom) return Boolean; -- Return whether Data can be dumped directed as a String or Character ------------------------------ -- Local Helper Subprograms -- ------------------------------ function Encode_Hex (Value : Offset; Length : Positive) return String is I : Natural := Length; Digit : Natural; Current : Offset := Value; begin return Result : String (1 .. Length) := (others => '0') do while Current /= 0 and I /= 0 loop Digit := Natural (Current mod 16); Result (I) := Hex_Digits (Hex_Digits'First + Digit); I := I - 1; Current := Current / 16; end loop; end return; end Encode_Hex; function Hex_Slice (Address : Offset; Address_Length : Positive; Data : Atom; Width : Positive) return String is Total_Length : constant Positive := Address_Length + 4 + 4 * Width; Hex_Start : constant Positive := Address_Length + 2; Raw_Start : constant Positive := Hex_Start + 3 * Width + 1; Digit : Octet; begin return Result : String (1 .. Total_Length) := (others => ' ') do Result (1 .. Address_Length) := Encode_Hex (Address, Address_Length); for I in 0 .. Width - 1 loop exit when Data'First + Offset (I) not in Data'Range; Digit := Data (Data'First + Offset (I)); Result (Hex_Start + 3 * I) := Hex_Digits (Hex_Digits'First + Natural (Digit / 16)); Result (Hex_Start + 3 * I + 1) := Hex_Digits (Hex_Digits'First + Natural (Digit mod 16)); if Is_Printable (Digit) then Result (Raw_Start + I) := Character'Val (Digit); else Result (Raw_Start + I) := '.'; end if; end loop; end return; end Hex_Slice; function Is_Printable (Data : Octet) return Boolean is begin return Data in 32 .. 127; end Is_Printable; function Is_Printable (Data : Atom) return Boolean is begin if Data'Length > 100 then return False; end if; for I in Data'Range loop if not Is_Printable (Data (I)) then return False; end if; end loop; return True; end Is_Printable; ------------------ -- Public Tools -- ------------------ procedure Dump_Atom (Report : in out NT.Reporter'Class; Data : in Atom; Label : in String := "") is I, Length : Offset := 0; begin if Is_Printable (Data) then if Label'Length > 0 then Report.Info (Label & ": """ & To_String (Data) & '"'); else Report.Info ('"' & To_String (Data) & '"'); end if; else if Label'Length > 0 then Report.Info (Label & ": " & Natural'Image (Data'Length) & " octets"); end if; while I < Data'Length loop Length := Offset'Min (16, Data'Length - I); Report.Info (Hex_Slice (I, 8, Data (Data'First + I .. Data'First + I + Length - 1), 16)); I := I + 16; end loop; end if; end Dump_Atom; procedure Test_Atom (Report : in out NT.Reporter'Class; Test_Name : in String; Expected : in Atom; Found : in Atom) is begin if Found = Expected then Report.Item (Test_Name, NT.Success); else Report.Item (Test_Name, NT.Fail); Dump_Atom (Report, Found, "Found"); Dump_Atom (Report, Expected, "Expected"); end if; end Test_Atom; end Natools.S_Expressions.Test_Tools; |
Added tests/natools-s_expressions-test_tools.ads version [8aef64b4b9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | ------------------------------------------------------------------------------ -- Copyright (c) 2013, Natacha Porté -- -- -- -- Permission to use, copy, modify, and distribute this software for any -- -- purpose with or without fee is hereby granted, provided that the above -- -- copyright notice and this permission notice appear in all copies. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -- -- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -- -- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -- -- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- -- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -- -- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -- -- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -- ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- Natools.S_Expressions.Test_Tools provides tools used in S-expression -- -- test suites. -- ------------------------------------------------------------------------------ with Natools.Tests; package Natools.S_Expressions.Test_Tools is pragma Preelaborate (Test_Tools); package NT renames Natools.Tests; procedure Dump_Atom (Report : in out NT.Reporter'Class; Data : in Atom; Label : in String := ""); -- Dump contents on Data as info in Report procedure Test_Atom (Report : in out NT.Reporter'Class; Test_Name : in String; Expected : in Atom; Found : in Atom); -- Report success when Found is equal to Expected, and failure -- with diagnostics otherwise. end Natools.S_Expressions.Test_Tools; |