|
1 /*********************************************************************************** |
|
2 test_algobase.cpp |
|
3 |
|
4 * Copyright (c) 1997 |
|
5 * Mark of the Unicorn, Inc. |
|
6 * |
|
7 * Permission to use, copy, modify, distribute and sell this software |
|
8 * and its documentation for any purpose is hereby granted without fee, |
|
9 * provided that the above copyright notice appear in all copies and |
|
10 * that both that copyright notice and this permission notice appear |
|
11 * in supporting documentation. Mark of the Unicorn makes no |
|
12 * representations about the suitability of this software for any |
|
13 * purpose. It is provided "as is" without express or implied warranty. |
|
14 |
|
15 ***********************************************************************************/ |
|
16 |
|
17 # include "Prefix.h" |
|
18 # if defined (EH_NEW_HEADERS) |
|
19 # ifdef __SUNPRO_CC |
|
20 # include <stdio.h> |
|
21 # endif |
|
22 #include <algorithm> |
|
23 # else |
|
24 #include <algo.h> |
|
25 # endif |
|
26 #include "Tests.h" |
|
27 #include "LeakCheck.h" |
|
28 #include "TestClass.h" |
|
29 |
|
30 // EH_USE_STD |
|
31 |
|
32 enum { kBufferSize = 100 }; |
|
33 |
|
34 struct test_uninitialized_copy |
|
35 { |
|
36 test_uninitialized_copy() |
|
37 : stuff( new TestClass[kBufferSize] ), end_of_stuff(stuff + kBufferSize) { |
|
38 gTestController.SetCurrentTestName("uninitialized_copy()"); |
|
39 } |
|
40 |
|
41 ~test_uninitialized_copy() { delete[] stuff; } |
|
42 |
|
43 void operator()( TestClass* buffer ) const |
|
44 { |
|
45 EH_STD::uninitialized_copy((TestClass*)stuff, (TestClass*)end_of_stuff, buffer ); |
|
46 EH_ASSERT( EH_STD::equal( (TestClass*)stuff, (TestClass*)end_of_stuff, buffer ) ); |
|
47 stl_destroy( buffer, buffer+kBufferSize ); |
|
48 } |
|
49 |
|
50 private: |
|
51 TestClass * stuff; |
|
52 TestClass * end_of_stuff; |
|
53 }; |
|
54 |
|
55 struct test_uninitialized_fill |
|
56 { |
|
57 test_uninitialized_fill() { |
|
58 gTestController.SetCurrentTestName("uninitialized_fill()"); |
|
59 } |
|
60 |
|
61 void operator()( TestClass* buffer ) const |
|
62 { |
|
63 TestClass* buf_end = buffer + kBufferSize; |
|
64 EH_STD::uninitialized_fill( buffer, buf_end, testValue ); |
|
65 for ( EH_CSTD::size_t i = 0; i < kBufferSize; i++ ) |
|
66 EH_ASSERT( buffer[i] == testValue ); |
|
67 stl_destroy( buffer, buf_end ); |
|
68 } |
|
69 private: |
|
70 TestClass testValue; |
|
71 }; |
|
72 |
|
73 struct test_uninitialized_fill_n |
|
74 { |
|
75 test_uninitialized_fill_n() { |
|
76 gTestController.SetCurrentTestName("uninitialized_fill_n()"); |
|
77 } |
|
78 void operator()( TestClass* buffer ) const |
|
79 { |
|
80 TestClass* end = buffer + kBufferSize; |
|
81 EH_STD::uninitialized_fill_n( buffer, (EH_CSTD::size_t)kBufferSize, testValue ); |
|
82 for ( EH_CSTD::size_t i = 0; i < kBufferSize; i++ ) |
|
83 EH_ASSERT( buffer[i] == testValue ); |
|
84 stl_destroy( buffer, end ); |
|
85 } |
|
86 private: |
|
87 TestClass testValue; |
|
88 }; |
|
89 |
|
90 void test_algobase() |
|
91 { |
|
92 // force alignment |
|
93 double arr[ sizeof(TestClass) * kBufferSize ]; |
|
94 TestClass* c = (TestClass*)arr; |
|
95 WeakCheck( c, test_uninitialized_copy() ); |
|
96 WeakCheck( c, test_uninitialized_fill() ); |
|
97 WeakCheck( c, test_uninitialized_fill_n() ); |
|
98 } |