| OLD | NEW |
| (Empty) |
| 1 /*************************************************************************** | |
| 2 * | |
| 3 * Copyright (C) 2013, International Business Machines | |
| 4 * Corporation and others. All Rights Reserved. | |
| 5 * | |
| 6 ************************************************************************/ | |
| 7 /** | |
| 8 * Usage: | |
| 9 * build against a configured (but not built) ICU. | |
| 10 * example: cc -O2 test_LETableReference.cpp -I. -I/xsrl/II/include -I/xsrl/E/ic
u/source/tools/ctestfw | |
| 11 */ | |
| 12 #include "unicode/utimer.h" | |
| 13 #include "LETableReference.h" | |
| 14 #include <stdio.h> | |
| 15 #include <stdlib.h> | |
| 16 | |
| 17 #define ITEM_COUNT 10000 | |
| 18 | |
| 19 long *items = 0; | |
| 20 | |
| 21 struct OneObject { | |
| 22 long items[ITEM_COUNT]; | |
| 23 }; | |
| 24 | |
| 25 struct Long { | |
| 26 long v; | |
| 27 }; | |
| 28 | |
| 29 struct CompObject { | |
| 30 Long items[ITEM_COUNT]; | |
| 31 }; | |
| 32 | |
| 33 | |
| 34 void time_null(void * /*ref*/) { | |
| 35 for(int i=0;i<ITEM_COUNT;i++) { | |
| 36 if(items[i]==2) { | |
| 37 return; | |
| 38 } | |
| 39 } | |
| 40 puts("error"); | |
| 41 abort(); | |
| 42 } | |
| 43 | |
| 44 void time_obj(void * ref) { | |
| 45 OneObject &obj = *((OneObject*)ref); | |
| 46 for(int i=0;i<ITEM_COUNT;i++) { | |
| 47 if(obj.items[i]==2) { | |
| 48 return; | |
| 49 } | |
| 50 } | |
| 51 puts("error"); | |
| 52 abort(); | |
| 53 } | |
| 54 void time_obj2(void * ref) { | |
| 55 long *items2 = ((OneObject*)ref)->items; | |
| 56 for(int i=0;i<ITEM_COUNT;i++) { | |
| 57 if(items2[i]==2) { | |
| 58 return; | |
| 59 } | |
| 60 } | |
| 61 puts("error"); | |
| 62 abort(); | |
| 63 } | |
| 64 | |
| 65 void time_letr1(void * ref) { | |
| 66 OneObject &obj = *((OneObject*)ref); | |
| 67 LETableReference data((const le_uint8*)ref, sizeof(OneObject)); | |
| 68 LEErrorCode success = LE_NO_ERROR; | |
| 69 | |
| 70 LEReferenceTo<OneObject> stuff(data, success); | |
| 71 if(LE_FAILURE(success)) { | |
| 72 puts("failure"); | |
| 73 abort(); | |
| 74 } | |
| 75 long *items2 = ((OneObject*)ref)->items; | |
| 76 for(int i=0;i<ITEM_COUNT;i++) { | |
| 77 if(items[i]==2) { | |
| 78 return; | |
| 79 } | |
| 80 } | |
| 81 puts("error"); | |
| 82 abort(); | |
| 83 } | |
| 84 | |
| 85 | |
| 86 void time_letr2(void * ref) { | |
| 87 OneObject &obj = *((OneObject*)ref); | |
| 88 LETableReference data((const le_uint8*)ref, sizeof(OneObject)); | |
| 89 LEErrorCode success = LE_NO_ERROR; | |
| 90 | |
| 91 long *items2 = ((OneObject*)ref)->items; | |
| 92 for(int i=0;i<ITEM_COUNT;i++) { | |
| 93 LEReferenceTo<OneObject> stuff(data, success); | |
| 94 if(LE_FAILURE(success)) { | |
| 95 puts("failure"); | |
| 96 abort(); | |
| 97 } | |
| 98 if(items[i]==2) { | |
| 99 return; | |
| 100 } | |
| 101 } | |
| 102 puts("error"); | |
| 103 abort(); | |
| 104 } | |
| 105 | |
| 106 static void time_letr3(void * ref) { | |
| 107 LETableReference data((const le_uint8*)ref, sizeof(OneObject)); | |
| 108 LEErrorCode success = LE_NO_ERROR; | |
| 109 LEReferenceTo<CompObject> comp(data, success); | |
| 110 LEReferenceToArrayOf<Long> longs(comp, success, (size_t)0, ITEM_COUNT); | |
| 111 if(LE_FAILURE(success)) { | |
| 112 puts("failure"); | |
| 113 abort(); | |
| 114 } | |
| 115 | |
| 116 for(int i=0;i<ITEM_COUNT;i++) { | |
| 117 const Long &item = longs.getObject(i, success); | |
| 118 if(LE_FAILURE(success)) { | |
| 119 puts("failure"); | |
| 120 abort(); | |
| 121 } | |
| 122 if(item.v==2) { | |
| 123 return; | |
| 124 } | |
| 125 } | |
| 126 puts("error"); | |
| 127 abort(); | |
| 128 } | |
| 129 | |
| 130 | |
| 131 int main() { | |
| 132 double runTime = 2.0; | |
| 133 printf("Test of LETableReference<> timing. %.1fs per run.\n", runTime); | |
| 134 items = new long[ITEM_COUNT]; | |
| 135 OneObject *oo = new OneObject(); | |
| 136 CompObject *oo2 = new CompObject(); | |
| 137 for(int i=0;i<ITEM_COUNT-1;i++) { | |
| 138 items[i] = oo->items[i] = oo2->items[i].v = (i%1024)+3; | |
| 139 } | |
| 140 items[ITEM_COUNT-1] = oo->items[ITEM_COUNT-1] = oo2->items[ITEM_COUNT-1].v = 2
; // last one | |
| 141 | |
| 142 puts("will call once.."); | |
| 143 time_letr3((void*)oo2); | |
| 144 puts("testing all.."); | |
| 145 | |
| 146 int32_t loopCount; | |
| 147 double time_taken; | |
| 148 | |
| 149 #define showTime(x,y) printf("%s:\ttesting...\r", #x); fflush(stdout); \ | |
| 150 time_taken = utimer_loopUntilDone(runTime, &loopCount, x, y); \ | |
| 151 printf("%s:\t%.1fs\t#%d\t%.1f/s\n", #x, time_taken, loopCount, loopCount/(doub
le)time_taken); | |
| 152 | |
| 153 // clear out cache | |
| 154 { | |
| 155 double oldTime = runTime; | |
| 156 runTime = 0.25; | |
| 157 showTime(time_null, NULL); | |
| 158 showTime(time_null, NULL); | |
| 159 showTime(time_null, NULL); | |
| 160 showTime(time_null, NULL); | |
| 161 runTime = oldTime; | |
| 162 } | |
| 163 puts("-- ready to start --"); | |
| 164 | |
| 165 | |
| 166 showTime(time_null, NULL); | |
| 167 showTime(time_obj, (void*)oo); | |
| 168 showTime(time_obj2, (void*)oo); | |
| 169 showTime(time_letr1, (void*)oo2); | |
| 170 showTime(time_letr2, (void*)oo2); | |
| 171 showTime(time_letr3, (void*)oo2); | |
| 172 showTime(time_null, NULL); | |
| 173 | |
| 174 delete [] items; | |
| 175 delete oo; | |
| 176 delete oo2; | |
| 177 } | |
| OLD | NEW |