Overview
Comment: | cron-tests: test suite package for Natools.Cron |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
287a68c3f59cd5be0336c04c62be327d |
User & Date: | nat on 2014-06-17 18:46:02 |
Other Links: | manifest | tags |
Context
2014-06-18
| ||
17:57 | cron: add support for synchronized events check-in: 04a8a351dd user: nat tags: trunk | |
2014-06-17
| ||
18:46 | cron-tests: test suite package for Natools.Cron check-in: 287a68c3f5 user: nat tags: trunk | |
2014-06-16
| ||
21:43 | cron: new package implementing low-precision periodic procedure calls check-in: 6e8b6ccecd user: nat tags: trunk | |
Changes
Added tests/natools-cron-tests.adb version [ee998ac3ee].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | ------------------------------------------------------------------------------ -- Copyright (c) 2014, 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.Cron.Tests is -------------------- -- Test Callbacks -- -------------------- overriding procedure Run (Self : in out Test_Callback) is begin Append (Self.Backend.all, Self.Symbol); end Run; overriding procedure Run (Self : in out Long_Callback) is begin Append (Self.Backend.all, Self.Open); delay Self.Wait; Append (Self.Backend.all, Self.Close); end Run; -------------------- -- Bounded String -- -------------------- procedure Append (S : in out Bounded_String; C : Character) is begin S.Size := S.Size + 1; S.Data (S.Size) := C; end Append; function Get (S : Bounded_String) return String is begin return S.Data (1 .. S.Size); end Get; procedure Reset (S : in out Bounded_String) is begin S.Size := 0; end Reset; procedure Check (Test : in out NT.Test; Found : in Bounded_String; Expected : in String; Context : in String := "") is begin if Get (Found) /= Expected then if Context /= "" then Test.Fail (Context & ": found """ & Get (Found) & """, expected """ & Expected & '"'); else Test.Fail ("Found """ & Get (Found) & """, expected """ & Expected & '"'); end if; end if; end Check; ------------------------- -- Complete Test Suite -- ------------------------- procedure All_Tests (Report : in out NT.Reporter'Class) is begin Basic_Usage (Report); Delete_While_Busy (Report); Insert_While_Busy (Report); Time_Collision (Report); end All_Tests; ----------------------- -- Inidividual Tests -- ----------------------- procedure Basic_Usage (Report : in out NT.Reporter'Class) is Test : NT.Test := Report.Item ("Basic black-box usage"); Total : constant Duration := 1.0; Tick : constant Duration := Total / 10; Half_Tick : constant Duration := Tick / 2; Log : aliased Bounded_String (256); begin declare Beat : constant Cron_Entry := Create (Tick, Test_Callback'(Backend => Log'Access, Symbol => '.')); pragma Unreferenced (Beat); Test_Entry : Cron_Entry; begin delay Half_Tick; Test_Entry.Set (Tick, Test_Callback'(Backend => Log'Access, Symbol => '1')); delay 3 * Tick + Half_Tick; Test_Entry.Reset; delay Half_Tick; end; Append (Log, '|'); delay Tick / 10; declare use type Ada.Calendar.Time; Beat : constant Cron_Entry := Create ((Origin => Ada.Calendar.Clock + Half_Tick, Period => Tick), Test_Callback'(Backend => Log'Access, Symbol => '.')); pragma Unreferenced (Beat); Slow, Fast : Cron_Entry; begin Slow.Set (2 * Tick, Test_Callback'(Backend => Log'Access, Symbol => 's')); delay 2 * Tick; Fast.Set (Tick / 5, Test_Callback'(Backend => Log'Access, Symbol => 'f')); delay Tick + Half_Tick; Fast.Reset; delay Tick + Half_Tick; end; -- Timeline, in ticks: -- Beat: set at 0.0, finalized at 4.5, run at 1.0, 2.0, 3.0, 4.0. -- Test_Entry: set at 0.5, reset at 4.0, run at 1.5, 2.5, 3.5. -- Beat: set at 4.5, finalized at 9.5, run at 5.0, 6.0, 7.0, 8.0, 9.0. -- Slow: set at 4.5, finalized at 9.5, run at 6.5, 8.5. -- Fast: set at 6.5, reset at 8.0, -- run at 6.7, 6.9, 7.1, 7.3, 7.5, 7.7, 7.9 Check (Test, Log, ".1.1.1.|..sff.fffff.s."); exception when Error : others => Test.Report_Exception (Error); end Basic_Usage; procedure Delete_While_Busy (Report : in out NT.Reporter'Class) is Test : NT.Test := Report.Item ("Delete entry while callback is running"); Total : constant Duration := 0.01; Log : aliased Bounded_String (256); begin declare Test_Entry : Cron_Entry; begin Test_Entry.Set (Total / 8, Long_Callback' (Backend => Log'Access, Open => '(', Close => ')', Wait => Total / 4)); delay Total / 4; end; Check (Test, Log, "(", "Before wait"); delay Total / 2; Check (Test, Log, "()", "After wait"); exception when Error : others => Test.Report_Exception (Error); end Delete_While_Busy; procedure Insert_While_Busy (Report : in out NT.Reporter'Class) is Test : NT.Test := Report.Item ("Insert entry while callback is running"); Total : constant Duration := 0.1; Log : aliased Bounded_String (256); begin declare Long, Short : Cron_Entry; begin Long.Set (Total / 8, Long_Callback' (Backend => Log'Access, Open => '(', Close => ')', Wait => Total / 5)); delay Total / 8 + Total / 16; Short.Set (Total / 8, Test_Callback'(Backend => Log'Access, Symbol => '.')); delay Total / 2 + Total / 8; end; -- Timeline: 0 . 1/8 . 1/4 . 3/8 . 1/2 . 5/8 . 3/4 . 7/8 . 1 -- Set: L S -- Finalize: * -- Ticks: L L S L S L S L S L -- Run: <----L---->S <----L---->S <----L----> delay Total / 8; Check (Test, Log, "().().()"); exception when Error : others => Test.Report_Exception (Error); end Insert_While_Busy; procedure Time_Collision (Report : in out NT.Reporter'Class) is Test : NT.Test := Report.Item ("Simultaneous activation of events"); Total : constant Duration := 0.01; Tick : constant Duration := Total / 4; Log : aliased Bounded_String (256); begin declare use type Ada.Calendar.Time; Common : constant Periodic_Time := (Ada.Calendar.Clock + Tick, Tick); First, Second, Third : Cron_Entry; begin First.Set (Common, Test_Callback'(Backend => Log'Access, Symbol => '1')); Second.Set (Common, Test_Callback'(Backend => Log'Access, Symbol => '2')); Third.Set ((Origin => Common.Origin, Period => 2 * Common.Period), Test_Callback'(Backend => Log'Access, Symbol => '3')); delay Total - Tick / 2; end; Check (Test, Log, "12312123"); exception when Error : others => Test.Report_Exception (Error); end Time_Collision; end Natools.Cron.Tests; |
Added tests/natools-cron-tests.ads version [2ed458e779].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | ------------------------------------------------------------------------------ -- Copyright (c) 2014, 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.Cron.Tests provides a test suite for Natools.Cron. -- ------------------------------------------------------------------------------ with Natools.Tests; package Natools.Cron.Tests is package NT renames Natools.Tests; procedure All_Tests (Report : in out NT.Reporter'Class); procedure Basic_Usage (Report : in out NT.Reporter'Class); procedure Delete_While_Busy (Report : in out NT.Reporter'Class); procedure Insert_While_Busy (Report : in out NT.Reporter'Class); procedure Time_Collision (Report : in out NT.Reporter'Class); private type Bounded_String (Max_Size : Natural) is record Data : String (1 .. Max_Size); Size : Natural := 0; end record; procedure Append (S : in out Bounded_String; C : Character); function Get (S : Bounded_String) return String; procedure Reset (S : in out Bounded_String); procedure Check (Test : in out NT.Test; Found : in Bounded_String; Expected : in String; Context : in String := ""); type Test_Callback (Backend : access Bounded_String) is new Callback with record Symbol : Character; end record; overriding procedure Run (Self : in out Test_Callback); type Long_Callback (Backend : access Bounded_String) is new Callback with record Open, Close : Character; Wait : Duration; end record; overriding procedure Run (Self : in out Long_Callback); end Natools.Cron.Tests; |
Modified tests/test_all.adb from [d48cd7156c] to [5731c0705b].
︙ | ︙ | |||
17 18 19 20 21 22 23 24 25 26 27 28 29 30 | ----------------------------------------------------------------------- -- Test_All is a binary gathering all tests from Natools components. -- ----------------------------------------------------------------------- with Ada.Command_Line; with Ada.Text_IO; with Natools.Chunked_Strings.Tests; with Natools.Getopt_Long_Tests; with Natools.HMAC_Tests; with Natools.Reference_Tests; with Natools.S_Expressions.Atom_Buffers.Tests; with Natools.S_Expressions.Cache_Tests; with Natools.S_Expressions.Dynamic_Interpreter_Tests; with Natools.S_Expressions.Encodings.Tests; | > | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ----------------------------------------------------------------------- -- Test_All is a binary gathering all tests from Natools components. -- ----------------------------------------------------------------------- with Ada.Command_Line; with Ada.Text_IO; with Natools.Chunked_Strings.Tests; with Natools.Cron.Tests; with Natools.Getopt_Long_Tests; with Natools.HMAC_Tests; with Natools.Reference_Tests; with Natools.S_Expressions.Atom_Buffers.Tests; with Natools.S_Expressions.Cache_Tests; with Natools.S_Expressions.Dynamic_Interpreter_Tests; with Natools.S_Expressions.Encodings.Tests; |
︙ | ︙ | |||
68 69 70 71 72 73 74 75 76 77 78 79 80 81 | Report.Section ("Chunked_String with even allocation unit"); Even_Chunked_Strings_Tests.All_Tests (Report); Report.End_Section; Report.Section ("Chunked_String with single allocation unit"); Single_Chunked_Strings_Tests.All_Tests (Report); Report.End_Section; Report.Section ("Getopt_Long"); Natools.Getopt_Long_Tests.All_Tests (Report); Report.End_Section; Report.Section ("HMAC and GNAT_HMAC"); Natools.HMAC_Tests.All_Tests (Report); | > > > > | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | Report.Section ("Chunked_String with even allocation unit"); Even_Chunked_Strings_Tests.All_Tests (Report); Report.End_Section; Report.Section ("Chunked_String with single allocation unit"); Single_Chunked_Strings_Tests.All_Tests (Report); Report.End_Section; Report.Section ("Cron"); Natools.Cron.Tests.All_Tests (Report); Report.End_Section; Report.Section ("Getopt_Long"); Natools.Getopt_Long_Tests.All_Tests (Report); Report.End_Section; Report.Section ("HMAC and GNAT_HMAC"); Natools.HMAC_Tests.All_Tests (Report); |
︙ | ︙ |