OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc4/] [libstdc++-v3/] [doc/] [xml/] [manual/] [test.xml] - Blame information for rev 424

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 424 jeremybenn
2
3
 
4
5
  
6
    
7
      ISO C++
8
    
9
    
10
      test
11
    
12
    
13
      testsuite
14
    
15
    
16
      performance
17
    
18
    
19
      conformance
20
    
21
    
22
      ABI
23
    
24
    
25
      exception safety
26
    
27
  
28
29
 
30
Test
31
 
32
33
The libstdc++ testsuite includes testing for standard conformance,
34
regressions, ABI, and performance.
35
36
 
37
38
Organization
39
 
40
41
Directory Layout
42
 
43
44
  The directory libsrcdir/testsuite contains the
45
  individual test cases organized in sub-directories corresponding to
46
  chapters of the C++ standard (detailed below), the dejagnu test
47
  harness support files, and sources to various testsuite utilities
48
  that are packaged in a separate testing library.
49
50
 
51
52
  All test cases for functionality required by the runtime components
53
  of the C++ standard (ISO 14882) are files within the following
54
  directories.
55
56
 
57
   
58
17_intro
59
18_support
60
19_diagnostics
61
20_util
62
21_strings
63
22_locale
64
23_containers
65
25_algorithms
66
26_numerics
67
27_io
68
28_regex
69
29_atomics
70
30_threads
71
   
72
 
73
   
74
      In addition, the following directories include test files:
75
   
76
 
77
   
78
tr1               Tests for components as described by the Technical Report on Standard Library Extensions (TR1).
79
backward          Tests for backwards compatibility and deprecated features.
80
demangle          Tests for __cxa_demangle, the IA 64 C++ ABI demangler
81
ext               Tests for extensions.
82
performance       Tests for performance analysis, and performance regressions.
83
   
84
 
85
   
86
      Some directories don't have test files, but instead contain
87
      auxiliary information:
88
   
89
 
90
   
91
config            Files for the dejagnu test harness.
92
lib               Files for the dejagnu test harness.
93
libstdc++*        Files for the dejagnu test harness.
94
data              Sample text files for testing input and output.
95
util              Files for libtestc++, utilities and testing routines.
96
   
97
 
98
   
99
      Within a directory that includes test files, there may be
100
      additional subdirectories, or files.  Originally, test cases
101
      were appended to one file that represented a particular section
102
      of the chapter under test, and was named accordingly. For
103
      instance, to test items related to  21.3.6.1 -
104
      basic_string::find [lib.string::find] in the standard,
105
      the following was used:
106
   
107
   
108
21_strings/find.cc
109
   
110
   
111
      However, that practice soon became a liability as the test cases
112
      became huge and unwieldy, and testing new or extended
113
      functionality (like wide characters or named locales) became
114
      frustrating, leading to aggressive pruning of test cases on some
115
      platforms that covered up implementation errors. Now, the test
116
      suite has a policy of one file, one test case, which solves the
117
      above issues and gives finer grained results and more manageable
118
      error debugging. As an example, the test case quoted above
119
      becomes:
120
   
121
   
122
21_strings/basic_string/find/char/1.cc
123
21_strings/basic_string/find/char/2.cc
124
21_strings/basic_string/find/char/3.cc
125
21_strings/basic_string/find/wchar_t/1.cc
126
21_strings/basic_string/find/wchar_t/2.cc
127
21_strings/basic_string/find/wchar_t/3.cc
128
   
129
 
130
   
131
      All new tests should be written with the policy of one test
132
      case, one file in mind.
133
   
134
135
 
136
 
137
138
Naming Conventions
139
 
140
   
141
      In addition, there are some special names and suffixes that are
142
      used within the testsuite to designate particular kinds of
143
      tests.
144
   
145
 
146
147
148
  
149
   _xin.cc
150
  
151
   
152
      This test case expects some kind of interactive input in order
153
      to finish or pass. At the moment, the interactive tests are not
154
      run by default. Instead, they are run by hand, like:
155
   
156
      
157
g++ 27_io/objects/char/3_xin.cc
158
cat 27_io/objects/char/3_xin.in | a.out
159
     
160
161
162
   
163
     .in
164
   
165
   
166
      This file contains the expected input for the corresponding 
167
      _xin.cc test case.
168
   
169
170
171
  
172
   _neg.cc
173
  
174
   
175
      This test case is expected to fail: it's a negative test. At the
176
      moment, these are almost always compile time errors.
177
   
178
179
180
  
181
   char
182
  
183
   
184
      This can either be a directory name or part of a longer file
185
      name, and indicates that this file, or the files within this
186
      directory are testing the char instantiation of a
187
      template.
188
   
189
190
191
  
192
   wchar_t
193
  
194
   
195
      This can either be a directory name or part of a longer file
196
      name, and indicates that this file, or the files within this
197
      directory are testing the wchar_t instantiation of
198
      a template. Some hosts do not support wchar_t
199
      functionality, so for these targets, all of these tests will not
200
      be run.
201
   
202
203
204
  
205
   thread
206
  
207
   
208
      This can either be a directory name or part of a longer file
209
      name, and indicates that this file, or the files within this
210
      directory are testing situations where multiple threads are
211
      being used.
212
   
213
214
215
  
216
   performance
217
  
218
   
219
      This can either be an enclosing directory name or part of a
220
      specific file name. This indicates a test that is used to
221
      analyze runtime performance, for performance regression testing,
222
      or for other optimization related analysis. At the moment, these
223
      test cases are not run by default.
224
   
225
226
227
 
228
229
230
 
231
 
232
233
Running the Testsuite
234
 
235
  
236
    Basic
237
 
238
    
239
      You can check the status of the build without installing it
240
      using the dejagnu harness, much like the rest of the gcc
241
      tools.
242
    make check
243
   in the libbuilddir directory.
244
   or
245
    make check-target-libstdc++-v3
246
   in the gccbuilddir directory.
247
     
248
 
249
     
250
       These commands are functionally equivalent and will create a
251
       'testsuite' directory underneath
252
       libbuilddir containing the results of the
253
       tests. Two results files will be generated: 
254
       libstdc++.sum, which is a PASS/FAIL summary for each
255
       test, and libstdc++.log which is a log of
256
       the exact command line passed to the compiler, the compiler
257
       output, and the executable output (if any).
258
     
259
 
260
     
261
       Archives of test results for various versions and platforms are
262
       available on the GCC website in the 
263
       url="http://gcc.gnu.org/gcc-4.3/buildstat.html">build
264
       status section of each individual release, and are also
265
       archived on a daily basis on the 
266
       url="http://gcc.gnu.org/ml/gcc-testresults/current">gcc-testresults
267
       mailing list. Please check either of these places for a similar
268
       combination of source version, operating system, and host CPU.
269
     
270
  
271
 
272
  
273
    Variations
274
    
275
      There are several options for running tests, including testing
276
      the regression tests, testing a subset of the regression tests,
277
      testing the performance tests, testing just compilation, testing
278
      installed tools, etc. In addition, there is a special rule for
279
      checking the exported symbols of the shared library.
280
    
281
    
282
      To debug the dejagnu test harness during runs, try invoking with a
283
      specific argument to the variable RUNTESTFLAGS, as below.
284
    
285
 
286
287
make check-target-libstdc++-v3 RUNTESTFLAGS="-v"
288
289
 
290
    
291
      or
292
    
293
 
294
295
make check-target-libstdc++-v3 RUNTESTFLAGS="-v -v"
296
297
 
298
    
299
      To run a subset of the library tests, you will need to generate
300
      the testsuite_files file by running
301
      make testsuite_files in the
302
      libbuilddir/testsuite directory, described
303
      below.  Edit the file to remove the tests you don't want and
304
      then run the testsuite as normal.
305
    
306
 
307
    
308
      There are two ways to run on a simulator: set up DEJAGNU to point to a
309
      specially crafted site.exp, or pass down --target_board flags.
310
    
311
 
312
    
313
    Example flags to pass down for various embedded builds are as follows:
314
    
315
 
316
317
      --target=powerpc-eabism (libgloss/sim)
318
make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=powerpc-sim"
319
 
320
--target=calmrisc32 (libgloss/sid)
321
make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=calmrisc32-sid"
322
 
323
--target=xscale-elf (newlib/sim)
324
make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=arm-sim"
325
326
 
327
    
328
      Also, here is an example of how to run the libstdc++ testsuite
329
      for a multilibed build directory with different ABI settings:
330
    
331
 
332
 
333
make check-target-libstdc++-v3 RUNTESTFLAGS='--target_board \"unix{-mabi=32,,-mabi=64}\"'
334
335
 
336
    
337
      You can run the tests with a compiler and library that have
338
      already been installed.  Make sure that the compiler (e.g.,
339
      g++) is in your PATH.  If you are
340
      using shared libraries, then you must also ensure that the
341
      directory containing the shared version of libstdc++ is in your
342
      LD_LIBRARY_PATH, or equivalent.  If your GCC source
343
      tree is at /path/to/gcc, then you can run the tests
344
      as follows:
345
    
346
 
347
348
runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
349
350
 
351
    
352
      The testsuite will create a number of files in the directory in
353
      which you run this command,.  Some of those files might use the
354
      same name as files created by other testsuites (like the ones
355
      for GCC and G++), so you should not try to run all the
356
      testsuites in parallel from the same directory.
357
    
358
 
359
    
360
      In addition, there are some testing options that are mostly of
361
      interest to library maintainers and system integrators. As such,
362
      these tests may not work on all cpu and host combinations, and
363
      may need to be executed in the
364
      libbuilddir/testsuite directory.  These
365
      options include, but are not necessarily limited to, the
366
      following:
367
   
368
 
369
   
370
   make testsuite_files
371
   
372
 
373
  
374
    Five files are generated that determine what test files
375
    are run. These files are:
376
  
377
 
378
   
379
     
380
       
381
         testsuite_files
382
       
383
       
384
         This is a list of all the test cases that will be run. Each
385
         test case is on a separate line, given with an absolute path
386
         from the libsrcdir/testsuite directory.
387
       
388
     
389
 
390
     
391
       
392
         testsuite_files_interactive
393
       
394
       
395
         This is a list of all the interactive test cases, using the
396
         same format as the file list above. These tests are not run
397
         by default.
398
     
399
     
400
 
401
     
402
       
403
         testsuite_files_performance
404
       
405
       
406
         This is a list of all the performance test cases, using the
407
         same format as the file list above. These tests are not run
408
         by default.
409
     
410
     
411
 
412
     
413
       
414
         testsuite_thread
415
       
416
       
417
         This file indicates that the host system can run tests which
418
         involved multiple threads.
419
       
420
     
421
 
422
     
423
       
424
         testsuite_wchar_t
425
       
426
       
427
         This file indicates that the host system can run the wchar_t
428
         tests, and corresponds to the macro definition 
429
         _GLIBCXX_USE_WCHAR_T in the file c++config.h.
430
       
431
     
432
    
433
 
434
   
435
   make check-abi
436
   
437
 
438
   
439
     The library ABI can be tested. This involves testing the shared
440
     library against an ABI-defining previous version of symbol
441
     exports.
442
   
443
 
444
  
445
   make check-compile
446
  
447
 
448
   
449
     This rule compiles, but does not link or execute, the
450
     testsuite_files test cases and displays the
451
     output on stdout.
452
   
453
 
454
   
455
   make check-performance
456
   
457
 
458
   
459
     This rule runs through the
460
     testsuite_files_performance test cases and
461
     collects information for performance analysis and can be used to
462
     spot performance regressions. Various timing information is
463
     collected, as well as number of hard page faults, and memory
464
     used. This is not run by default, and the implementation is in
465
     flux.
466
   
467
 
468
   
469
      We are interested in any strange failures of the testsuite;
470
      please email the main libstdc++ mailing list if you see
471
      something odd or have questions.
472
   
473
  
474
 
475
  
476
    Permutations
477
    
478
      To run the libstdc++ test suite under the 
479
      linkend="manual.ext.debug_mode">debug mode, edit
480
      libstdc++-v3/scripts/testsuite_flags to add the
481
      compile-time flag -D_GLIBCXX_DEBUG to the
482
      result printed by the --build-cxx
483
      option. Additionally, add the
484
      -D_GLIBCXX_DEBUG_PEDANTIC flag to turn on
485
      pedantic checking. The libstdc++ test suite should produce
486
      precisely the same results under debug mode that it does under
487
      release mode: any deviation indicates an error in either the
488
      library or the test suite.
489
    
490
 
491
    
492
      The parallel
493
      mode can be tested in much the same manner, substituting
494
      -D_GLIBCXX_PARALLEL for
495
      -D_GLIBCXX_DEBUG in the previous paragraph.
496
    
497
 
498
    
499
      Or, just run the testsuites with CXXFLAGS
500
      set to -D_GLIBCXX_DEBUG or
501
      -D_GLIBCXX_PARALLEL.
502
    
503
  
504
505
 
506
507
Writing a new test case
508
 
509
   
510
    The first step in making a new test case is to choose the correct
511
    directory and file name, given the organization as previously
512
    described.
513
   
514
 
515
   
516
    All files are copyright the FSF, and GPL'd: this is very
517
    important.  The first copyright year should correspond to the date
518
    the file was checked in to SVN.
519
   
520
 
521
   
522
     As per the dejagnu instructions, always return 0 from main to
523
     indicate success.
524
   
525
 
526
   
527
   A bunch of utility functions and classes have already been
528
   abstracted out into the testsuite utility library, 
529
   libtestc++. To use this functionality, just include the
530
   appropriate header file: the library or specific object files will
531
   automatically be linked in as part of the testsuite run.
532
   
533
 
534
   
535
   For a test that needs to take advantage of the dejagnu test
536
   harness, what follows below is a list of special keyword that
537
   harness uses. Basically, a test case contains dg-keywords (see
538
   dg.exp) indicating what to do and what kinds of behavior are to be
539
   expected.  New test cases should be written with the new style
540
   DejaGnu framework in mind.
541
   
542
 
543
   
544
    To ease transition, here is the list of dg-keyword documentation
545
    lifted from dg.exp.
546
   
547
 
548
549
# The currently supported options are:
550
#
551
# dg-prms-id N
552
#       set prms_id to N
553
#
554
# dg-options "options ..." [{ target selector }]
555
#       specify special options to pass to the tool (eg: compiler)
556
#
557
# dg-do do-what-keyword [{ target/xfail selector }]
558
#       `do-what-keyword' is tool specific and is passed unchanged to
559
#       ${tool}-dg-test.  An example is gcc where `keyword' can be any of:
560
#       preprocess|compile|assemble|link|run
561
#       and will do one of: produce a .i, produce a .s, produce a .o,
562
#       produce an a.out, or produce an a.out and run it (the default is
563
#       compile).
564
#
565
# dg-error regexp comment [{ target/xfail selector } [{.|0|linenum}]]
566
#       indicate an error message <regexp> is expected on this line
567
#       (the test fails if it doesn't occur)
568
#       Linenum=0 for general tool messages (eg: -V arg missing).
569
#       "." means the current line.
570
#
571
# dg-warning regexp comment [{ target/xfail selector } [{.|0|linenum}]]
572
#       indicate a warning message <regexp> is expected on this line
573
#       (the test fails if it doesn't occur)
574
#
575
# dg-bogus regexp comment [{ target/xfail selector } [{.|0|linenum}]]
576
#       indicate a bogus error message <regexp> use to occur here
577
#       (the test fails if it does occur)
578
#
579
# dg-build regexp comment [{ target/xfail selector }]
580
#       indicate the build use to fail for some reason
581
#       (errors covered here include bad assembler generated, tool crashes,
582
#       and link failures)
583
#       (the test fails if it does occur)
584
#
585
# dg-excess-errors comment [{ target/xfail selector }]
586
#       indicate excess errors are expected (any line)
587
#       (this should only be used sparingly and temporarily)
588
#
589
# dg-output regexp [{ target selector }]
590
#       indicate the expected output of the program is <regexp>
591
#       (there may be multiple occurrences of this, they are concatenated)
592
#
593
# dg-final { tcl code }
594
#       add some tcl code to be run at the end
595
#       (there may be multiple occurrences of this, they are concatenated)
596
#       (unbalanced braces must be \-escaped)
597
#
598
# "{ target selector }" is a list of expressions that determine whether the
599
# test succeeds or fails for a particular target, or in some cases whether the
600
# option applies for a particular target.  If the case of `dg-do' it specifies
601
# whether the test case is even attempted on the specified target.
602
#
603
# The target selector is always optional.  The format is one of:
604
#
605
# { xfail *-*-* ... } - the test is expected to fail for the given targets
606
# { target *-*-* ... } - the option only applies to the given targets
607
#
608
# At least one target must be specified, use *-*-* for "all targets".
609
# At present it is not possible to specify both `xfail' and `target'.
610
# "native" may be used in place of "*-*-*".
611
 
612
Example 1: Testing compilation only
613
// { dg-do compile }
614
 
615
Example 2: Testing for expected warnings on line 36, which all targets fail
616
// { dg-warning "string literals" "" { xfail *-*-* } 36
617
 
618
Example 3: Testing for expected warnings on line 36
619
// { dg-warning "string literals" "" { target *-*-* } 36
620
 
621
Example 4: Testing for compilation errors on line 41
622
// { dg-do compile }
623
// { dg-error "no match for" "" { target *-*-* } 41 }
624
 
625
Example 5: Testing with special command line settings, or without the
626
use of pre-compiled headers, in particular the stdc++.h.gch file. Any
627
options here will override the DEFAULT_CXXFLAGS and PCH_CXXFLAGS set
628
up in the normal.exp file.
629
// { dg-options "-O0" { target *-*-* } }
630
631
 
632
   
633
    More examples can be found in the libstdc++-v3/testsuite/*/*.cc files.
634
   
635
636
 
637
 
638
639
Test Harness and Utilities
640
 
641
642
Dejagnu Harness Details
643
  
644
    Underlying details of testing for conformance and regressions are
645
    abstracted via the GNU Dejagnu package. This is similar to the
646
    rest of GCC.
647
  
648
 
649
 
650
This is information for those looking at making changes to the testsuite
651
structure, and/or needing to trace dejagnu's actions with --verbose.  This
652
will not be useful to people who are "merely" adding new tests to the existing
653
structure.
654
655
 
656
The first key point when working with dejagnu is the idea of a "tool".
657
Files, directories, and functions are all implicitly used when they are
658
named after the tool in use.  Here, the tool will always be "libstdc++".
659
660
 
661
The lib subdir contains support routines.  The
662
lib/libstdc++.exp file ("support library") is loaded
663
automagically, and must explicitly load the others.  For example, files can
664
be copied from the core compiler's support directory into lib.
665
666
 
667
Some routines in lib/libstdc++.exp are callbacks, some are
668
our own.  Callbacks must be prefixed with the name of the tool.  To easily
669
distinguish the others, by convention our own routines are named "v3-*".
670
671
 
672
The next key point when working with dejagnu is "test files".  Any
673
directory whose name starts with the tool name will be searched for test files.
674
(We have only one.)  In those directories, any .exp file is
675
considered a test file, and will be run in turn.  Our main test file is called
676
normal.exp; it runs all the tests in testsuite_files using the
677
callbacks loaded from the support library.
678
679
 
680
The config directory is searched for any particular "target
681
board" information unique to this library.  This is currently unused and sets
682
only default variables.
683
684
 
685
686
 
687
688
Utilities
689
  
690
  
691
  
692
   The testsuite directory also contains some files that implement
693
   functionality that is intended to make writing test cases easier,
694
   or to avoid duplication, or to provide error checking in a way that
695
   is consistent across platforms and test harnesses. A stand-alone
696
   executable, called abi_check, and a static
697
   library called libtestc++ are
698
   constructed. Both of these items are not installed, and only used
699
   during testing.
700
  
701
 
702
  
703
  These files include the following functionality:
704
  
705
 
706
  
707
     
708
       
709
       testsuite_abi.h,
710
       testsuite_abi.cc,
711
       testsuite_abi_check.cc
712
       
713
       
714
        Creates the executable abi_check.
715
        Used to check correctness of symbol versioning, visibility of
716
        exported symbols, and compatibility on symbols in the shared
717
        library, for hosts that support this feature. More information
718
        can be found in the ABI documentation here
719
       
720
     
721
     
722
       
723
       testsuite_allocator.h,
724
       testsuite_allocator.cc
725
       
726
       
727
        Contains specialized allocators that keep track of construction
728
        and destruction. Also, support for overriding global new and
729
        delete operators, including verification that new and delete
730
        are called during execution, and that allocation over max_size
731
        fails.
732
       
733
     
734
     
735
       
736
       testsuite_character.h
737
       
738
       
739
        Contains std::char_traits and
740
        std::codecvt specializations for a user-defined
741
        POD.
742
       
743
     
744
     
745
       
746
       testsuite_hooks.h,
747
       testsuite_hooks.cc
748
       
749
       
750
       A large number of utilities, including:
751
       
752
       
753
         VERIFY
754
         set_memory_limits
755
         verify_demangle
756
         run_tests_wrapped_locale
757
         run_tests_wrapped_env
758
         try_named_locale
759
         try_mkfifo
760
         func_callback
761
         counter
762
         copy_tracker
763
         copy_constructor
764
         assignment_operator
765
         destructor
766
         
767
         pod_char, pod_int and associated char_traits specializations
768
         
769
       
770
     
771
     
772
       
773
         testsuite_io.h
774
       
775
       
776
       Error, exception, and constraint checking for
777
       std::streambuf, std::basic_stringbuf, std::basic_filebuf.
778
       
779
     
780
     
781
       
782
         testsuite_iterators.h
783
       
784
       
785
         Wrappers for various iterators.
786
       
787
     
788
     
789
       
790
         testsuite_performance.h
791
       
792
       
793
       A number of class abstractions for performance counters, and
794
       reporting functions including:
795
       
796
      
797
         time_counter
798
         resource_counter
799
         report_performance
800
      
801
     
802
  
803
804
 
805
806
 
807
808
Special Topics
809
 
810
811
</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>812</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>  Qualifying Exception Safety Guarantees</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>813</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>  <indexterm></code></pre></td>
      </tr>
      <tr valign="middle">
         <td>814</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>    <primary>Test</primary></code></pre></td>
      </tr>
      <tr valign="middle">
         <td>815</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>    <secondary>Exception Safety</secondary></code></pre></td>
      </tr>
      <tr valign="middle">
         <td>816</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>  </indexterm></code></pre></td>
      </tr>
      <tr valign="middle">
         <td>817</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>
818
 
819
820
Overview
821
 
822
       
823
         Testing is composed of running a particular test sequence,
824
         and looking at what happens to the surrounding code when
825
         exceptions are thrown. Each test is composed of measuring
826
         initial state, executing a particular sequence of code under
827
         some instrumented conditions, measuring a final state, and
828
         then examining the differences between the two states.
829
       
830
 
831
       
832
         Test sequences are composed of constructed code sequences
833
         that exercise a particular function or member function, and
834
         either confirm no exceptions were generated, or confirm the
835
         consistency/coherency of the test subject in the event of a
836
         thrown exception.
837
       
838
 
839
       
840
         Random code paths can be constructed using the basic test
841
         sequences and instrumentation as above, only combined in a
842
         random or pseudo-random way.
843
       
844
 
845
        To compute the code paths that throw, test instruments
846
         are used that throw on allocation events
847
         (__gnu_cxx::throw_allocator_random
848
         and __gnu_cxx::throw_allocator_limit)
849
         and copy, assignment, comparison, increment, swap, and
850
         various operators
851
         (__gnu_cxx::throw_type_random
852
         and __gnu_cxx::throw_type_limit). Looping
853
         through a given test sequence and conditionally throwing in
854
         all instrumented places.  Then, when the test sequence
855
         completes without an exception being thrown, assume all
856
         potential error paths have been exercised in a sequential
857
         manner.
858
       
859
860
 
861
 
862
863
</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>864</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>    Existing tests</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>865</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>
866
 
867
  
868
     
869
       
870
         Ad Hoc
871
       
872
       
873
         For example,
874
         testsuite/23_containers/list/modifiers/3.cc.
875
       
876
     
877
 
878
     
879
       
880
         Policy Based Data Structures
881
       
882
       
883
         For example, take the test
884
         functor rand_reg_test in
885
         in testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc. This uses container_rand_regression_test in
886
testsuite/util/regression/rand/assoc/container_rand_regression_test.h.
887
 
888
       
889
 
890
       
891
         Which has several tests for container member functions,
892
Includes control and test container objects. Configuration includes
893
random seed, iterations, number of distinct values, and the
894
probability that an exception will be thrown. Assumes instantiating
895
container uses an extension
896
allocator, __gnu_cxx::throw_allocator_random,
897
as the allocator type.
898
       
899
     
900
 
901
     
902
       
903
         C++0x Container Requirements.
904
       
905
 
906
       
907
         Coverage is currently limited to testing container
908
         requirements for exception safety,
909
         although __gnu_cxx::throw_type meets
910
         the additional type requirements for testing numeric data
911
         structures and instantiating algorithms.
912
       
913
 
914
       
915
         Of particular interest is extending testing to algorithms and
916
         then to parallel algorithms. Also io and locales.
917
       
918
 
919
       
920
         The test instrumentation should also be extended to add
921
         instrumentation to iterator
922
         and const_iterator types that throw
923
         conditionally on iterator operations.
924
       
925
     
926
  
927
928
 
929
 
930
931
</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>932</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>C++0x Requirements Test Sequence Descriptions</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>933</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>
934
 
935
  
936
     
937
       
938
         Basic
939
       
940
 
941
       
942
         Basic consistency on exception propagation tests. For
943
         each container, an object of that container is constructed,
944
         a specific member function is exercised in
945
         a try block, and then any thrown
946
         exceptions lead to error checking in the appropriate
947
         catch block. The container's use of
948
         resources is compared to the container's use prior to the
949
         test block. Resource monitoring is limited to allocations
950
         made through the container's allocator_type,
951
         which should be sufficient for container data
952
         structures. Included in these tests are member functions
953
         are iterator and const_iterator
954
         operations, pop_front, pop_back, push_front, push_back, insert, erase, swap, clear,
955
         and rehash. The container in question is
956
         instantiated with two instrumented template arguments,
957
         with __gnu_cxx::throw_allocator_limit
958
         as the allocator type, and
959
         with __gnu_cxx::throw_type_limit as
960
         the value type. This allows the test to loop through
961
         conditional throw points.
962
       
963
 
964
     
965
         The general form is demonstrated in
966
         testsuite/23_containers/list/requirements/exception/basic.cc
967
         . The instantiating test object is __gnu_test::basic_safety and is detailed in testsuite/util/exception/safety.h.
968
       
969
     
970
 
971
 
972
     
973
       
974
         Generation Prohibited
975
       
976
 
977
       
978
         Exception generation tests. For each container, an object of
979
         that container is constructed and all member functions
980
         required to not throw exceptions are exercised. Included in
981
         these tests are member functions
982
         are iterator and const_iterator operations, erase, pop_front, pop_back, swap,
983
         and clear. The container in question is
984
         instantiated with two instrumented template arguments,
985
         with __gnu_cxx::throw_allocator_random
986
         as the allocator type, and
987
         with __gnu_cxx::throw_type_random as
988
         the value type. This test does not loop, an instead is sudden
989
         death: first error fails.
990
       
991
       
992
         The general form is demonstrated in
993
         testsuite/23_containers/list/requirements/exception/generation_prohibited.cc
994
         . The instantiating test object is __gnu_test::generation_prohibited and is detailed in testsuite/util/exception/safety.h.
995
       
996
     
997
 
998
 
999
     
1000
       
1001
         Propagation Consistent
1002
       
1003
 
1004
       
1005
         Container rollback on exception propagation tests. For
1006
         each container, an object of that container is constructed,
1007
         a specific member function that requires rollback to a previous
1008
         known good state is exercised in
1009
         a try block, and then any thrown
1010
         exceptions lead to error checking in the appropriate
1011
         catch block. The container is compared to
1012
         the container's last known good state using such parameters
1013
         as size, contents, and iterator references. Included in these
1014
         tests are member functions
1015
         are push_front, push_back, insert,
1016
         and rehash. The container in question is
1017
         instantiated with two instrumented template arguments,
1018
         with __gnu_cxx::throw_allocator_limit
1019
         as the allocator type, and
1020
         with __gnu_cxx::throw_type_limit as
1021
         the value type. This allows the test to loop through
1022
         conditional throw points.
1023
       
1024
 
1025
       
1026
         The general form demonstrated in
1027
         testsuite/23_containers/list/requirements/exception/propagation_coherent.cc
1028
         . The instantiating test object is __gnu_test::propagation_coherent and is detailed in testsuite/util/exception/safety.h.
1029
       
1030
     
1031
  
1032
 
1033
1034
 
1035
1036
 
1037
1038
 
1039

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.