| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987 |
- /*************************************************************************
- * *
- * ODER's Utilities Library. Copyright (C) 2008 Oleh Derevenko. *
- * All rights reserved. e-mail: [email protected] (change all "a" to "e") *
- * *
- * This library is free software; you can redistribute it and/or *
- * modify it under the terms of EITHER: *
- * (1) The GNU Lesser General Public License as published by the Free *
- * Software Foundation; either version 3 of the License, or (at *
- * your option) any later version. The text of the GNU Lesser *
- * General Public License is included with this library in the *
- * file LICENSE-LESSER.TXT. Since LGPL is the extension of GPL *
- * the text of GNU General Public License is also provided for *
- * your information in file LICENSE.TXT. *
- * (2) The BSD-style license that is included with this library in *
- * the file LICENSE-BSD.TXT. *
- * (3) The zlib/libpng license that is included with this library in *
- * the file LICENSE-ZLIB.TXT *
- * *
- * This library is distributed WITHOUT ANY WARRANTY, including implied *
- * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
- * See the files LICENSE.TXT and LICENSE-LESSER.TXT or LICENSE-BSD.TXT *
- * or LICENSE-ZLIB.TXT for more details. *
- * *
- *************************************************************************/
- #include <ou/platform.h>
- #if _OU_COMPILER == _OU_COMPILER_MSVC
- #pragma warning(disable:4786)
- #endif
- #include <ou/threadlocalstorage.h>
- #include <ou/atomic.h>
- #include <ou/atomicflags.h>
- #include <ou/simpleflags.h>
- #include <ou/flagsdefines.h>
- #include <ou/enumarrays.h>
- #include <ou/templates.h>
- #include <ou/typewrapper.h>
- #include <ou/customization.h>
- #include <ou/inttypes.h>
- #include <ou/macros.h>
- #include <ou/malloc.h>
- #include <ou/namespace.h>
- using namespace _OU_NAMESPACE;
- #include <stdio.h>
- #include <string.h>
- //////////////////////////////////////////////////////////////////////////
- typedef bool (*CFeatureTestProcedure)();
- bool TestSubsystem(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount,
- const unsigned int uiFeatureMax, const char *const *aszFeatureNames, CFeatureTestProcedure const *afnFeatureTests)
- {
- unsigned int nSuccessCount = 0;
-
- for (unsigned int uiSubsystemFeature = 0; uiSubsystemFeature != uiFeatureMax; ++uiSubsystemFeature)
- {
- const char *szFeatureName = aszFeatureNames[uiSubsystemFeature];
- printf("Testing %34s: ", szFeatureName);
-
- CFeatureTestProcedure fnTestProcedure = afnFeatureTests[uiSubsystemFeature];
- bool bTestResult = fnTestProcedure();
- printf("%s\n", bTestResult ? "success" : "*** failure ***");
-
- if (bTestResult)
- {
- nSuccessCount += 1;
- }
- }
-
- nOutSuccessCount = nSuccessCount;
- nOutTestCount = uiFeatureMax;
- return nSuccessCount == uiFeatureMax;
- }
- //////////////////////////////////////////////////////////////////////////
- bool g_bTestTLSAPIInitialized = false;
- HTLSKEY g_htkTestTLSKey;
- enum ETESTTLSVALUES
- {
- TTV_FIRSTVALUE,
- TTV_SECONDVALUE,
- TTV__MAX,
- };
- unsigned int g_uiTestTLSDestructorCallCount = 0;
- unsigned int g_uiTestTLSDestructorSuccessCount = 0;
- void _OU_CONVENTION_CALLBACK TestTlsSecondValueDestructor(void *pv_Value)
- {
- g_uiTestTLSDestructorCallCount += 1;
- if (pv_Value == (void *)(&TestTlsSecondValueDestructor))
- {
- g_uiTestTLSDestructorSuccessCount += 1;
- }
- }
- bool TestTls_Initialization()
- {
- bool bResult = false;
-
- do
- {
- if (!CTLSInitialization::InitializeTLSAPI(g_htkTestTLSKey, 1, 0))
- {
- break;
- }
- CTLSInitialization::FinalizeTLSAPI();
- if (!CTLSInitialization::InitializeTLSAPI(g_htkTestTLSKey, TTV__MAX, CTLSInitialization::SIF_MANUAL_CLEANUP_ON_THREAD_EXIT))
- {
- break;
- }
- g_bTestTLSAPIInitialized = true;
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestTls_GetSetValue()
- {
- bool bResult = false;
-
- do
- {
- tlsvaluetype vtFirstValue = CThreadLocalStorage::GetStorageValue(g_htkTestTLSKey, TTV_FIRSTVALUE);
- if (vtFirstValue != 0)
- {
- break;
- }
-
- tlsvaluetype vtSecondValue = CThreadLocalStorage::GetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE);
-
- if (vtSecondValue != 0)
- {
- break;
- }
- if (!CThreadLocalStorage::SetStorageValue(g_htkTestTLSKey, TTV_FIRSTVALUE, (tlsvaluetype)&TestTls_GetSetValue))
- {
- break;
- }
-
- if (!CThreadLocalStorage::SetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE, (tlsvaluetype)&TestTlsSecondValueDestructor, &TestTlsSecondValueDestructor))
- {
- break;
- }
- vtFirstValue = CThreadLocalStorage::GetStorageValue(g_htkTestTLSKey, TTV_FIRSTVALUE);
- if ((void *)vtFirstValue != &TestTls_GetSetValue)
- {
- break;
- }
- vtSecondValue = CThreadLocalStorage::GetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE);
- if ((void *)vtSecondValue != &TestTlsSecondValueDestructor)
- {
- break;
- }
-
- if (!CThreadLocalStorage::SetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE, 0, &TestTlsSecondValueDestructor))
- {
- break;
- }
- vtSecondValue = CThreadLocalStorage::GetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE);
-
- if (vtSecondValue != 0)
- {
- break;
- }
-
- if (!CThreadLocalStorage::SetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE, (tlsvaluetype)&TestTlsSecondValueDestructor, &TestTlsSecondValueDestructor))
- {
- break;
- }
-
- if (g_uiTestTLSDestructorCallCount != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestTls_UnsafeGetSetValue()
- {
- bool bResult = false;
-
- do
- {
- tlsvaluetype vtFirstValue = CThreadLocalStorage::UnsafeGetStorageValue(g_htkTestTLSKey, TTV_FIRSTVALUE);
-
- if ((void *)vtFirstValue != &TestTls_GetSetValue)
- {
- break;
- }
-
- tlsvaluetype vtSecondValue = CThreadLocalStorage::UnsafeGetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE);
-
- if ((void *)vtSecondValue != &TestTlsSecondValueDestructor)
- {
- break;
- }
- CThreadLocalStorage::UnsafeSetStorageValue(g_htkTestTLSKey, TTV_FIRSTVALUE, (tlsvaluetype)(size_t)(-1));
- CThreadLocalStorage::UnsafeSetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE, (tlsvaluetype)(size_t)(-1));
- vtFirstValue = CThreadLocalStorage::UnsafeGetStorageValue(g_htkTestTLSKey, TTV_FIRSTVALUE);
-
- if ((size_t)vtFirstValue != (size_t)(-1))
- {
- break;
- }
-
- vtSecondValue = CThreadLocalStorage::UnsafeGetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE);
-
- if ((size_t)vtSecondValue != (size_t)(-1))
- {
- break;
- }
-
- // Safe function used by intent !!!
- vtFirstValue = CThreadLocalStorage::GetStorageValue(g_htkTestTLSKey, TTV_FIRSTVALUE);
-
- if ((size_t)vtFirstValue != (size_t)(-1))
- {
- break;
- }
-
- // Safe function used by intent !!!
- vtSecondValue = CThreadLocalStorage::GetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE);
-
- if ((size_t)vtSecondValue != (size_t)(-1))
- {
- break;
- }
-
- CThreadLocalStorage::UnsafeSetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE, (tlsvaluetype)(&TestTlsSecondValueDestructor));
- if (g_uiTestTLSDestructorCallCount != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestTls_CleanupDestructor()
- {
- bool bResult = false;
-
- do
- {
- CTLSInitialization::CleanupOnThreadExit();
- if (g_uiTestTLSDestructorCallCount != 1 || g_uiTestTLSDestructorSuccessCount != 1)
- {
- break;
- }
-
- tlsvaluetype vtFirstValue = CThreadLocalStorage::GetStorageValue(g_htkTestTLSKey, TTV_FIRSTVALUE);
-
- if (vtFirstValue != 0)
- {
- break;
- }
-
- // Safe function used by intent !!!
- tlsvaluetype vtSecondValue = CThreadLocalStorage::GetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE);
-
- if (vtSecondValue != 0)
- {
- break;
- }
- g_uiTestTLSDestructorCallCount = 0;
- g_uiTestTLSDestructorSuccessCount = 0;
- CTLSInitialization::CleanupOnThreadExit();
-
- if (g_uiTestTLSDestructorCallCount != 0)
- {
- break;
- }
-
- if (!CThreadLocalStorage::SetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE, 0, &TestTlsSecondValueDestructor))
- {
- break;
- }
-
- CTLSInitialization::CleanupOnThreadExit();
-
- if (g_uiTestTLSDestructorCallCount != 0)
- {
- break;
- }
-
- if (!CThreadLocalStorage::SetStorageValue(g_htkTestTLSKey, TTV_SECONDVALUE, (tlsvaluetype)(size_t)(-1), &TestTlsSecondValueDestructor))
- {
- break;
- }
-
- if (g_uiTestTLSDestructorCallCount != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestTls_Finalization()
- {
- OU_ASSERT(g_bTestTLSAPIInitialized);
- bool bResult = false;
-
- do
- {
- CTLSInitialization::FinalizeTLSAPI();
-
- g_bTestTLSAPIInitialized = false;
- if (g_uiTestTLSDestructorCallCount != 1 || g_uiTestTLSDestructorSuccessCount != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- enum EOUTLSFEATURE
- {
- OHF__MIN,
-
- OHF_INITIALIZATION = OHF__MIN,
- OHF_GETSETVALUE,
- OHF_UNSAFEGETSETVALUE,
- OHF_CLEANUPDESTRUCTOR,
- OHF_FINALIZATION,
-
- OHF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUTLSFEATURE, OHF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestTls_Initialization, // OHF_INITIALIZATION
- &TestTls_GetSetValue, // OHF_GETSETVALUE,
- &TestTls_UnsafeGetSetValue, // OHF_UNSAFEGETSETVALUE,
- &TestTls_CleanupDestructor, // OHF_CLEANUPDESTRUCTOR,
- &TestTls_Finalization, // OHF_FINALIZATION,
- };
- static const CEnumUnsortedElementArray<EOUTLSFEATURE, OHF__MAX, CFeatureTestProcedure> g_afnTlsFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUTLSFEATURE, OHF__MAX, const char *>::m_aetElementArray[] =
- {
- "API Initialization", // OHF_INITIALIZATION
- "Get.../SetStorageValue", // OHF_GETSETVALUE,
- "UnsafeGet.../UnsafeSetStorageValue", // OHF_UNSAFEGETSETVALUE,
- "Storage Cleanup/Value Destructors", // OHF_CLEANUPDESTRUCTOR,
- "API Finalization", // OHF_FINALIZATION,
- };
- static const CEnumUnsortedElementArray<EOUTLSFEATURE, OHF__MAX, const char *> g_aszTlsFeatureTestNames;
- bool TestTLS(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- bool bResult = TestSubsystem(nOutSuccessCount, nOutTestCount, OHF__MAX, g_aszTlsFeatureTestNames.GetStoragePointer(), g_afnTlsFeatureTestProcedures.GetStoragePointer());
- if (g_bTestTLSAPIInitialized)
- {
- CTLSInitialization::FinalizeTLSAPI();
- }
-
- return bResult;
- }
- //////////////////////////////////////////////////////////////////////////
- bool TestAtomic_Increment()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = (atomicord32)(-1);
- // Putting function inside of conditional operator causes
- // incorrect code generation by GCC 4.0.1 on MacOS X Leopard 64 bit.
- atomicord32 aoIncrementFirstResult = AtomicIncrement(&aoStorage);
- if (aoIncrementFirstResult != 0 || aoStorage != (atomicord32)0)
- {
- break;
- }
-
- if (AtomicIncrement(&aoStorage) != (atomicord32)1 || aoStorage != (atomicord32)1)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_Decrement()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = (atomicord32)1;
-
- // Putting function inside of conditional operator causes
- // incorrect code generation by GCC 4.0.1 on MacOS X Leopard 64 bit.
- atomicord32 aoDecrementFirstResult = AtomicDecrement(&aoStorage);
- if (aoDecrementFirstResult != (atomicord32)0 || aoStorage != (atomicord32)0)
- {
- break;
- }
-
- if (AtomicDecrement(&aoStorage) != (atomicord32)(-1) || aoStorage != (atomicord32)(-1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_IncrementNoResult()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = (atomicord32)(-1);
-
- AtomicIncrementNoResult(&aoStorage);
- if (aoStorage != (atomicord32)0)
- {
- break;
- }
-
- AtomicIncrementNoResult(&aoStorage);
- if (aoStorage != (atomicord32)1)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_DecrementNoResult()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = (atomicord32)1;
-
- AtomicDecrementNoResult(&aoStorage);
- if (aoStorage != (atomicord32)0)
- {
- break;
- }
-
- AtomicDecrementNoResult(&aoStorage);
- if (aoStorage != (atomicord32)(-1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_Exchange()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = 0;
- if (AtomicExchange(&aoStorage, (atomicord32)1) != 0 || aoStorage != (atomicord32)1)
- {
- break;
- }
-
- if (AtomicExchange(&aoStorage, (atomicord32)(-1)) != (atomicord32)1 || aoStorage != (atomicord32)(-1))
- {
- break;
- }
-
- if (AtomicExchange(&aoStorage, 0) != (atomicord32)(-1) || aoStorage != 0)
- {
- break;
- }
-
- if (AtomicExchange(&aoStorage, 0) != 0 || aoStorage != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_ExchangeAdd()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = 0;
- if (AtomicExchangeAdd(&aoStorage, (atomicord32)1) != 0 || aoStorage != (atomicord32)1)
- {
- break;
- }
-
- if (AtomicExchangeAdd(&aoStorage, (atomicord32)(-2)) != 1 || aoStorage != (atomicord32)(-1))
- {
- break;
- }
-
- if (AtomicExchangeAdd(&aoStorage, (atomicord32)1) != (atomicord32)(-1) || aoStorage != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_ExchangeAddNoResult()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = 0;
-
- AtomicExchangeAddNoResult(&aoStorage, (atomicord32)1);
-
- if (aoStorage != (atomicord32)1)
- {
- break;
- }
-
- AtomicExchangeAddNoResult(&aoStorage, (atomicord32)(-2));
- if (aoStorage != (atomicord32)(-1))
- {
- break;
- }
-
- AtomicExchangeAddNoResult(&aoStorage, (atomicord32)1);
-
- if (aoStorage != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_CompareExchange()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = 0;
- if (AtomicCompareExchange(&aoStorage, 1, 1) || aoStorage != 0)
- {
- break;
- }
-
- if (!AtomicCompareExchange(&aoStorage, 0, 1) || aoStorage != 1)
- {
- break;
- }
-
- if (!AtomicCompareExchange(&aoStorage, 1, 1) || aoStorage != 1)
- {
- break;
- }
-
- if (!AtomicCompareExchange(&aoStorage, 1, (atomicord32)(-1)) || aoStorage != (atomicord32)(-1))
- {
- break;
- }
-
- if (AtomicCompareExchange(&aoStorage, 1, (atomicord32)(-1)) || aoStorage != (atomicord32)(-1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- const atomicord32 g_aoBitmask = (atomicord32)(OU_INT32_MIN + 1);
- bool TestAtomic_And()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = (atomicord32)OU_UINT32_MAX;
- if (AtomicAnd(&aoStorage, g_aoBitmask) != (atomicord32)OU_UINT32_MAX || aoStorage != g_aoBitmask)
- {
- break;
- }
- if (AtomicAnd(&aoStorage, 0) != g_aoBitmask || aoStorage != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_Or()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = 0;
-
- if (AtomicOr(&aoStorage, g_aoBitmask) != 0 || aoStorage != g_aoBitmask)
- {
- break;
- }
-
- if (AtomicOr(&aoStorage, (atomicord32)OU_UINT32_MAX) != g_aoBitmask || aoStorage != (atomicord32)OU_UINT32_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_Xor()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = 0;
-
- if (AtomicXor(&aoStorage, g_aoBitmask) != 0 || aoStorage != g_aoBitmask)
- {
- break;
- }
-
- if (AtomicXor(&aoStorage, (atomicord32)OU_UINT32_MAX) != g_aoBitmask || aoStorage != (atomicord32)(OU_UINT32_MAX ^ g_aoBitmask))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_AndNoResult()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = (atomicord32)OU_UINT32_MAX;
-
- AtomicAndNoResult(&aoStorage, g_aoBitmask);
- if (aoStorage != g_aoBitmask)
- {
- break;
- }
-
- AtomicAndNoResult(&aoStorage, 0);
- if (aoStorage != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_OrNoResult()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = 0;
-
- AtomicOrNoResult(&aoStorage, g_aoBitmask);
- if (aoStorage != g_aoBitmask)
- {
- break;
- }
-
- AtomicOrNoResult(&aoStorage, (atomicord32)OU_UINT32_MAX);
- if (aoStorage != (atomicord32)OU_UINT32_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_XorNoResult()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicord32 aoStorage = 0;
-
- AtomicXorNoResult(&aoStorage, g_aoBitmask);
- if (aoStorage != g_aoBitmask)
- {
- break;
- }
-
- AtomicXorNoResult(&aoStorage, (atomicord32)OU_UINT32_MAX);
- if (aoStorage != (atomicord32)(OU_UINT32_MAX ^ g_aoBitmask))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_ExchangePointer()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicptr apStorage = NULL;
- if (AtomicExchangePointer(&apStorage, (atomicptr)(&TestAtomic_ExchangePointer)) != NULL || apStorage != (atomicptr)(&TestAtomic_ExchangePointer))
- {
- break;
- }
-
- if (AtomicExchangePointer(&apStorage, (atomicptr)(&apStorage)) != (atomicptr)(&TestAtomic_ExchangePointer) || apStorage != (atomicptr)(&apStorage))
- {
- break;
- }
-
- if (AtomicExchangePointer(&apStorage, NULL) != (atomicptr)(&apStorage) || apStorage != NULL)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomic_CompareExchangePointer()
- {
- bool bResult = false;
-
- do
- {
- volatile atomicptr apStorage = NULL;
-
- if (AtomicCompareExchangePointer(&apStorage, (atomicptr)(&TestAtomic_CompareExchangePointer), (atomicptr)(&TestAtomic_CompareExchangePointer)) || apStorage != NULL)
- {
- break;
- }
-
- if (!AtomicCompareExchangePointer(&apStorage, NULL, (atomicptr)(&TestAtomic_CompareExchangePointer)) || apStorage != (atomicptr)(&TestAtomic_CompareExchangePointer))
- {
- break;
- }
-
- if (!AtomicCompareExchangePointer(&apStorage, (atomicptr)(&TestAtomic_CompareExchangePointer), (atomicptr)(&apStorage)) || apStorage != (atomicptr)(&apStorage))
- {
- break;
- }
-
- if (!AtomicCompareExchangePointer(&apStorage, (atomicptr)(&apStorage), (atomicptr)(&apStorage)) || apStorage != (atomicptr)(&apStorage))
- {
- break;
- }
-
- if (AtomicCompareExchangePointer(&apStorage, NULL, NULL) || apStorage != (atomicptr)(&apStorage))
- {
- break;
- }
-
- if (!AtomicCompareExchangePointer(&apStorage, (atomicptr)(&apStorage), NULL) || apStorage != NULL)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- enum EOUATOMICFEATURE
- {
- OOF__MIN,
-
- OOF_INCREMENT = OOF__MIN,
- OOF_DECREMENT,
- OOF_INCREMENTNORESULT,
- OOF_DECREMENTNORESULT,
- OOF_EXCHANGE,
- OOF_EXCHANGEADD,
- OOF_EXCHANGEADDNORESULT,
- OOF_COMPAREEXCHANGE,
- OOF_AND,
- OOF_OR,
- OOF_XOR,
- OOF_ANDNORESULT,
- OOF_ORNORESULT,
- OOF_XORNORESULT,
- OOF_EXCHANGEPOINTER,
- OOF_COMPAREEXCHANGEPOINTER,
-
- OOF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUATOMICFEATURE, OOF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestAtomic_Increment, // OOF_INCREMENT,
- &TestAtomic_Decrement, // OOF_DECREMENT,
- &TestAtomic_IncrementNoResult, // OOF_INCREMENTNORESULT,
- &TestAtomic_DecrementNoResult, // OOF_DECREMENTNORESULT,
- &TestAtomic_Exchange, // OOF_EXCHANGE,
- &TestAtomic_ExchangeAdd, // OOF_EXCHANGEADD,
- &TestAtomic_ExchangeAddNoResult, // OOF_EXCHANGEADDNORESULT,
- &TestAtomic_CompareExchange, // OOF_COMPAREEXCHANGE,
- &TestAtomic_And, // OOF_AND,
- &TestAtomic_Or, // OOF_OR,
- &TestAtomic_Xor, // OOF_XOR,
- &TestAtomic_AndNoResult, // OOF_ANDNORESULT,
- &TestAtomic_OrNoResult, // OOF_ORNORESULT,
- &TestAtomic_XorNoResult, // OOF_XORNORESULT,
- &TestAtomic_ExchangePointer, // OOF_EXCHANGEPOINTER,
- &TestAtomic_CompareExchangePointer, // OOF_COMPAREEXCHANGEPOINTER,
- };
- static const CEnumUnsortedElementArray<EOUATOMICFEATURE, OOF__MAX, CFeatureTestProcedure> g_afnAtomicFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUATOMICFEATURE, OOF__MAX, const char *>::m_aetElementArray[] =
- {
- "AtomicIncrement", // OOF_INCREMENT,
- "AtomicDecrement", // OOF_DECREMENT,
- "AtomicIncrementNoResult", // OOF_INCREMENTNORESULT,
- "AtomicDecrementNoResult", // OOF_DECREMENTNORESULT,
- "AtomicExchange", // OOF_EXCHANGE,
- "AtomicExchangeAdd", // OOF_EXCHANGEADD,
- "AtomicExchangeAddNoResult", // OOF_EXCHANGEADDNORESULT,
- "AtomicCompareExchange", // OOF_COMPAREEXCHANGE,
- "AtomicAnd", // OOF_AND,
- "AtomicOr", // OOF_OR,
- "AtomicXor", // OOF_XOR,
- "AtomicAndNoResult", // OOF_ANDNORESULT,
- "AtomicOrNoResult", // OOF_ORNORESULT,
- "AtomicXorNoResult", // OOF_XORNORESULT,
- "AtomicExchangePointer", // OOF_EXCHANGEPOINTER,
- "AtomicCompareExchangePointer", // OOF_COMPAREEXCHANGEPOINTER,
- };
- static const CEnumUnsortedElementArray<EOUATOMICFEATURE, OOF__MAX, const char *> g_aszAtomicFeatureTestNames;
- bool TestAtomic(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- bool bResult = false;
- nOutSuccessCount = 0;
- nOutTestCount = OOF__MAX;
- bool bAPIInitialized = false;
-
- do
- {
- if (!InitializeAtomicAPI())
- {
- break;
- }
-
- bAPIInitialized = true;
- if (!TestSubsystem(nOutSuccessCount, nOutTestCount, OOF__MAX, g_aszAtomicFeatureTestNames.GetStoragePointer(), g_afnAtomicFeatureTestProcedures.GetStoragePointer()))
- {
- break;
- }
- bResult = true;
- }
- while (false);
-
- if (bAPIInitialized)
- {
- FinalizeAtomicAPI();
- }
- return bResult;
- }
- //////////////////////////////////////////////////////////////////////////
- const atomicord32 g_aoTestValue32 = (atomicord32)0xA5A5A5A5;
- const atomicord32 g_aoTestMask32 = (atomicord32)0xC6C6C6C6;
- const atomicord32 g_aoTestBit32 = (atomicord32)OU_INT32_MIN;
- const atomicord32 g_aoTestAnotherBit32 = (atomicord32)((uint32ou)OU_INT32_MIN >> 1);
- bool TestAtomicFlags_Constructors()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(CAtomicFlags::value_type) != sizeof(atomicord32))
- {
- break;
- }
- CAtomicFlags afEmptyFlags;
- if (afEmptyFlags.QueryFlagsAllValues())
- {
- break;
- }
- CAtomicFlags afFullFlags(OU_UINT32_MAX);
-
- if (afFullFlags.QueryFlagsAllValues() != (atomicord32)OU_UINT32_MAX)
- {
- break;
- }
- CAtomicFlags afCopyOfFullFlags(afFullFlags);
- if (afCopyOfFullFlags.QueryFlagsAllValues() != (atomicord32)OU_UINT32_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_AssignFlagsAllValues()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags;
- afTestFlags.AssignFlagsAllValues(OU_UINT32_MAX);
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)OU_UINT32_MAX)
- {
- break;
- }
- afTestFlags.AssignFlagsAllValues(0);
- if (afTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_QueryFlagsAllValues()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
-
- if (afTestFlags.QueryFlagsAllValues() != g_aoTestValue32)
- {
- break;
- }
- // Double check to be sure ;-)
- if (afTestFlags.QueryFlagsAllValues() != g_aoTestValue32)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_SetFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
- afTestFlags.SetFlagsMaskValue(g_aoTestMask32, true);
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(g_aoTestValue32 | g_aoTestMask32))
- {
- break;
- }
- afTestFlags.SetFlagsMaskValue(g_aoTestValue32, false);
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(~g_aoTestValue32 & g_aoTestMask32))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_SignalFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
-
- afTestFlags.SignalFlagsMaskValue(g_aoTestMask32);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(g_aoTestValue32 | g_aoTestMask32))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_DropFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
-
- afTestFlags.DropFlagsMaskValue(g_aoTestMask32);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(g_aoTestValue32 & ~g_aoTestMask32))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_ToggleSingleFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
-
- bool bPreviousValue = afTestFlags.ToggleSingleFlagValue(g_aoTestBit32);
-
- if (bPreviousValue != ((g_aoTestValue32 & g_aoTestBit32) != 0) || afTestFlags.QueryFlagsAllValues() != (atomicord32)(g_aoTestValue32 ^ g_aoTestBit32))
- {
- break;
- }
- bool bAnotherPreviousValue = afTestFlags.ToggleSingleFlagValue(g_aoTestBit32);
-
- if (bAnotherPreviousValue == bPreviousValue || afTestFlags.QueryFlagsAllValues() != g_aoTestValue32)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_ModifySingleFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
-
- bool bFirstModification = afTestFlags.ModifySingleFlagValue(g_aoTestBit32, true);
-
- if (bFirstModification != ((g_aoTestValue32 & g_aoTestBit32) != g_aoTestBit32) || afTestFlags.QueryFlagsAllValues() != (atomicord32)(g_aoTestValue32 | g_aoTestBit32))
- {
- break;
- }
-
- bool bAnotherModification = afTestFlags.ModifySingleFlagValue(g_aoTestBit32, bFirstModification);
-
- if (bAnotherModification == bFirstModification || afTestFlags.QueryFlagsAllValues() != (bFirstModification ? (atomicord32)(g_aoTestValue32 | g_aoTestBit32) : (atomicord32)(g_aoTestValue32 & ~g_aoTestBit32)))
- {
- break;
- }
- bool bYetAnotherModification = afTestFlags.ModifySingleFlagValue(g_aoTestBit32, bAnotherModification);
- if (bYetAnotherModification != bAnotherModification || afTestFlags.QueryFlagsAllValues() != (bAnotherModification ? (atomicord32)(g_aoTestValue32 | g_aoTestBit32) : (atomicord32)(g_aoTestValue32 & ~g_aoTestBit32)))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_AssignFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
- atomicord32 aoPreviousFlags = afTestFlags.AssignFlagsByMask(g_aoTestMask32, g_aoTestMask32);
- const atomicord32 aoNewFlags = (g_aoTestValue32 & ~g_aoTestMask32) | g_aoTestMask32;
- if (aoPreviousFlags != g_aoTestValue32 || afTestFlags.QueryFlagsAllValues() != aoNewFlags)
- {
- break;
- }
- atomicord32 aoAnotherPreviousFlags = afTestFlags.AssignFlagsByMask(g_aoTestValue32, 0);
- const atomicord32 aoAnotherNewFlags = aoNewFlags & ~g_aoTestValue32;
- if (aoAnotherPreviousFlags != aoNewFlags || afTestFlags.QueryFlagsAllValues() != aoAnotherNewFlags)
- {
- break;
- }
-
- atomicord32 aoYetAnotherPreviousFlags = afTestFlags.AssignFlagsByMask(g_aoTestMask32, g_aoTestMask32 & g_aoTestValue32);
- OU_ASSERT((g_aoTestMask32 & g_aoTestValue32) != 0); // Test degeneration
-
- const atomicord32 aoYetAnotherNewFlags = (aoAnotherNewFlags & ~g_aoTestMask32) | (g_aoTestMask32 & g_aoTestValue32);
- OU_ASSERT(aoYetAnotherNewFlags != (atomicord32)OU_UINT32_MAX); // Test degeneration
-
- if (aoYetAnotherPreviousFlags != aoAnotherNewFlags || afTestFlags.QueryFlagsAllValues() != aoYetAnotherNewFlags)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_AlterFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
-
- bool bWasModification = afTestFlags.AlterFlagsByMask(g_aoTestMask32, g_aoTestMask32);
-
- const atomicord32 aoNewFlags = (g_aoTestValue32 & ~g_aoTestMask32) | g_aoTestMask32;
-
- if (bWasModification != ((g_aoTestValue32 & g_aoTestMask32) != g_aoTestMask32) || afTestFlags.QueryFlagsAllValues() != aoNewFlags)
- {
- break;
- }
-
- bool bWasAnotherModification = afTestFlags.AlterFlagsByMask(g_aoTestValue32, 0);
-
- const atomicord32 aoAnotherNewFlags = aoNewFlags & ~g_aoTestValue32;
-
- if (bWasAnotherModification != ((aoNewFlags & g_aoTestValue32) != 0) || afTestFlags.QueryFlagsAllValues() != aoAnotherNewFlags)
- {
- break;
- }
-
- bool bWasAnotherModificationRepeated = afTestFlags.AlterFlagsByMask(g_aoTestValue32, 0);
-
- if (bWasAnotherModificationRepeated || afTestFlags.QueryFlagsAllValues() != aoAnotherNewFlags)
- {
- break;
- }
-
- bool bWasYetAnotherModification = afTestFlags.AlterFlagsByMask(g_aoTestMask32, g_aoTestMask32 & g_aoTestValue32);
- OU_ASSERT((g_aoTestMask32 & g_aoTestValue32) != 0); // Test degeneration
-
- const atomicord32 aoYetAnotherNewFlags = (aoAnotherNewFlags & ~g_aoTestMask32) | (g_aoTestMask32 & g_aoTestValue32);
- OU_ASSERT(aoYetAnotherNewFlags != (atomicord32)OU_UINT32_MAX); // Test degeneration
-
- if (bWasYetAnotherModification != ((aoAnotherNewFlags & g_aoTestMask32) != (g_aoTestMask32 & g_aoTestValue32)) || afTestFlags.QueryFlagsAllValues() != aoYetAnotherNewFlags)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_GetFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
-
- if (afTestFlags.GetFlagsMaskValue(g_aoTestMask32) != ((g_aoTestValue32 & g_aoTestMask32) != 0))
- {
- break;
- }
-
- if (afTestFlags.GetFlagsMaskValue(~g_aoTestValue32))
- {
- break;
- }
-
- if (!afTestFlags.GetFlagsMaskValue(OU_UINT32_MAX))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_QueryFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
-
- if (afTestFlags.QueryFlagsByMask(g_aoTestMask32) != (atomicord32)(g_aoTestValue32 & g_aoTestMask32))
- {
- break;
- }
-
- if (afTestFlags.QueryFlagsByMask(0))
- {
- break;
- }
-
- if (afTestFlags.QueryFlagsByMask(OU_UINT32_MAX) != g_aoTestValue32)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_OnlySignalSingleFlagOutOfMask()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(g_aoTestValue32);
- OU_ASSERT(g_aoTestValue32 != 0); // Test degeneration
-
- if (afTestFlags.OnlySignalSingleFlagOutOfMask(OU_UINT32_MAX, g_aoTestBit32))
- {
- break;
- }
- if (afTestFlags.QueryFlagsAllValues() != g_aoTestValue32)
- {
- break;
- }
-
- afTestFlags.AssignFlagsAllValues(0);
- if (!afTestFlags.OnlySignalSingleFlagOutOfMask(g_aoTestBit32, g_aoTestBit32))
- {
- break;
- }
-
- if (afTestFlags.QueryFlagsAllValues() != g_aoTestBit32)
- {
- break;
- }
-
- if (afTestFlags.OnlySignalSingleFlagOutOfMask(g_aoTestBit32, g_aoTestBit32))
- {
- break;
- }
-
- if (afTestFlags.QueryFlagsAllValues() != g_aoTestBit32)
- {
- break;
- }
-
- if (afTestFlags.OnlySignalSingleFlagOutOfMask(OU_UINT32_MAX, g_aoTestAnotherBit32))
- {
- break;
- }
-
- if (afTestFlags.QueryFlagsAllValues() != g_aoTestBit32)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumSetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags;
-
- afTestFlags.EnumSetEnumeratedFlagValue(1, 0, OU_UINT32_BITS, true);
- if (afTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- afTestFlags.EnumSetEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS, true);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- afTestFlags.EnumSetEnumeratedFlagValue(1, 0, OU_UINT32_BITS, false);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)OU_INT32_MIN)
- {
- break;
- }
-
- afTestFlags.EnumSetEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS, false);
-
- if (afTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumSignalEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags;
-
- afTestFlags.EnumSignalEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (afTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- afTestFlags.EnumSignalEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- afTestFlags.EnumSignalEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- afTestFlags.EnumSignalEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumDropEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(OU_UINT32_MAX);
-
- afTestFlags.EnumDropEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_UINT32_MAX ^ 1))
- {
- break;
- }
-
- afTestFlags.EnumDropEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)~(OU_INT32_MIN + 1))
- {
- break;
- }
-
- afTestFlags.EnumDropEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)~(OU_INT32_MIN + 1))
- {
- break;
- }
-
- afTestFlags.EnumDropEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)~(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumToggleEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags;
-
- bool bToggleFirstResult = afTestFlags.EnumToggleEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (bToggleFirstResult || afTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bToggleSecondResult = afTestFlags.EnumToggleEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (bToggleSecondResult || afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bool bToggleThirdResult = afTestFlags.EnumToggleEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (!bToggleThirdResult || afTestFlags.QueryFlagsAllValues() != (atomicord32)OU_INT32_MIN)
- {
- break;
- }
-
- bool bToggleFourthResult = afTestFlags.EnumToggleEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (!bToggleFourthResult || afTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumModifyEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags;
-
- bool bModifyFirstResult = afTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT32_BITS, true);
-
- if (!bModifyFirstResult || afTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bModifySecondResult = afTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS, true);
-
- if (!bModifySecondResult || afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bool bModifyThirdResult = afTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT32_BITS, true);
-
- if (bModifyThirdResult || afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bool bModifyFourthResult = afTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS, true);
-
- if (bModifyFourthResult || afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bool bModifyFifthResult = afTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT32_BITS, false);
-
- if (!bModifyFifthResult || afTestFlags.QueryFlagsAllValues() != (atomicord32)OU_INT32_MIN)
- {
- break;
- }
-
- bool bModifySixthResult = afTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS, false);
-
- if (!bModifySixthResult || afTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumSignalFirstEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags;
- bool bFirstResult = afTestFlags.EnumSignalFirstEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
- if (!bFirstResult || afTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bSecondResult = afTestFlags.EnumSignalFirstEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (bSecondResult || afTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bThirdResult = afTestFlags.EnumSignalFirstEnumeratedFlagValue(2, 0, OU_UINT32_BITS - 1);
-
- if (!bThirdResult || afTestFlags.QueryFlagsAllValues() != 3)
- {
- break;
- }
-
- bool bFourthResult = afTestFlags.EnumSignalFirstEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (bFourthResult || afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_INT32_MIN + 3))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumSignalLastEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags;
-
- bool bFirstResult = afTestFlags.EnumSignalLastEnumeratedFlagValue(1, 0, 1);
-
- if (!bFirstResult || afTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bSecondResult = afTestFlags.EnumSignalLastEnumeratedFlagValue(1, 0, 1);
-
- if (bSecondResult || afTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bThirdResult = afTestFlags.EnumSignalLastEnumeratedFlagValue(1, 1, 2);
-
- if (!bThirdResult || afTestFlags.QueryFlagsAllValues() != 3)
- {
- break;
- }
-
- bool bFourthResult = afTestFlags.EnumSignalLastEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (bFourthResult || afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_INT32_MIN + 3))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumGetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags((atomicord32)(OU_INT32_MIN + 1));
-
- if (!afTestFlags.EnumGetEnumeratedFlagValue(1, 0, OU_UINT32_BITS))
- {
- break;
- }
-
- if (afTestFlags.EnumGetEnumeratedFlagValue(2, 0, OU_UINT32_BITS - 1))
- {
- break;
- }
-
- if (afTestFlags.EnumGetEnumeratedFlagValue(1, 1, OU_UINT32_BITS - 1))
- {
- break;
- }
-
- if (!afTestFlags.EnumGetEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumFindFirstEnumeratedFlag()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags((atomicord32)(OU_INT32_MIN + 1));
- unsigned int uiFirstResult = afTestFlags.EnumFindFirstEnumeratedFlag(1, OU_UINT32_BITS);
- if (uiFirstResult != 0)
- {
- break;
- }
- unsigned int uiSecondResult = afTestFlags.EnumFindFirstEnumeratedFlag(2, OU_UINT32_BITS - 1);
- if (uiSecondResult != OU_UINT32_BITS - 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumAllSignalEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags;
-
- afTestFlags.EnumAllSignalEnumeratedFlags(1, 1);
- if (afTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
- afTestFlags.EnumAllSignalEnumeratedFlags(4, OU_UINT32_BITS - 2);
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_UINT32_MAX ^ 2))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumAllDropEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags(OU_UINT32_MAX);
-
- afTestFlags.EnumAllDropEnumeratedFlags(1, 1);
-
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(OU_UINT32_MAX ^ 1))
- {
- break;
- }
-
- afTestFlags.EnumAllDropEnumeratedFlags(4, OU_UINT32_BITS - 2);
-
- if (afTestFlags.QueryFlagsAllValues() != 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumAllQueryEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags((atomicord32)(OU_INT32_MIN + 1));
-
- atomicord32 aoFirstResult = afTestFlags.EnumAllQueryEnumeratedFlags(1, OU_UINT32_BITS);
- if (aoFirstResult != (atomicord32)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- atomicord32 aoSecondResult = afTestFlags.EnumAllQueryEnumeratedFlags(2, OU_UINT32_BITS - 1);
- if (aoSecondResult != (atomicord32)(OU_INT32_MIN))
- {
- break;
- }
-
- atomicord32 aoThirdResult = afTestFlags.EnumAllQueryEnumeratedFlags(2, OU_UINT32_BITS - 2);
- if (aoThirdResult != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_EnumAnyGetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags((atomicord32)(OU_INT32_MIN + 1));
-
- bool bFirstResult = afTestFlags.EnumAnyGetEnumeratedFlagValue(1, OU_UINT32_BITS);
- if (!bFirstResult)
- {
- break;
- }
-
- bool bSecondResult = afTestFlags.EnumAnyGetEnumeratedFlagValue(2, OU_UINT32_BITS - 1);
- if (!bSecondResult)
- {
- break;
- }
-
- bool bThirdResult = afTestFlags.EnumAnyGetEnumeratedFlagValue(2, OU_UINT32_BITS - 2);
- if (bThirdResult)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_StoreFlagsEnumeratedValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags;
- afTestFlags.StoreFlagsEnumeratedValue(0x03, 1, 2);
- if (afTestFlags.QueryFlagsAllValues() != (atomicord32)(2 << 1))
- {
- break;
- }
-
- afTestFlags.StoreFlagsEnumeratedValue(0x03, OU_UINT32_BITS - 2, 3);
-
- if (afTestFlags.QueryFlagsAllValues() != ((atomicord32)(2 << 1) | (atomicord32)(OU_INT32_MIN | (OU_INT32_MIN >> 1))))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestAtomicFlags_RetrieveFlagsEnumeratedValue()
- {
- bool bResult = false;
-
- do
- {
- CAtomicFlags afTestFlags((atomicord32)(OU_INT32_MIN + 1));
-
- unsigned int aoFirstResult = afTestFlags.RetrieveFlagsEnumeratedValue(0x3, 1);
- if (aoFirstResult != 0)
- {
- break;
- }
-
- unsigned int aoSecondResult = afTestFlags.RetrieveFlagsEnumeratedValue(0x3, OU_UINT32_BITS - 2);
- if (aoSecondResult != 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- enum EOUATOMICFLAGSFEATURE
- {
- OAF__MIN,
-
- OAF_CONSTRUCTORS = OAF__MIN,
- OAF_ASSIGNFLAGSALLVALUES,
- OAF_QUERYFLAGSALLVALUES,
- OAF_SETFLAGSMASKVALUE,
- OAF_SIGNALFLAGSMASKVALUE,
- OAF_DROPFLAGSMASKVALUE,
- OAF_TOGGLESINGLEFLAGVALUE,
- OAF_MODIFYSINGLEFLAGVALUE,
- OAF_ASSIGNFLAGSBYMASK,
- OAF_ALTERFLAGSBYMASK,
- OAF_GETFLAGSMASKVALUE,
- OAF_QUERYFLAGSBYMASK,
- OAF_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- OAF_ENUMSETENUMERATEDFLAGVALUE,
- OAF_ENUMSIGNALENUMERATEDFLAGVALUE,
- OAF_ENUMDROPENUMERATEDFLAGVALUE,
- OAF_ENUMTOGGLEENUMERATEDFLAGVALUE,
- OAF_ENUMMODIFYENUMERATEDFLAGVALUE,
- OAF_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- OAF_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- OAF_ENUMGETENUMERATEDFLAGVALUE,
- OAF_ENUMFINDFIRSTENUMERATEDFLAG,
- OAF_ENUMALLSIGNALENUMERATEDFLAGS,
- OAF_ENUMALLDROPENUMERATEDFLAGS,
- OAF_ENUMALLQUERYENUMERATEDFLAGS,
- OAF_ENUMANYGETENUMERATEDFLAGVALUE,
- OAF_STOREFLAGSENUMERATEDVALUE,
- OAF_RETRIEVEFLAGSENUMERATEDVALUE,
- OAF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUATOMICFLAGSFEATURE, OAF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestAtomicFlags_Constructors, // OAF_CONSTRUCTORS
- &TestAtomicFlags_AssignFlagsAllValues, // OAF_ASSIGNFLAGSALLVALUES,
- &TestAtomicFlags_QueryFlagsAllValues, // OAF_QUERYFLAGSALLVALUES,
- &TestAtomicFlags_SetFlagsMaskValue, // OAF_SETFLAGSMASKVALUE,
- &TestAtomicFlags_SignalFlagsMaskValue, // OAF_SIGNALFLAGSMASKVALUE,
- &TestAtomicFlags_DropFlagsMaskValue, // OAF_DROPFLAGSMASKVALUE,
- &TestAtomicFlags_ToggleSingleFlagValue, // OAF_TOGGLESINGLEFLAGVALUE,
- &TestAtomicFlags_ModifySingleFlagValue, // OAF_MODIFYSINGLEFLAGVALUE,
- &TestAtomicFlags_AssignFlagsByMask, // OAF_ASSIGNFLAGSBYMASK,
- &TestAtomicFlags_AlterFlagsByMask, // OAF_ALTERFLAGSBYMASK,
- &TestAtomicFlags_GetFlagsMaskValue, // OAF_GETFLAGSMASKVALUE,
- &TestAtomicFlags_QueryFlagsByMask, // OAF_QUERYFLAGSBYMASK,
- &TestAtomicFlags_OnlySignalSingleFlagOutOfMask, // OAF_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- &TestAtomicFlags_EnumSetEnumeratedFlagValue, // OAF_ENUMSETENUMERATEDFLAGVALUE,
- &TestAtomicFlags_EnumSignalEnumeratedFlagValue, // OAF_ENUMSIGNALENUMERATEDFLAGVALUE,
- &TestAtomicFlags_EnumDropEnumeratedFlagValue, // OAF_ENUMDROPENUMERATEDFLAGVALUE,
- &TestAtomicFlags_EnumToggleEnumeratedFlagValue, // OAF_ENUMTOGGLEENUMERATEDFLAGVALUE,
- &TestAtomicFlags_EnumModifyEnumeratedFlagValue, // OAF_ENUMMODIFYENUMERATEDFLAGVALUE,
- &TestAtomicFlags_EnumSignalFirstEnumeratedFlagValue, // OAF_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- &TestAtomicFlags_EnumSignalLastEnumeratedFlagValue, // OAF_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- &TestAtomicFlags_EnumGetEnumeratedFlagValue, // OAF_ENUMGETENUMERATEDFLAGVALUE,
- &TestAtomicFlags_EnumFindFirstEnumeratedFlag, // OAF_ENUMFINDFIRSTENUMERATEDFLAG,
- &TestAtomicFlags_EnumAllSignalEnumeratedFlags, // OAF_ENUMALLSIGNALENUMERATEDFLAGS,
- &TestAtomicFlags_EnumAllDropEnumeratedFlags, // OAF_ENUMALLDROPENUMERATEDFLAGS,
- &TestAtomicFlags_EnumAllQueryEnumeratedFlags, // OAF_ENUMALLQUERYENUMERATEDFLAGS,
- &TestAtomicFlags_EnumAnyGetEnumeratedFlagValue, // OAF_ENUMANYGETENUMERATEDFLAGVALUE,
- &TestAtomicFlags_StoreFlagsEnumeratedValue, // OAF_STOREFLAGSENUMERATEDVALUE,
- &TestAtomicFlags_RetrieveFlagsEnumeratedValue, // OAF_RETRIEVEFLAGSENUMERATEDVALUE,
- };
- static const CEnumUnsortedElementArray<EOUATOMICFLAGSFEATURE, OAF__MAX, CFeatureTestProcedure> g_afnAtomicFlagsFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUATOMICFLAGSFEATURE, OAF__MAX, const char *>::m_aetElementArray[] =
- {
- "Constructors", // OAF_CONSTRUCTORS
- "AssignFlagsAllValues", // OAF_ASSIGNFLAGSALLVALUES,
- "QueryFlagsAllValues", // OAF_QUERYFLAGSALLVALUES,
- "SetFlagsMaskValue", // OAF_SETFLAGSMASKVALUE,
- "SignalFlagsMaskValue", // OAF_SIGNALFLAGSMASKVALUE,
- "DropFlagsMaskValue", // OAF_DROPFLAGSMASKVALUE,
- "ToggleSingleFlagValue", // OAF_TOGGLESINGLEFLAGVALUE,
- "ModifySingleFlagValue", // OAF_MODIFYSINGLEFLAGVALUE,
- "AssignFlagsByMask", // OAF_ASSIGNFLAGSBYMASK,
- "AlterFlagsByMask", // OAF_ALTERFLAGSBYMASK,
- "GetFlagsMaskValue", // OAF_GETFLAGSMASKVALUE,
- "QueryFlagsByMask", // OAF_QUERYFLAGSBYMASK,
- "OnlySignalSingleFlagOutOfMask", // OAF_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- "EnumSetEnumeratedFlagValue", // OAF_ENUMSETENUMERATEDFLAGVALUE,
- "EnumSignalEnumeratedFlagValue", // OAF_ENUMSIGNALENUMERATEDFLAGVALUE,
- "EnumDropEnumeratedFlagValue", // OAF_ENUMDROPENUMERATEDFLAGVALUE,
- "EnumToggleEnumeratedFlagValue", // OAF_ENUMTOGGLEENUMERATEDFLAGVALUE,
- "EnumModifyEnumeratedFlagValue", // OAF_ENUMMODIFYENUMERATEDFLAGVALUE,
- "EnumSignalFirstEnumeratedFlagValue", // OAF_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- "EnumSignalLastEnumeratedFlagValue", // OAF_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- "EnumGetEnumeratedFlagValue", // OAF_ENUMGETENUMERATEDFLAGVALUE,
- "EnumFindFirstEnumeratedFlag", // OAF_ENUMFINDFIRSTENUMERATEDFLAG,
- "EnumAllSignalEnumeratedFlags", // OAF_ENUMALLSIGNALENUMERATEDFLAGS,
- "EnumAllDropEnumeratedFlags", // OAF_ENUMALLDROPENUMERATEDFLAGS,
- "EnumAllQueryEnumeratedFlags", // OAF_ENUMALLQUERYENUMERATEDFLAGS,
- "EnumAnyGetEnumeratedFlagValue", // OAF_ENUMANYGETENUMERATEDFLAGVALUE,
- "StoreFlagsEnumeratedValue", // OAF_STOREFLAGSENUMERATEDVALUE,
- "RetrieveFlagsEnumeratedValue", // OAF_RETRIEVEFLAGSENUMERATEDVALUE,
- };
- static const CEnumUnsortedElementArray<EOUATOMICFLAGSFEATURE, OAF__MAX, const char *> g_aszAtomicFlagsFeatureTestNames;
- bool TestAtomicFlags(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- bool bResult = false;
- nOutSuccessCount = 0;
- nOutTestCount = OAF__MAX;
-
- bool bAPIInitialized = false;
-
- do
- {
- if (!InitializeAtomicAPI())
- {
- break;
- }
-
- bAPIInitialized = true;
-
- if (!TestSubsystem(nOutSuccessCount, nOutTestCount, OAF__MAX, g_aszAtomicFlagsFeatureTestNames.GetStoragePointer(), g_afnAtomicFlagsFeatureTestProcedures.GetStoragePointer()))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- if (bAPIInitialized)
- {
- FinalizeAtomicAPI();
- }
-
- return bResult;
- }
- //////////////////////////////////////////////////////////////////////////
- typedef CSimpleFlagsTemplate<uint64ou> CSimpleFlags64;
- const uint64ou g_uiTestValue64 = ((uint64ou)0xA5A5A5A5 << 32) | 0xA5A5A5A5;
- const uint64ou g_uiTestMask64 = ((uint64ou)0xC6C6C6C6 << 32) | 0xC6C6C6C6;
- const uint64ou g_uiTestBit64 = (uint64ou)OU_INT64_MIN;
- const uint64ou g_uiTestAnotherBit64 = (uint64ou)((uint64ou)OU_INT64_MIN >> 1);
- bool TestSimpleFlags64_Constructors()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(CSimpleFlags64::value_type) != sizeof(uint64ou) || sizeof(CSimpleFlags64) != sizeof(uint64ou))
- {
- break;
- }
- CSimpleFlags64 sfEmptyFlags;
- if (sfEmptyFlags.QueryFlagsAllValues())
- {
- break;
- }
- CSimpleFlags64 sfFullFlags(OU_UINT64_MAX);
-
- if (sfFullFlags.QueryFlagsAllValues() != OU_UINT64_MAX)
- {
- break;
- }
- CSimpleFlags64 sfCopyOfFullFlags(sfFullFlags);
- if (sfCopyOfFullFlags.QueryFlagsAllValues() != OU_UINT64_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_AssignFlagsAllValues()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags;
- sfTestFlags.AssignFlagsAllValues(OU_UINT64_MAX);
- if (sfTestFlags.QueryFlagsAllValues() != OU_UINT64_MAX)
- {
- break;
- }
- sfTestFlags.AssignFlagsAllValues(0);
- if (sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_QueryFlagsAllValues()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue64)
- {
- break;
- }
- // Double check to be sure ;-)
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue64)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_SetFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
- sfTestFlags.SetFlagsMaskValue(g_uiTestMask64, true);
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(g_uiTestValue64 | g_uiTestMask64))
- {
- break;
- }
- sfTestFlags.SetFlagsMaskValue(g_uiTestValue64, false);
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(~g_uiTestValue64 & g_uiTestMask64))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_SignalFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
-
- sfTestFlags.SignalFlagsMaskValue(g_uiTestMask64);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(g_uiTestValue64 | g_uiTestMask64))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_DropFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
-
- sfTestFlags.DropFlagsMaskValue(g_uiTestMask64);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(g_uiTestValue64 & ~g_uiTestMask64))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_ToggleSingleFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
-
- bool bPreviousValue = sfTestFlags.ToggleSingleFlagValue(g_uiTestBit64);
-
- if (bPreviousValue != ((g_uiTestValue64 & g_uiTestBit64) != 0) || sfTestFlags.QueryFlagsAllValues() != (uint64ou)(g_uiTestValue64 ^ g_uiTestBit64))
- {
- break;
- }
- bool bAnotherPreviousValue = sfTestFlags.ToggleSingleFlagValue(g_uiTestBit64);
-
- if (bAnotherPreviousValue == bPreviousValue || sfTestFlags.QueryFlagsAllValues() != g_uiTestValue64)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_ModifySingleFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
-
- bool bFirstModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit64, true);
-
- if (bFirstModification != ((g_uiTestValue64 & g_uiTestBit64) != g_uiTestBit64) || sfTestFlags.QueryFlagsAllValues() != (uint64ou)(g_uiTestValue64 | g_uiTestBit64))
- {
- break;
- }
-
- bool bAnotherModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit64, bFirstModification);
-
- if (bAnotherModification == bFirstModification || sfTestFlags.QueryFlagsAllValues() != (bFirstModification ? (uint64ou)(g_uiTestValue64 | g_uiTestBit64) : (uint64ou)(g_uiTestValue64 & ~g_uiTestBit64)))
- {
- break;
- }
- bool bYetAnotherModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit64, bAnotherModification);
- if (bYetAnotherModification != bAnotherModification || sfTestFlags.QueryFlagsAllValues() != (bAnotherModification ? (uint64ou)(g_uiTestValue64 | g_uiTestBit64) : (uint64ou)(g_uiTestValue64 & ~g_uiTestBit64)))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_AssignFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
- uint64ou uiPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestMask64, g_uiTestMask64);
- const uint64ou uiNewFlags = (g_uiTestValue64 & ~g_uiTestMask64) | g_uiTestMask64;
- if (uiPreviousFlags != g_uiTestValue64 || sfTestFlags.QueryFlagsAllValues() != uiNewFlags)
- {
- break;
- }
- uint64ou uiAnotherPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestValue64, 0);
- const uint64ou uiAnotherNewFlags = uiNewFlags & ~g_uiTestValue64;
- if (uiAnotherPreviousFlags != uiNewFlags || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- uint64ou uiYetAnotherPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestMask64, g_uiTestMask64 & g_uiTestValue64);
- OU_ASSERT((g_uiTestMask64 & g_uiTestValue64) != 0); // Test degeneration
-
- const uint64ou uiYetAnotherNewFlags = (uiAnotherNewFlags & ~g_uiTestMask64) | (g_uiTestMask64 & g_uiTestValue64);
- OU_ASSERT(uiYetAnotherNewFlags != OU_UINT64_MAX); // Test degeneration
-
- if (uiYetAnotherPreviousFlags != uiAnotherNewFlags || sfTestFlags.QueryFlagsAllValues() != uiYetAnotherNewFlags)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_AlterFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
-
- bool bWasModification = sfTestFlags.AlterFlagsByMask(g_uiTestMask64, g_uiTestMask64);
-
- const uint64ou uiNewFlags = (g_uiTestValue64 & ~g_uiTestMask64) | g_uiTestMask64;
-
- if (bWasModification != ((g_uiTestValue64 & g_uiTestMask64) != g_uiTestMask64) || sfTestFlags.QueryFlagsAllValues() != uiNewFlags)
- {
- break;
- }
-
- bool bWasAnotherModification = sfTestFlags.AlterFlagsByMask(g_uiTestValue64, 0);
-
- const uint64ou uiAnotherNewFlags = uiNewFlags & ~g_uiTestValue64;
-
- if (bWasAnotherModification != ((uiNewFlags & g_uiTestValue64) != 0) || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- bool bWasAnotherModificationRepeated = sfTestFlags.AlterFlagsByMask(g_uiTestValue64, 0);
-
- if (bWasAnotherModificationRepeated || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- bool bWasYetAnotherModification = sfTestFlags.AlterFlagsByMask(g_uiTestMask64, g_uiTestMask64 & g_uiTestValue64);
- OU_ASSERT((g_uiTestMask64 & g_uiTestValue64) != 0); // Test degeneration
-
- const uint64ou uiYetAnotherNewFlags = (uiAnotherNewFlags & ~g_uiTestMask64) | (g_uiTestMask64 & g_uiTestValue64);
- OU_ASSERT(uiYetAnotherNewFlags != OU_UINT64_MAX); // Test degeneration
-
- if (bWasYetAnotherModification != ((uiAnotherNewFlags & g_uiTestMask64) != (g_uiTestMask64 & g_uiTestValue64)) || sfTestFlags.QueryFlagsAllValues() != uiYetAnotherNewFlags)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_GetFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
-
- if (sfTestFlags.GetFlagsMaskValue(g_uiTestMask64) != ((g_uiTestValue64 & g_uiTestMask64) != 0))
- {
- break;
- }
-
- if (sfTestFlags.GetFlagsMaskValue(~g_uiTestValue64))
- {
- break;
- }
-
- if (!sfTestFlags.GetFlagsMaskValue(OU_UINT64_MAX))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_QueryFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
-
- if (sfTestFlags.QueryFlagsByMask(g_uiTestMask64) != (uint64ou)(g_uiTestValue64 & g_uiTestMask64))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsByMask(0))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsByMask(OU_UINT64_MAX) != g_uiTestValue64)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_OnlySignalSingleFlagOutOfMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(g_uiTestValue64);
- OU_ASSERT(g_uiTestValue64 != 0); // Test degeneration
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(OU_UINT64_MAX, g_uiTestBit64))
- {
- break;
- }
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue64)
- {
- break;
- }
-
- sfTestFlags.AssignFlagsAllValues(0);
- if (!sfTestFlags.OnlySignalSingleFlagOutOfMask(g_uiTestBit64, g_uiTestBit64))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit64)
- {
- break;
- }
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(g_uiTestBit64, g_uiTestBit64))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit64)
- {
- break;
- }
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(OU_UINT64_MAX, g_uiTestAnotherBit64))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit64)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumSetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags;
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, 0, OU_UINT64_BITS, true);
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS, true);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_INT64_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, 0, OU_UINT64_BITS, false);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)OU_INT64_MIN)
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS, false);
-
- if (sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumSignalEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags;
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, 0, OU_UINT64_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_INT64_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, 0, OU_UINT64_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_INT64_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_INT64_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumDropEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(OU_UINT64_MAX);
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, 0, OU_UINT64_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (OU_UINT64_MAX ^ 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)~(OU_INT64_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, 0, OU_UINT64_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)~(OU_INT64_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)~(OU_INT64_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumToggleEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags;
-
- bool bToggleFirstResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, 0, OU_UINT64_BITS);
-
- if (bToggleFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bToggleSecondResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS);
-
- if (bToggleSecondResult || sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_INT64_MIN + 1))
- {
- break;
- }
-
- bool bToggleThirdResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, 0, OU_UINT64_BITS);
-
- if (!bToggleThirdResult || sfTestFlags.QueryFlagsAllValues() != (uint64ou)OU_INT64_MIN)
- {
- break;
- }
-
- bool bToggleFourthResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS);
-
- if (!bToggleFourthResult || sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumModifyEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags;
-
- bool bModifyFirstResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT64_BITS, true);
-
- if (!bModifyFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bModifySecondResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS, true);
-
- if (!bModifySecondResult || sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_INT64_MIN + 1))
- {
- break;
- }
-
- bool bModifyThirdResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT64_BITS, true);
-
- if (bModifyThirdResult || sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_INT64_MIN + 1))
- {
- break;
- }
-
- bool bModifyFourthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS, true);
-
- if (bModifyFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_INT64_MIN + 1))
- {
- break;
- }
-
- bool bModifyFifthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT64_BITS, false);
-
- if (!bModifyFifthResult || sfTestFlags.QueryFlagsAllValues() != (uint64ou)OU_INT64_MIN)
- {
- break;
- }
-
- bool bModifySixthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS, false);
-
- if (!bModifySixthResult || sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumSignalFirstEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags;
- bool bFirstResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, 0, OU_UINT64_BITS);
- if (!bFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, 0, OU_UINT64_BITS);
-
- if (bSecondResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(2, 0, OU_UINT64_BITS - 1);
-
- if (!bThirdResult || sfTestFlags.QueryFlagsAllValues() != 3)
- {
- break;
- }
-
- bool bFourthResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS);
-
- if (bFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_INT64_MIN + 3))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumSignalLastEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags;
-
- bool bFirstResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 0, 1);
-
- if (!bFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 0, 1);
-
- if (bSecondResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 1, 2);
-
- if (!bThirdResult || sfTestFlags.QueryFlagsAllValues() != 3)
- {
- break;
- }
-
- bool bFourthResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS);
-
- if (bFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_INT64_MIN + 3))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumGetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags((uint64ou)(OU_INT64_MIN + 1));
-
- if (!sfTestFlags.EnumGetEnumeratedFlagValue(1, 0, OU_UINT64_BITS))
- {
- break;
- }
-
- if (sfTestFlags.EnumGetEnumeratedFlagValue(2, 0, OU_UINT64_BITS - 1))
- {
- break;
- }
-
- if (sfTestFlags.EnumGetEnumeratedFlagValue(1, 1, OU_UINT64_BITS - 1))
- {
- break;
- }
-
- if (!sfTestFlags.EnumGetEnumeratedFlagValue(1, OU_UINT64_BITS - 1, OU_UINT64_BITS))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumFindFirstEnumeratedFlag()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags((uint64ou)(OU_INT64_MIN + 1));
- unsigned int uiFirstResult = sfTestFlags.EnumFindFirstEnumeratedFlag(1, OU_UINT64_BITS);
- if (uiFirstResult != 0)
- {
- break;
- }
- unsigned int uiSecondResult = sfTestFlags.EnumFindFirstEnumeratedFlag(2, OU_UINT64_BITS - 1);
- if (uiSecondResult != OU_UINT64_BITS - 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumAllSignalEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags;
-
- sfTestFlags.EnumAllSignalEnumeratedFlags(1, 1);
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
- sfTestFlags.EnumAllSignalEnumeratedFlags(4, OU_UINT64_BITS - 2);
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_UINT64_MAX ^ 2))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumAllDropEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags(OU_UINT64_MAX);
-
- sfTestFlags.EnumAllDropEnumeratedFlags(1, 1);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(OU_UINT64_MAX ^ 1))
- {
- break;
- }
-
- sfTestFlags.EnumAllDropEnumeratedFlags(4, OU_UINT64_BITS - 2);
-
- if (sfTestFlags.QueryFlagsAllValues() != 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumAllQueryEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags((uint64ou)(OU_INT64_MIN + 1));
-
- uint64ou uiFirstResult = sfTestFlags.EnumAllQueryEnumeratedFlags(1, OU_UINT64_BITS);
- if (uiFirstResult != (uint64ou)(OU_INT64_MIN + 1))
- {
- break;
- }
-
- uint64ou uiSecondResult = sfTestFlags.EnumAllQueryEnumeratedFlags(2, OU_UINT64_BITS - 1);
- if (uiSecondResult != (uint64ou)(OU_INT64_MIN))
- {
- break;
- }
-
- uint64ou uiThirdResult = sfTestFlags.EnumAllQueryEnumeratedFlags(2, OU_UINT64_BITS - 2);
- if (uiThirdResult != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_EnumAnyGetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags((uint64ou)(OU_INT64_MIN + 1));
-
- bool bFirstResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(1, OU_UINT64_BITS);
- if (!bFirstResult)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(2, OU_UINT64_BITS - 1);
- if (!bSecondResult)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(2, OU_UINT64_BITS - 2);
- if (bThirdResult)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_StoreFlagsEnumeratedValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags;
- sfTestFlags.StoreFlagsEnumeratedValue(0x03, 1, 2);
- if (sfTestFlags.QueryFlagsAllValues() != (uint64ou)(2 << 1))
- {
- break;
- }
-
- sfTestFlags.StoreFlagsEnumeratedValue(0x03, OU_UINT64_BITS - 2, 3);
-
- if (sfTestFlags.QueryFlagsAllValues() != ((uint64ou)(2 << 1) | (uint64ou)(OU_INT64_MIN | (OU_INT64_MIN >> 1))))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags64_RetrieveFlagsEnumeratedValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags64 sfTestFlags((uint64ou)(OU_INT64_MIN + 1));
-
- unsigned int uiFirstResult = sfTestFlags.RetrieveFlagsEnumeratedValue(0x3, 1);
- if (uiFirstResult != 0)
- {
- break;
- }
-
- unsigned int uiSecondResult = sfTestFlags.RetrieveFlagsEnumeratedValue(0x3, OU_UINT64_BITS - 2);
- if (uiSecondResult != 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- enum EOUSIMPLEFLAGSFEATURE64
- {
- OSF64__MIN,
-
- OSF64_CONSTRUCTORS = OSF64__MIN,
- OSF64_ASSIGNFLAGSALLVALUES,
- OSF64_QUERYFLAGSALLVALUES,
- OSF64_SETFLAGSMASKVALUE,
- OSF64_SIGNALFLAGSMASKVALUE,
- OSF64_DROPFLAGSMASKVALUE,
- OSF64_TOGGLESINGLEFLAGVALUE,
- OSF64_MODIFYSINGLEFLAGVALUE,
- OSF64_ASSIGNFLAGSBYMASK,
- OSF64_ALTERFLAGSBYMASK,
- OSF64_GETFLAGSMASKVALUE,
- OSF64_QUERYFLAGSBYMASK,
- OSF64_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- OSF64_ENUMSETENUMERATEDFLAGVALUE,
- OSF64_ENUMSIGNALENUMERATEDFLAGVALUE,
- OSF64_ENUMDROPENUMERATEDFLAGVALUE,
- OSF64_ENUMTOGGLEENUMERATEDFLAGVALUE,
- OSF64_ENUMMODIFYENUMERATEDFLAGVALUE,
- OSF64_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- OSF64_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- OSF64_ENUMGETENUMERATEDFLAGVALUE,
- OSF64_ENUMFINDFIRSTENUMERATEDFLAG,
- OSF64_ENUMALLSIGNALENUMERATEDFLAGS,
- OSF64_ENUMALLDROPENUMERATEDFLAGS,
- OSF64_ENUMALLQUERYENUMERATEDFLAGS,
- OSF64_ENUMANYGETENUMERATEDFLAGVALUE,
- OSF64_STOREFLAGSENUMERATEDVALUE,
- OSF64_RETRIEVEFLAGSENUMERATEDVALUE,
- OSF64__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE64, OSF64__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestSimpleFlags64_Constructors, // OSF64_CONSTRUCTORS
- &TestSimpleFlags64_AssignFlagsAllValues, // OSF64_ASSIGNFLAGSALLVALUES,
- &TestSimpleFlags64_QueryFlagsAllValues, // OSF64_QUERYFLAGSALLVALUES,
- &TestSimpleFlags64_SetFlagsMaskValue, // OSF64_SETFLAGSMASKVALUE,
- &TestSimpleFlags64_SignalFlagsMaskValue, // OSF64_SIGNALFLAGSMASKVALUE,
- &TestSimpleFlags64_DropFlagsMaskValue, // OSF64_DROPFLAGSMASKVALUE,
- &TestSimpleFlags64_ToggleSingleFlagValue, // OSF64_TOGGLESINGLEFLAGVALUE,
- &TestSimpleFlags64_ModifySingleFlagValue, // OSF64_MODIFYSINGLEFLAGVALUE,
- &TestSimpleFlags64_AssignFlagsByMask, // OSF64_ASSIGNFLAGSBYMASK,
- &TestSimpleFlags64_AlterFlagsByMask, // OSF64_ALTERFLAGSBYMASK,
- &TestSimpleFlags64_GetFlagsMaskValue, // OSF64_GETFLAGSMASKVALUE,
- &TestSimpleFlags64_QueryFlagsByMask, // OSF64_QUERYFLAGSBYMASK,
- &TestSimpleFlags64_OnlySignalSingleFlagOutOfMask, // OSF64_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- &TestSimpleFlags64_EnumSetEnumeratedFlagValue, // OSF64_ENUMSETENUMERATEDFLAGVALUE,
- &TestSimpleFlags64_EnumSignalEnumeratedFlagValue, // OSF64_ENUMSIGNALENUMERATEDFLAGVALUE,
- &TestSimpleFlags64_EnumDropEnumeratedFlagValue, // OSF64_ENUMDROPENUMERATEDFLAGVALUE,
- &TestSimpleFlags64_EnumToggleEnumeratedFlagValue, // OSF64_ENUMTOGGLEENUMERATEDFLAGVALUE,
- &TestSimpleFlags64_EnumModifyEnumeratedFlagValue, // OSF64_ENUMMODIFYENUMERATEDFLAGVALUE,
- &TestSimpleFlags64_EnumSignalFirstEnumeratedFlagValue, // OSF64_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- &TestSimpleFlags64_EnumSignalLastEnumeratedFlagValue, // OSF64_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- &TestSimpleFlags64_EnumGetEnumeratedFlagValue, // OSF64_ENUMGETENUMERATEDFLAGVALUE,
- &TestSimpleFlags64_EnumFindFirstEnumeratedFlag, // OSF64_ENUMFINDFIRSTENUMERATEDFLAG,
- &TestSimpleFlags64_EnumAllSignalEnumeratedFlags, // OSF64_ENUMALLSIGNALENUMERATEDFLAGS,
- &TestSimpleFlags64_EnumAllDropEnumeratedFlags, // OSF64_ENUMALLDROPENUMERATEDFLAGS,
- &TestSimpleFlags64_EnumAllQueryEnumeratedFlags, // OSF64_ENUMALLQUERYENUMERATEDFLAGS,
- &TestSimpleFlags64_EnumAnyGetEnumeratedFlagValue, // OSF64_ENUMANYGETENUMERATEDFLAGVALUE,
- &TestSimpleFlags64_StoreFlagsEnumeratedValue, // OSF64_STOREFLAGSENUMERATEDVALUE,
- &TestSimpleFlags64_RetrieveFlagsEnumeratedValue, // OSF64_RETRIEVEFLAGSENUMERATEDVALUE,
- };
- static const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE64, OSF64__MAX, CFeatureTestProcedure> g_afnSimpleFlags64FeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE64, OSF64__MAX, const char *>::m_aetElementArray[] =
- {
- "Constructors", // OSF64_CONSTRUCTORS
- "AssignFlagsAllValues", // OSF64_ASSIGNFLAGSALLVALUES,
- "QueryFlagsAllValues", // OSF64_QUERYFLAGSALLVALUES,
- "SetFlagsMaskValue", // OSF64_SETFLAGSMASKVALUE,
- "SignalFlagsMaskValue", // OSF64_SIGNALFLAGSMASKVALUE,
- "DropFlagsMaskValue", // OSF64_DROPFLAGSMASKVALUE,
- "ToggleSingleFlagValue", // OSF64_TOGGLESINGLEFLAGVALUE,
- "ModifySingleFlagValue", // OSF64_MODIFYSINGLEFLAGVALUE,
- "AssignFlagsByMask", // OSF64_ASSIGNFLAGSBYMASK,
- "AlterFlagsByMask", // OSF64_ALTERFLAGSBYMASK,
- "GetFlagsMaskValue", // OSF64_GETFLAGSMASKVALUE,
- "QueryFlagsByMask", // OSF64_QUERYFLAGSBYMASK,
- "OnlySignalSingleFlagOutOfMask", // OSF64_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- "EnumSetEnumeratedFlagValue", // OSF64_ENUMSETENUMERATEDFLAGVALUE,
- "EnumSignalEnumeratedFlagValue", // OSF64_ENUMSIGNALENUMERATEDFLAGVALUE,
- "EnumDropEnumeratedFlagValue", // OSF64_ENUMDROPENUMERATEDFLAGVALUE,
- "EnumToggleEnumeratedFlagValue", // OSF64_ENUMTOGGLEENUMERATEDFLAGVALUE,
- "EnumModifyEnumeratedFlagValue", // OSF64_ENUMMODIFYENUMERATEDFLAGVALUE,
- "EnumSignalFirstEnumeratedFlagValue", // OSF64_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- "EnumSignalLastEnumeratedFlagValue", // OSF64_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- "EnumGetEnumeratedFlagValue", // OSF64_ENUMGETENUMERATEDFLAGVALUE,
- "EnumFindFirstEnumeratedFlag", // OSF64_ENUMFINDFIRSTENUMERATEDFLAG,
- "EnumAllSignalEnumeratedFlags", // OSF64_ENUMALLSIGNALENUMERATEDFLAGS,
- "EnumAllDropEnumeratedFlags", // OSF64_ENUMALLDROPENUMERATEDFLAGS,
- "EnumAllQueryEnumeratedFlags", // OSF64_ENUMALLQUERYENUMERATEDFLAGS,
- "EnumAnyGetEnumeratedFlagValue", // OSF64_ENUMANYGETENUMERATEDFLAGVALUE,
- "StoreFlagsEnumeratedValue", // OSF64_STOREFLAGSENUMERATEDVALUE,
- "RetrieveFlagsEnumeratedValue", // OSF64_RETRIEVEFLAGSENUMERATEDVALUE,
- };
- static const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE64, OSF64__MAX, const char *> g_aszSimpleFlags64FeatureTestNames;
- bool TestSimpleFlags64(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OSF64__MAX, g_aszSimpleFlags64FeatureTestNames.GetStoragePointer(), g_afnSimpleFlags64FeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- typedef CSimpleFlags CSimpleFlags32;
- const uint32ou g_uiTestValue32 = (uint32ou)0xA5A5A5A5;
- const uint32ou g_uiTestMask32 = (uint32ou)0xC6C6C6C6;
- const uint32ou g_uiTestBit32 = (uint32ou)OU_INT32_MIN;
- const uint32ou g_uiTestAnotherBit32 = (uint32ou)((uint32ou)OU_INT32_MIN >> 1);
- bool TestSimpleFlags32_Constructors()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(CSimpleFlags32::value_type) != sizeof(uint32ou) || sizeof(CSimpleFlags32) != sizeof(uint32ou))
- {
- break;
- }
- CSimpleFlags32 sfEmptyFlags;
- if (sfEmptyFlags.QueryFlagsAllValues())
- {
- break;
- }
- CSimpleFlags32 sfFullFlags(OU_UINT32_MAX);
-
- if (sfFullFlags.QueryFlagsAllValues() != OU_UINT32_MAX)
- {
- break;
- }
- CSimpleFlags32 sfCopyOfFullFlags(sfFullFlags);
- if (sfCopyOfFullFlags.QueryFlagsAllValues() != OU_UINT32_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_AssignFlagsAllValues()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags;
- sfTestFlags.AssignFlagsAllValues(OU_UINT32_MAX);
- if (sfTestFlags.QueryFlagsAllValues() != OU_UINT32_MAX)
- {
- break;
- }
- sfTestFlags.AssignFlagsAllValues(0);
- if (sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_QueryFlagsAllValues()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue32)
- {
- break;
- }
- // Double check to be sure ;-)
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue32)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_SetFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
- sfTestFlags.SetFlagsMaskValue(g_uiTestMask32, true);
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(g_uiTestValue32 | g_uiTestMask32))
- {
- break;
- }
- sfTestFlags.SetFlagsMaskValue(g_uiTestValue32, false);
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(~g_uiTestValue32 & g_uiTestMask32))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_SignalFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
-
- sfTestFlags.SignalFlagsMaskValue(g_uiTestMask32);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(g_uiTestValue32 | g_uiTestMask32))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_DropFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
-
- sfTestFlags.DropFlagsMaskValue(g_uiTestMask32);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(g_uiTestValue32 & ~g_uiTestMask32))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_ToggleSingleFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
-
- bool bPreviousValue = sfTestFlags.ToggleSingleFlagValue(g_uiTestBit32);
-
- if (bPreviousValue != ((g_uiTestValue32 & g_uiTestBit32) != 0) || sfTestFlags.QueryFlagsAllValues() != (uint32ou)(g_uiTestValue32 ^ g_uiTestBit32))
- {
- break;
- }
- bool bAnotherPreviousValue = sfTestFlags.ToggleSingleFlagValue(g_uiTestBit32);
-
- if (bAnotherPreviousValue == bPreviousValue || sfTestFlags.QueryFlagsAllValues() != g_uiTestValue32)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_ModifySingleFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
-
- bool bFirstModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit32, true);
-
- if (bFirstModification != ((g_uiTestValue32 & g_uiTestBit32) != g_uiTestBit32) || sfTestFlags.QueryFlagsAllValues() != (uint32ou)(g_uiTestValue32 | g_uiTestBit32))
- {
- break;
- }
-
- bool bAnotherModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit32, bFirstModification);
-
- if (bAnotherModification == bFirstModification || sfTestFlags.QueryFlagsAllValues() != (bFirstModification ? (uint32ou)(g_uiTestValue32 | g_uiTestBit32) : (uint32ou)(g_uiTestValue32 & ~g_uiTestBit32)))
- {
- break;
- }
- bool bYetAnotherModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit32, bAnotherModification);
- if (bYetAnotherModification != bAnotherModification || sfTestFlags.QueryFlagsAllValues() != (bAnotherModification ? (uint32ou)(g_uiTestValue32 | g_uiTestBit32) : (uint32ou)(g_uiTestValue32 & ~g_uiTestBit32)))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_AssignFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
- uint32ou uiPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestMask32, g_uiTestMask32);
- const uint32ou uiNewFlags = (g_uiTestValue32 & ~g_uiTestMask32) | g_uiTestMask32;
- if (uiPreviousFlags != g_uiTestValue32 || sfTestFlags.QueryFlagsAllValues() != uiNewFlags)
- {
- break;
- }
- uint32ou uiAnotherPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestValue32, 0);
- const uint32ou uiAnotherNewFlags = uiNewFlags & ~g_uiTestValue32;
- if (uiAnotherPreviousFlags != uiNewFlags || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- uint32ou uiYetAnotherPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestMask32, g_uiTestMask32 & g_uiTestValue32);
- OU_ASSERT((g_uiTestMask32 & g_uiTestValue32) != 0); // Test degeneration
-
- const uint32ou uiYetAnotherNewFlags = (uiAnotherNewFlags & ~g_uiTestMask32) | (g_uiTestMask32 & g_uiTestValue32);
- OU_ASSERT(uiYetAnotherNewFlags != OU_UINT32_MAX); // Test degeneration
-
- if (uiYetAnotherPreviousFlags != uiAnotherNewFlags || sfTestFlags.QueryFlagsAllValues() != uiYetAnotherNewFlags)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_AlterFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
-
- bool bWasModification = sfTestFlags.AlterFlagsByMask(g_uiTestMask32, g_uiTestMask32);
-
- const uint32ou uiNewFlags = (g_uiTestValue32 & ~g_uiTestMask32) | g_uiTestMask32;
-
- if (bWasModification != ((g_uiTestValue32 & g_uiTestMask32) != g_uiTestMask32) || sfTestFlags.QueryFlagsAllValues() != uiNewFlags)
- {
- break;
- }
-
- bool bWasAnotherModification = sfTestFlags.AlterFlagsByMask(g_uiTestValue32, 0);
-
- const uint32ou uiAnotherNewFlags = uiNewFlags & ~g_uiTestValue32;
-
- if (bWasAnotherModification != ((uiNewFlags & g_uiTestValue32) != 0) || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- bool bWasAnotherModificationRepeated = sfTestFlags.AlterFlagsByMask(g_uiTestValue32, 0);
-
- if (bWasAnotherModificationRepeated || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- bool bWasYetAnotherModification = sfTestFlags.AlterFlagsByMask(g_uiTestMask32, g_uiTestMask32 & g_uiTestValue32);
- OU_ASSERT((g_uiTestMask32 & g_uiTestValue32) != 0); // Test degeneration
-
- const uint32ou uiYetAnotherNewFlags = (uiAnotherNewFlags & ~g_uiTestMask32) | (g_uiTestMask32 & g_uiTestValue32);
- OU_ASSERT(uiYetAnotherNewFlags != OU_UINT32_MAX); // Test degeneration
-
- if (bWasYetAnotherModification != ((uiAnotherNewFlags & g_uiTestMask32) != (g_uiTestMask32 & g_uiTestValue32)) || sfTestFlags.QueryFlagsAllValues() != uiYetAnotherNewFlags)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_GetFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
-
- if (sfTestFlags.GetFlagsMaskValue(g_uiTestMask32) != ((g_uiTestValue32 & g_uiTestMask32) != 0))
- {
- break;
- }
-
- if (sfTestFlags.GetFlagsMaskValue(~g_uiTestValue32))
- {
- break;
- }
-
- if (!sfTestFlags.GetFlagsMaskValue(OU_UINT32_MAX))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_QueryFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
-
- if (sfTestFlags.QueryFlagsByMask(g_uiTestMask32) != (uint32ou)(g_uiTestValue32 & g_uiTestMask32))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsByMask(0))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsByMask(OU_UINT32_MAX) != g_uiTestValue32)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_OnlySignalSingleFlagOutOfMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(g_uiTestValue32);
- OU_ASSERT(g_uiTestValue32 != 0); // Test degeneration
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(OU_UINT32_MAX, g_uiTestBit32))
- {
- break;
- }
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue32)
- {
- break;
- }
-
- sfTestFlags.AssignFlagsAllValues(0);
- if (!sfTestFlags.OnlySignalSingleFlagOutOfMask(g_uiTestBit32, g_uiTestBit32))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit32)
- {
- break;
- }
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(g_uiTestBit32, g_uiTestBit32))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit32)
- {
- break;
- }
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(OU_UINT32_MAX, g_uiTestAnotherBit32))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit32)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumSetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags;
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, 0, OU_UINT32_BITS, true);
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS, true);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, 0, OU_UINT32_BITS, false);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)OU_INT32_MIN)
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS, false);
-
- if (sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumSignalEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags;
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumDropEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(OU_UINT32_MAX);
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (OU_UINT32_MAX ^ 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)~(OU_INT32_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)~(OU_INT32_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)~(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumToggleEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags;
-
- bool bToggleFirstResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (bToggleFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bToggleSecondResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (bToggleSecondResult || sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bool bToggleThirdResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (!bToggleThirdResult || sfTestFlags.QueryFlagsAllValues() != (uint32ou)OU_INT32_MIN)
- {
- break;
- }
-
- bool bToggleFourthResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (!bToggleFourthResult || sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumModifyEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags;
-
- bool bModifyFirstResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT32_BITS, true);
-
- if (!bModifyFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bModifySecondResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS, true);
-
- if (!bModifySecondResult || sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bool bModifyThirdResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT32_BITS, true);
-
- if (bModifyThirdResult || sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bool bModifyFourthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS, true);
-
- if (bModifyFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- bool bModifyFifthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT32_BITS, false);
-
- if (!bModifyFifthResult || sfTestFlags.QueryFlagsAllValues() != (uint32ou)OU_INT32_MIN)
- {
- break;
- }
-
- bool bModifySixthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS, false);
-
- if (!bModifySixthResult || sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumSignalFirstEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags;
- bool bFirstResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
- if (!bFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, 0, OU_UINT32_BITS);
-
- if (bSecondResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(2, 0, OU_UINT32_BITS - 1);
-
- if (!bThirdResult || sfTestFlags.QueryFlagsAllValues() != 3)
- {
- break;
- }
-
- bool bFourthResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (bFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_INT32_MIN + 3))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumSignalLastEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags;
-
- bool bFirstResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 0, 1);
-
- if (!bFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 0, 1);
-
- if (bSecondResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 1, 2);
-
- if (!bThirdResult || sfTestFlags.QueryFlagsAllValues() != 3)
- {
- break;
- }
-
- bool bFourthResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS);
-
- if (bFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_INT32_MIN + 3))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumGetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags((uint32ou)(OU_INT32_MIN + 1));
-
- if (!sfTestFlags.EnumGetEnumeratedFlagValue(1, 0, OU_UINT32_BITS))
- {
- break;
- }
-
- if (sfTestFlags.EnumGetEnumeratedFlagValue(2, 0, OU_UINT32_BITS - 1))
- {
- break;
- }
-
- if (sfTestFlags.EnumGetEnumeratedFlagValue(1, 1, OU_UINT32_BITS - 1))
- {
- break;
- }
-
- if (!sfTestFlags.EnumGetEnumeratedFlagValue(1, OU_UINT32_BITS - 1, OU_UINT32_BITS))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumFindFirstEnumeratedFlag()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags((uint32ou)(OU_INT32_MIN + 1));
- unsigned int uiFirstResult = sfTestFlags.EnumFindFirstEnumeratedFlag(1, OU_UINT32_BITS);
- if (uiFirstResult != 0)
- {
- break;
- }
- unsigned int uiSecondResult = sfTestFlags.EnumFindFirstEnumeratedFlag(2, OU_UINT32_BITS - 1);
- if (uiSecondResult != OU_UINT32_BITS - 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumAllSignalEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags;
-
- sfTestFlags.EnumAllSignalEnumeratedFlags(1, 1);
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
- sfTestFlags.EnumAllSignalEnumeratedFlags(4, OU_UINT32_BITS - 2);
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_UINT32_MAX ^ 2))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumAllDropEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags(OU_UINT32_MAX);
-
- sfTestFlags.EnumAllDropEnumeratedFlags(1, 1);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(OU_UINT32_MAX ^ 1))
- {
- break;
- }
-
- sfTestFlags.EnumAllDropEnumeratedFlags(4, OU_UINT32_BITS - 2);
-
- if (sfTestFlags.QueryFlagsAllValues() != 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumAllQueryEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags((uint32ou)(OU_INT32_MIN + 1));
-
- uint32ou uiFirstResult = sfTestFlags.EnumAllQueryEnumeratedFlags(1, OU_UINT32_BITS);
- if (uiFirstResult != (uint32ou)(OU_INT32_MIN + 1))
- {
- break;
- }
-
- uint32ou uiSecondResult = sfTestFlags.EnumAllQueryEnumeratedFlags(2, OU_UINT32_BITS - 1);
- if (uiSecondResult != (uint32ou)(OU_INT32_MIN))
- {
- break;
- }
-
- uint32ou uiThirdResult = sfTestFlags.EnumAllQueryEnumeratedFlags(2, OU_UINT32_BITS - 2);
- if (uiThirdResult != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_EnumAnyGetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags((uint32ou)(OU_INT32_MIN + 1));
-
- bool bFirstResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(1, OU_UINT32_BITS);
- if (!bFirstResult)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(2, OU_UINT32_BITS - 1);
- if (!bSecondResult)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(2, OU_UINT32_BITS - 2);
- if (bThirdResult)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_StoreFlagsEnumeratedValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags;
- sfTestFlags.StoreFlagsEnumeratedValue(0x03, 1, 2);
- if (sfTestFlags.QueryFlagsAllValues() != (uint32ou)(2 << 1))
- {
- break;
- }
-
- sfTestFlags.StoreFlagsEnumeratedValue(0x03, OU_UINT32_BITS - 2, 3);
-
- if (sfTestFlags.QueryFlagsAllValues() != ((uint32ou)(2 << 1) | (uint32ou)(OU_INT32_MIN | (OU_INT32_MIN >> 1))))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags32_RetrieveFlagsEnumeratedValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags32 sfTestFlags((uint32ou)(OU_INT32_MIN + 1));
-
- unsigned int uiFirstResult = sfTestFlags.RetrieveFlagsEnumeratedValue(0x3, 1);
- if (uiFirstResult != 0)
- {
- break;
- }
-
- unsigned int uiSecondResult = sfTestFlags.RetrieveFlagsEnumeratedValue(0x3, OU_UINT32_BITS - 2);
- if (uiSecondResult != 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- enum EOUSIMPLEFLAGSFEATURE32
- {
- OSF32__MIN,
-
- OSF32_CONSTRUCTORS = OSF32__MIN,
- OSF32_ASSIGNFLAGSALLVALUES,
- OSF32_QUERYFLAGSALLVALUES,
- OSF32_SETFLAGSMASKVALUE,
- OSF32_SIGNALFLAGSMASKVALUE,
- OSF32_DROPFLAGSMASKVALUE,
- OSF32_TOGGLESINGLEFLAGVALUE,
- OSF32_MODIFYSINGLEFLAGVALUE,
- OSF32_ASSIGNFLAGSBYMASK,
- OSF32_ALTERFLAGSBYMASK,
- OSF32_GETFLAGSMASKVALUE,
- OSF32_QUERYFLAGSBYMASK,
- OSF32_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- OSF32_ENUMSETENUMERATEDFLAGVALUE,
- OSF32_ENUMSIGNALENUMERATEDFLAGVALUE,
- OSF32_ENUMDROPENUMERATEDFLAGVALUE,
- OSF32_ENUMTOGGLEENUMERATEDFLAGVALUE,
- OSF32_ENUMMODIFYENUMERATEDFLAGVALUE,
- OSF32_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- OSF32_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- OSF32_ENUMGETENUMERATEDFLAGVALUE,
- OSF32_ENUMFINDFIRSTENUMERATEDFLAG,
- OSF32_ENUMALLSIGNALENUMERATEDFLAGS,
- OSF32_ENUMALLDROPENUMERATEDFLAGS,
- OSF32_ENUMALLQUERYENUMERATEDFLAGS,
- OSF32_ENUMANYGETENUMERATEDFLAGVALUE,
- OSF32_STOREFLAGSENUMERATEDVALUE,
- OSF32_RETRIEVEFLAGSENUMERATEDVALUE,
- OSF32__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE32, OSF32__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestSimpleFlags32_Constructors, // OSF32_CONSTRUCTORS
- &TestSimpleFlags32_AssignFlagsAllValues, // OSF32_ASSIGNFLAGSALLVALUES,
- &TestSimpleFlags32_QueryFlagsAllValues, // OSF32_QUERYFLAGSALLVALUES,
- &TestSimpleFlags32_SetFlagsMaskValue, // OSF32_SETFLAGSMASKVALUE,
- &TestSimpleFlags32_SignalFlagsMaskValue, // OSF32_SIGNALFLAGSMASKVALUE,
- &TestSimpleFlags32_DropFlagsMaskValue, // OSF32_DROPFLAGSMASKVALUE,
- &TestSimpleFlags32_ToggleSingleFlagValue, // OSF32_TOGGLESINGLEFLAGVALUE,
- &TestSimpleFlags32_ModifySingleFlagValue, // OSF32_MODIFYSINGLEFLAGVALUE,
- &TestSimpleFlags32_AssignFlagsByMask, // OSF32_ASSIGNFLAGSBYMASK,
- &TestSimpleFlags32_AlterFlagsByMask, // OSF32_ALTERFLAGSBYMASK,
- &TestSimpleFlags32_GetFlagsMaskValue, // OSF32_GETFLAGSMASKVALUE,
- &TestSimpleFlags32_QueryFlagsByMask, // OSF32_QUERYFLAGSBYMASK,
- &TestSimpleFlags32_OnlySignalSingleFlagOutOfMask, // OSF32_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- &TestSimpleFlags32_EnumSetEnumeratedFlagValue, // OSF32_ENUMSETENUMERATEDFLAGVALUE,
- &TestSimpleFlags32_EnumSignalEnumeratedFlagValue, // OSF32_ENUMSIGNALENUMERATEDFLAGVALUE,
- &TestSimpleFlags32_EnumDropEnumeratedFlagValue, // OSF32_ENUMDROPENUMERATEDFLAGVALUE,
- &TestSimpleFlags32_EnumToggleEnumeratedFlagValue, // OSF32_ENUMTOGGLEENUMERATEDFLAGVALUE,
- &TestSimpleFlags32_EnumModifyEnumeratedFlagValue, // OSF32_ENUMMODIFYENUMERATEDFLAGVALUE,
- &TestSimpleFlags32_EnumSignalFirstEnumeratedFlagValue, // OSF32_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- &TestSimpleFlags32_EnumSignalLastEnumeratedFlagValue, // OSF32_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- &TestSimpleFlags32_EnumGetEnumeratedFlagValue, // OSF32_ENUMGETENUMERATEDFLAGVALUE,
- &TestSimpleFlags32_EnumFindFirstEnumeratedFlag, // OSF32_ENUMFINDFIRSTENUMERATEDFLAG,
- &TestSimpleFlags32_EnumAllSignalEnumeratedFlags, // OSF32_ENUMALLSIGNALENUMERATEDFLAGS,
- &TestSimpleFlags32_EnumAllDropEnumeratedFlags, // OSF32_ENUMALLDROPENUMERATEDFLAGS,
- &TestSimpleFlags32_EnumAllQueryEnumeratedFlags, // OSF32_ENUMALLQUERYENUMERATEDFLAGS,
- &TestSimpleFlags32_EnumAnyGetEnumeratedFlagValue, // OSF32_ENUMANYGETENUMERATEDFLAGVALUE,
- &TestSimpleFlags32_StoreFlagsEnumeratedValue, // OSF32_STOREFLAGSENUMERATEDVALUE,
- &TestSimpleFlags32_RetrieveFlagsEnumeratedValue, // OSF32_RETRIEVEFLAGSENUMERATEDVALUE,
- };
- static const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE32, OSF32__MAX, CFeatureTestProcedure> g_afnSimpleFlags32FeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE32, OSF32__MAX, const char *>::m_aetElementArray[] =
- {
- "Constructors", // OSF32_CONSTRUCTORS
- "AssignFlagsAllValues", // OSF32_ASSIGNFLAGSALLVALUES,
- "QueryFlagsAllValues", // OSF32_QUERYFLAGSALLVALUES,
- "SetFlagsMaskValue", // OSF32_SETFLAGSMASKVALUE,
- "SignalFlagsMaskValue", // OSF32_SIGNALFLAGSMASKVALUE,
- "DropFlagsMaskValue", // OSF32_DROPFLAGSMASKVALUE,
- "ToggleSingleFlagValue", // OSF32_TOGGLESINGLEFLAGVALUE,
- "ModifySingleFlagValue", // OSF32_MODIFYSINGLEFLAGVALUE,
- "AssignFlagsByMask", // OSF32_ASSIGNFLAGSBYMASK,
- "AlterFlagsByMask", // OSF32_ALTERFLAGSBYMASK,
- "GetFlagsMaskValue", // OSF32_GETFLAGSMASKVALUE,
- "QueryFlagsByMask", // OSF32_QUERYFLAGSBYMASK,
- "OnlySignalSingleFlagOutOfMask", // OSF32_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- "EnumSetEnumeratedFlagValue", // OSF32_ENUMSETENUMERATEDFLAGVALUE,
- "EnumSignalEnumeratedFlagValue", // OSF32_ENUMSIGNALENUMERATEDFLAGVALUE,
- "EnumDropEnumeratedFlagValue", // OSF32_ENUMDROPENUMERATEDFLAGVALUE,
- "EnumToggleEnumeratedFlagValue", // OSF32_ENUMTOGGLEENUMERATEDFLAGVALUE,
- "EnumModifyEnumeratedFlagValue", // OSF32_ENUMMODIFYENUMERATEDFLAGVALUE,
- "EnumSignalFirstEnumeratedFlagValue", // OSF32_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- "EnumSignalLastEnumeratedFlagValue", // OSF32_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- "EnumGetEnumeratedFlagValue", // OSF32_ENUMGETENUMERATEDFLAGVALUE,
- "EnumFindFirstEnumeratedFlag", // OSF32_ENUMFINDFIRSTENUMERATEDFLAG,
- "EnumAllSignalEnumeratedFlags", // OSF32_ENUMALLSIGNALENUMERATEDFLAGS,
- "EnumAllDropEnumeratedFlags", // OSF32_ENUMALLDROPENUMERATEDFLAGS,
- "EnumAllQueryEnumeratedFlags", // OSF32_ENUMALLQUERYENUMERATEDFLAGS,
- "EnumAnyGetEnumeratedFlagValue", // OSF32_ENUMANYGETENUMERATEDFLAGVALUE,
- "StoreFlagsEnumeratedValue", // OSF32_STOREFLAGSENUMERATEDVALUE,
- "RetrieveFlagsEnumeratedValue", // OSF32_RETRIEVEFLAGSENUMERATEDVALUE,
- };
- static const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE32, OSF32__MAX, const char *> g_aszSimpleFlags32FeatureTestNames;
- bool TestSimpleFlags32(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OSF32__MAX, g_aszSimpleFlags32FeatureTestNames.GetStoragePointer(), g_afnSimpleFlags32FeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- typedef CSimpleFlagsTemplate<uint16ou> CSimpleFlags16;
- const uint16ou g_uiTestValue16 = (uint16ou)0xA5A5;
- const uint16ou g_uiTestMask16 = (uint16ou)0xC6C6;
- const uint16ou g_uiTestBit16 = (uint16ou)OU_INT16_MIN;
- const uint16ou g_uiTestAnotherBit16 = (uint16ou)((uint16ou)OU_INT16_MIN >> 1);
- bool TestSimpleFlags16_Constructors()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(CSimpleFlags16::value_type) != sizeof(uint16ou) || sizeof(CSimpleFlags16) != sizeof(uint16ou))
- {
- break;
- }
- CSimpleFlags16 sfEmptyFlags;
- if (sfEmptyFlags.QueryFlagsAllValues())
- {
- break;
- }
- CSimpleFlags16 sfFullFlags(OU_UINT16_MAX);
-
- if (sfFullFlags.QueryFlagsAllValues() != OU_UINT16_MAX)
- {
- break;
- }
- CSimpleFlags16 sfCopyOfFullFlags(sfFullFlags);
- if (sfCopyOfFullFlags.QueryFlagsAllValues() != OU_UINT16_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_AssignFlagsAllValues()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags;
- sfTestFlags.AssignFlagsAllValues(OU_UINT16_MAX);
- if (sfTestFlags.QueryFlagsAllValues() != OU_UINT16_MAX)
- {
- break;
- }
- sfTestFlags.AssignFlagsAllValues(0);
- if (sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_QueryFlagsAllValues()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue16)
- {
- break;
- }
- // Double check to be sure ;-)
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue16)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_SetFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
- sfTestFlags.SetFlagsMaskValue(g_uiTestMask16, true);
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(g_uiTestValue16 | g_uiTestMask16))
- {
- break;
- }
- sfTestFlags.SetFlagsMaskValue(g_uiTestValue16, false);
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(~g_uiTestValue16 & g_uiTestMask16))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_SignalFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
-
- sfTestFlags.SignalFlagsMaskValue(g_uiTestMask16);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(g_uiTestValue16 | g_uiTestMask16))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_DropFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
-
- sfTestFlags.DropFlagsMaskValue(g_uiTestMask16);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(g_uiTestValue16 & ~g_uiTestMask16))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_ToggleSingleFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
-
- bool bPreviousValue = sfTestFlags.ToggleSingleFlagValue(g_uiTestBit16);
-
- if (bPreviousValue != ((g_uiTestValue16 & g_uiTestBit16) != 0) || sfTestFlags.QueryFlagsAllValues() != (uint16ou)(g_uiTestValue16 ^ g_uiTestBit16))
- {
- break;
- }
- bool bAnotherPreviousValue = sfTestFlags.ToggleSingleFlagValue(g_uiTestBit16);
-
- if (bAnotherPreviousValue == bPreviousValue || sfTestFlags.QueryFlagsAllValues() != g_uiTestValue16)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_ModifySingleFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
-
- bool bFirstModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit16, true);
-
- if (bFirstModification != ((g_uiTestValue16 & g_uiTestBit16) != g_uiTestBit16) || sfTestFlags.QueryFlagsAllValues() != (uint16ou)(g_uiTestValue16 | g_uiTestBit16))
- {
- break;
- }
-
- bool bAnotherModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit16, bFirstModification);
-
- if (bAnotherModification == bFirstModification || sfTestFlags.QueryFlagsAllValues() != (bFirstModification ? (uint16ou)(g_uiTestValue16 | g_uiTestBit16) : (uint16ou)(g_uiTestValue16 & ~g_uiTestBit16)))
- {
- break;
- }
- bool bYetAnotherModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit16, bAnotherModification);
- if (bYetAnotherModification != bAnotherModification || sfTestFlags.QueryFlagsAllValues() != (bAnotherModification ? (uint16ou)(g_uiTestValue16 | g_uiTestBit16) : (uint16ou)(g_uiTestValue16 & ~g_uiTestBit16)))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_AssignFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
- uint16ou uiPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestMask16, g_uiTestMask16);
- const uint16ou uiNewFlags = (g_uiTestValue16 & ~g_uiTestMask16) | g_uiTestMask16;
- if (uiPreviousFlags != g_uiTestValue16 || sfTestFlags.QueryFlagsAllValues() != uiNewFlags)
- {
- break;
- }
- uint16ou uiAnotherPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestValue16, 0);
- const uint16ou uiAnotherNewFlags = uiNewFlags & ~g_uiTestValue16;
- if (uiAnotherPreviousFlags != uiNewFlags || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- uint16ou uiYetAnotherPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestMask16, g_uiTestMask16 & g_uiTestValue16);
- OU_ASSERT((g_uiTestMask16 & g_uiTestValue16) != 0); // Test degeneration
-
- const uint16ou uiYetAnotherNewFlags = (uiAnotherNewFlags & ~g_uiTestMask16) | (g_uiTestMask16 & g_uiTestValue16);
- OU_ASSERT(uiYetAnotherNewFlags != OU_UINT16_MAX); // Test degeneration
-
- if (uiYetAnotherPreviousFlags != uiAnotherNewFlags || sfTestFlags.QueryFlagsAllValues() != uiYetAnotherNewFlags)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_AlterFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
-
- bool bWasModification = sfTestFlags.AlterFlagsByMask(g_uiTestMask16, g_uiTestMask16);
-
- const uint16ou uiNewFlags = (g_uiTestValue16 & ~g_uiTestMask16) | g_uiTestMask16;
-
- if (bWasModification != ((g_uiTestValue16 & g_uiTestMask16) != g_uiTestMask16) || sfTestFlags.QueryFlagsAllValues() != uiNewFlags)
- {
- break;
- }
-
- bool bWasAnotherModification = sfTestFlags.AlterFlagsByMask(g_uiTestValue16, 0);
-
- const uint16ou uiAnotherNewFlags = uiNewFlags & ~g_uiTestValue16;
-
- if (bWasAnotherModification != ((uiNewFlags & g_uiTestValue16) != 0) || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- bool bWasAnotherModificationRepeated = sfTestFlags.AlterFlagsByMask(g_uiTestValue16, 0);
-
- if (bWasAnotherModificationRepeated || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- bool bWasYetAnotherModification = sfTestFlags.AlterFlagsByMask(g_uiTestMask16, g_uiTestMask16 & g_uiTestValue16);
- OU_ASSERT((g_uiTestMask16 & g_uiTestValue16) != 0); // Test degeneration
-
- const uint16ou uiYetAnotherNewFlags = (uiAnotherNewFlags & ~g_uiTestMask16) | (g_uiTestMask16 & g_uiTestValue16);
- OU_ASSERT(uiYetAnotherNewFlags != OU_UINT16_MAX); // Test degeneration
-
- if (bWasYetAnotherModification != ((uiAnotherNewFlags & g_uiTestMask16) != (g_uiTestMask16 & g_uiTestValue16)) || sfTestFlags.QueryFlagsAllValues() != uiYetAnotherNewFlags)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_GetFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
-
- if (sfTestFlags.GetFlagsMaskValue(g_uiTestMask16) != ((g_uiTestValue16 & g_uiTestMask16) != 0))
- {
- break;
- }
-
- if (sfTestFlags.GetFlagsMaskValue((uint16ou)(~g_uiTestValue16)))
- {
- break;
- }
-
- if (!sfTestFlags.GetFlagsMaskValue(OU_UINT16_MAX))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_QueryFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
-
- if (sfTestFlags.QueryFlagsByMask(g_uiTestMask16) != (uint16ou)(g_uiTestValue16 & g_uiTestMask16))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsByMask(0))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsByMask(OU_UINT16_MAX) != g_uiTestValue16)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_OnlySignalSingleFlagOutOfMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(g_uiTestValue16);
- OU_ASSERT(g_uiTestValue16 != 0); // Test degeneration
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(OU_UINT16_MAX, g_uiTestBit16))
- {
- break;
- }
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue16)
- {
- break;
- }
-
- sfTestFlags.AssignFlagsAllValues(0);
- if (!sfTestFlags.OnlySignalSingleFlagOutOfMask(g_uiTestBit16, g_uiTestBit16))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit16)
- {
- break;
- }
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(g_uiTestBit16, g_uiTestBit16))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit16)
- {
- break;
- }
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(OU_UINT16_MAX, g_uiTestAnotherBit16))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit16)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumSetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags;
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, 0, OU_UINT16_BITS, true);
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS, true);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_INT16_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, 0, OU_UINT16_BITS, false);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)OU_INT16_MIN)
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS, false);
-
- if (sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumSignalEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags;
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, 0, OU_UINT16_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_INT16_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, 0, OU_UINT16_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_INT16_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_INT16_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumDropEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(OU_UINT16_MAX);
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, 0, OU_UINT16_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (OU_UINT16_MAX ^ 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)~(OU_INT16_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, 0, OU_UINT16_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)~(OU_INT16_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)~(OU_INT16_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumToggleEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags;
-
- bool bToggleFirstResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, 0, OU_UINT16_BITS);
-
- if (bToggleFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bToggleSecondResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS);
-
- if (bToggleSecondResult || sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_INT16_MIN + 1))
- {
- break;
- }
-
- bool bToggleThirdResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, 0, OU_UINT16_BITS);
-
- if (!bToggleThirdResult || sfTestFlags.QueryFlagsAllValues() != (uint16ou)OU_INT16_MIN)
- {
- break;
- }
-
- bool bToggleFourthResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS);
-
- if (!bToggleFourthResult || sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumModifyEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags;
-
- bool bModifyFirstResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT16_BITS, true);
-
- if (!bModifyFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bModifySecondResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS, true);
-
- if (!bModifySecondResult || sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_INT16_MIN + 1))
- {
- break;
- }
-
- bool bModifyThirdResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT16_BITS, true);
-
- if (bModifyThirdResult || sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_INT16_MIN + 1))
- {
- break;
- }
-
- bool bModifyFourthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS, true);
-
- if (bModifyFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_INT16_MIN + 1))
- {
- break;
- }
-
- bool bModifyFifthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT16_BITS, false);
-
- if (!bModifyFifthResult || sfTestFlags.QueryFlagsAllValues() != (uint16ou)OU_INT16_MIN)
- {
- break;
- }
-
- bool bModifySixthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS, false);
-
- if (!bModifySixthResult || sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumSignalFirstEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags;
- bool bFirstResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, 0, OU_UINT16_BITS);
- if (!bFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, 0, OU_UINT16_BITS);
-
- if (bSecondResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(2, 0, OU_UINT16_BITS - 1);
-
- if (!bThirdResult || sfTestFlags.QueryFlagsAllValues() != 3)
- {
- break;
- }
-
- bool bFourthResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS);
-
- if (bFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_INT16_MIN + 3))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumSignalLastEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags;
-
- bool bFirstResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 0, 1);
-
- if (!bFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 0, 1);
-
- if (bSecondResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 1, 2);
-
- if (!bThirdResult || sfTestFlags.QueryFlagsAllValues() != 3)
- {
- break;
- }
-
- bool bFourthResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS);
-
- if (bFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_INT16_MIN + 3))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumGetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags((uint16ou)(OU_INT16_MIN + 1));
-
- if (!sfTestFlags.EnumGetEnumeratedFlagValue(1, 0, OU_UINT16_BITS))
- {
- break;
- }
-
- if (sfTestFlags.EnumGetEnumeratedFlagValue(2, 0, OU_UINT16_BITS - 1))
- {
- break;
- }
-
- if (sfTestFlags.EnumGetEnumeratedFlagValue(1, 1, OU_UINT16_BITS - 1))
- {
- break;
- }
-
- if (!sfTestFlags.EnumGetEnumeratedFlagValue(1, OU_UINT16_BITS - 1, OU_UINT16_BITS))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumFindFirstEnumeratedFlag()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags((uint16ou)(OU_INT16_MIN + 1));
- unsigned int uiFirstResult = sfTestFlags.EnumFindFirstEnumeratedFlag(1, OU_UINT16_BITS);
- if (uiFirstResult != 0)
- {
- break;
- }
- unsigned int uiSecondResult = sfTestFlags.EnumFindFirstEnumeratedFlag(2, OU_UINT16_BITS - 1);
- if (uiSecondResult != OU_UINT16_BITS - 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumAllSignalEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags;
-
- sfTestFlags.EnumAllSignalEnumeratedFlags(1, 1);
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
- sfTestFlags.EnumAllSignalEnumeratedFlags(4, OU_UINT16_BITS - 2);
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_UINT16_MAX ^ 2))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumAllDropEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags(OU_UINT16_MAX);
-
- sfTestFlags.EnumAllDropEnumeratedFlags(1, 1);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(OU_UINT16_MAX ^ 1))
- {
- break;
- }
-
- sfTestFlags.EnumAllDropEnumeratedFlags(4, OU_UINT16_BITS - 2);
-
- if (sfTestFlags.QueryFlagsAllValues() != 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumAllQueryEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags((uint16ou)(OU_INT16_MIN + 1));
-
- uint16ou uiFirstResult = sfTestFlags.EnumAllQueryEnumeratedFlags(1, OU_UINT16_BITS);
- if (uiFirstResult != (uint16ou)(OU_INT16_MIN + 1))
- {
- break;
- }
-
- uint16ou uiSecondResult = sfTestFlags.EnumAllQueryEnumeratedFlags(2, OU_UINT16_BITS - 1);
- if (uiSecondResult != (uint16ou)(OU_INT16_MIN))
- {
- break;
- }
-
- uint16ou uiThirdResult = sfTestFlags.EnumAllQueryEnumeratedFlags(2, OU_UINT16_BITS - 2);
- if (uiThirdResult != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_EnumAnyGetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags((uint16ou)(OU_INT16_MIN + 1));
-
- bool bFirstResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(1, OU_UINT16_BITS);
- if (!bFirstResult)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(2, OU_UINT16_BITS - 1);
- if (!bSecondResult)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(2, OU_UINT16_BITS - 2);
- if (bThirdResult)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_StoreFlagsEnumeratedValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags;
- sfTestFlags.StoreFlagsEnumeratedValue(0x03, 1, 2);
- if (sfTestFlags.QueryFlagsAllValues() != (uint16ou)(2 << 1))
- {
- break;
- }
-
- sfTestFlags.StoreFlagsEnumeratedValue(0x03, OU_UINT16_BITS - 2, 3);
-
- if (sfTestFlags.QueryFlagsAllValues() != ((uint16ou)(2 << 1) | (uint16ou)(OU_INT16_MIN | (OU_INT16_MIN >> 1))))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags16_RetrieveFlagsEnumeratedValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags16 sfTestFlags((uint16ou)(OU_INT16_MIN + 1));
-
- unsigned int uiFirstResult = sfTestFlags.RetrieveFlagsEnumeratedValue(0x3, 1);
- if (uiFirstResult != 0)
- {
- break;
- }
-
- unsigned int uiSecondResult = sfTestFlags.RetrieveFlagsEnumeratedValue(0x3, OU_UINT16_BITS - 2);
- if (uiSecondResult != 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- enum EOUSIMPLEFLAGSFEATURE16
- {
- OSF16__MIN,
-
- OSF16_CONSTRUCTORS = OSF16__MIN,
- OSF16_ASSIGNFLAGSALLVALUES,
- OSF16_QUERYFLAGSALLVALUES,
- OSF16_SETFLAGSMASKVALUE,
- OSF16_SIGNALFLAGSMASKVALUE,
- OSF16_DROPFLAGSMASKVALUE,
- OSF16_TOGGLESINGLEFLAGVALUE,
- OSF16_MODIFYSINGLEFLAGVALUE,
- OSF16_ASSIGNFLAGSBYMASK,
- OSF16_ALTERFLAGSBYMASK,
- OSF16_GETFLAGSMASKVALUE,
- OSF16_QUERYFLAGSBYMASK,
- OSF16_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- OSF16_ENUMSETENUMERATEDFLAGVALUE,
- OSF16_ENUMSIGNALENUMERATEDFLAGVALUE,
- OSF16_ENUMDROPENUMERATEDFLAGVALUE,
- OSF16_ENUMTOGGLEENUMERATEDFLAGVALUE,
- OSF16_ENUMMODIFYENUMERATEDFLAGVALUE,
- OSF16_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- OSF16_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- OSF16_ENUMGETENUMERATEDFLAGVALUE,
- OSF16_ENUMFINDFIRSTENUMERATEDFLAG,
- OSF16_ENUMALLSIGNALENUMERATEDFLAGS,
- OSF16_ENUMALLDROPENUMERATEDFLAGS,
- OSF16_ENUMALLQUERYENUMERATEDFLAGS,
- OSF16_ENUMANYGETENUMERATEDFLAGVALUE,
- OSF16_STOREFLAGSENUMERATEDVALUE,
- OSF16_RETRIEVEFLAGSENUMERATEDVALUE,
- OSF16__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE16, OSF16__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestSimpleFlags16_Constructors, // OSF16_CONSTRUCTORS
- &TestSimpleFlags16_AssignFlagsAllValues, // OSF16_ASSIGNFLAGSALLVALUES,
- &TestSimpleFlags16_QueryFlagsAllValues, // OSF16_QUERYFLAGSALLVALUES,
- &TestSimpleFlags16_SetFlagsMaskValue, // OSF16_SETFLAGSMASKVALUE,
- &TestSimpleFlags16_SignalFlagsMaskValue, // OSF16_SIGNALFLAGSMASKVALUE,
- &TestSimpleFlags16_DropFlagsMaskValue, // OSF16_DROPFLAGSMASKVALUE,
- &TestSimpleFlags16_ToggleSingleFlagValue, // OSF16_TOGGLESINGLEFLAGVALUE,
- &TestSimpleFlags16_ModifySingleFlagValue, // OSF16_MODIFYSINGLEFLAGVALUE,
- &TestSimpleFlags16_AssignFlagsByMask, // OSF16_ASSIGNFLAGSBYMASK,
- &TestSimpleFlags16_AlterFlagsByMask, // OSF16_ALTERFLAGSBYMASK,
- &TestSimpleFlags16_GetFlagsMaskValue, // OSF16_GETFLAGSMASKVALUE,
- &TestSimpleFlags16_QueryFlagsByMask, // OSF16_QUERYFLAGSBYMASK,
- &TestSimpleFlags16_OnlySignalSingleFlagOutOfMask, // OSF16_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- &TestSimpleFlags16_EnumSetEnumeratedFlagValue, // OSF16_ENUMSETENUMERATEDFLAGVALUE,
- &TestSimpleFlags16_EnumSignalEnumeratedFlagValue, // OSF16_ENUMSIGNALENUMERATEDFLAGVALUE,
- &TestSimpleFlags16_EnumDropEnumeratedFlagValue, // OSF16_ENUMDROPENUMERATEDFLAGVALUE,
- &TestSimpleFlags16_EnumToggleEnumeratedFlagValue, // OSF16_ENUMTOGGLEENUMERATEDFLAGVALUE,
- &TestSimpleFlags16_EnumModifyEnumeratedFlagValue, // OSF16_ENUMMODIFYENUMERATEDFLAGVALUE,
- &TestSimpleFlags16_EnumSignalFirstEnumeratedFlagValue, // OSF16_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- &TestSimpleFlags16_EnumSignalLastEnumeratedFlagValue, // OSF16_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- &TestSimpleFlags16_EnumGetEnumeratedFlagValue, // OSF16_ENUMGETENUMERATEDFLAGVALUE,
- &TestSimpleFlags16_EnumFindFirstEnumeratedFlag, // OSF16_ENUMFINDFIRSTENUMERATEDFLAG,
- &TestSimpleFlags16_EnumAllSignalEnumeratedFlags, // OSF16_ENUMALLSIGNALENUMERATEDFLAGS,
- &TestSimpleFlags16_EnumAllDropEnumeratedFlags, // OSF16_ENUMALLDROPENUMERATEDFLAGS,
- &TestSimpleFlags16_EnumAllQueryEnumeratedFlags, // OSF16_ENUMALLQUERYENUMERATEDFLAGS,
- &TestSimpleFlags16_EnumAnyGetEnumeratedFlagValue, // OSF16_ENUMANYGETENUMERATEDFLAGVALUE,
- &TestSimpleFlags16_StoreFlagsEnumeratedValue, // OSF16_STOREFLAGSENUMERATEDVALUE,
- &TestSimpleFlags16_RetrieveFlagsEnumeratedValue, // OSF16_RETRIEVEFLAGSENUMERATEDVALUE,
- };
- static const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE16, OSF16__MAX, CFeatureTestProcedure> g_afnSimpleFlags16FeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE16, OSF16__MAX, const char *>::m_aetElementArray[] =
- {
- "Constructors", // OSF16_CONSTRUCTORS
- "AssignFlagsAllValues", // OSF16_ASSIGNFLAGSALLVALUES,
- "QueryFlagsAllValues", // OSF16_QUERYFLAGSALLVALUES,
- "SetFlagsMaskValue", // OSF16_SETFLAGSMASKVALUE,
- "SignalFlagsMaskValue", // OSF16_SIGNALFLAGSMASKVALUE,
- "DropFlagsMaskValue", // OSF16_DROPFLAGSMASKVALUE,
- "ToggleSingleFlagValue", // OSF16_TOGGLESINGLEFLAGVALUE,
- "ModifySingleFlagValue", // OSF16_MODIFYSINGLEFLAGVALUE,
- "AssignFlagsByMask", // OSF16_ASSIGNFLAGSBYMASK,
- "AlterFlagsByMask", // OSF16_ALTERFLAGSBYMASK,
- "GetFlagsMaskValue", // OSF16_GETFLAGSMASKVALUE,
- "QueryFlagsByMask", // OSF16_QUERYFLAGSBYMASK,
- "OnlySignalSingleFlagOutOfMask", // OSF16_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- "EnumSetEnumeratedFlagValue", // OSF16_ENUMSETENUMERATEDFLAGVALUE,
- "EnumSignalEnumeratedFlagValue", // OSF16_ENUMSIGNALENUMERATEDFLAGVALUE,
- "EnumDropEnumeratedFlagValue", // OSF16_ENUMDROPENUMERATEDFLAGVALUE,
- "EnumToggleEnumeratedFlagValue", // OSF16_ENUMTOGGLEENUMERATEDFLAGVALUE,
- "EnumModifyEnumeratedFlagValue", // OSF16_ENUMMODIFYENUMERATEDFLAGVALUE,
- "EnumSignalFirstEnumeratedFlagValue", // OSF16_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- "EnumSignalLastEnumeratedFlagValue", // OSF16_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- "EnumGetEnumeratedFlagValue", // OSF16_ENUMGETENUMERATEDFLAGVALUE,
- "EnumFindFirstEnumeratedFlag", // OSF16_ENUMFINDFIRSTENUMERATEDFLAG,
- "EnumAllSignalEnumeratedFlags", // OSF16_ENUMALLSIGNALENUMERATEDFLAGS,
- "EnumAllDropEnumeratedFlags", // OSF16_ENUMALLDROPENUMERATEDFLAGS,
- "EnumAllQueryEnumeratedFlags", // OSF16_ENUMALLQUERYENUMERATEDFLAGS,
- "EnumAnyGetEnumeratedFlagValue", // OSF16_ENUMANYGETENUMERATEDFLAGVALUE,
- "StoreFlagsEnumeratedValue", // OSF16_STOREFLAGSENUMERATEDVALUE,
- "RetrieveFlagsEnumeratedValue", // OSF16_RETRIEVEFLAGSENUMERATEDVALUE,
- };
- static const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE16, OSF16__MAX, const char *> g_aszSimpleFlags16FeatureTestNames;
- bool TestSimpleFlags16(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OSF16__MAX, g_aszSimpleFlags16FeatureTestNames.GetStoragePointer(), g_afnSimpleFlags16FeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- typedef CSimpleFlagsTemplate<uint8ou> CSimpleFlags8;
- const uint8ou g_uiTestValue8 = (uint8ou)0xA5;
- const uint8ou g_uiTestMask8 = (uint8ou)0xC6;
- const uint8ou g_uiTestBit8 = (uint8ou)OU_INT8_MIN;
- const uint8ou g_uiTestAnotherBit8 = (uint8ou)((uint8ou)OU_INT8_MIN >> 1);
- bool TestSimpleFlags8_Constructors()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(CSimpleFlags8::value_type) != sizeof(uint8ou) || sizeof(CSimpleFlags8) != sizeof(uint8ou))
- {
- break;
- }
- CSimpleFlags8 sfEmptyFlags;
- if (sfEmptyFlags.QueryFlagsAllValues())
- {
- break;
- }
- CSimpleFlags8 sfFullFlags(OU_UINT8_MAX);
-
- if (sfFullFlags.QueryFlagsAllValues() != OU_UINT8_MAX)
- {
- break;
- }
- CSimpleFlags8 sfCopyOfFullFlags(sfFullFlags);
- if (sfCopyOfFullFlags.QueryFlagsAllValues() != OU_UINT8_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_AssignFlagsAllValues()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags;
- sfTestFlags.AssignFlagsAllValues(OU_UINT8_MAX);
- if (sfTestFlags.QueryFlagsAllValues() != OU_UINT8_MAX)
- {
- break;
- }
- sfTestFlags.AssignFlagsAllValues(0);
- if (sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_QueryFlagsAllValues()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue8)
- {
- break;
- }
- // Double check to be sure ;-)
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue8)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_SetFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
- sfTestFlags.SetFlagsMaskValue(g_uiTestMask8, true);
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(g_uiTestValue8 | g_uiTestMask8))
- {
- break;
- }
- sfTestFlags.SetFlagsMaskValue(g_uiTestValue8, false);
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(~g_uiTestValue8 & g_uiTestMask8))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_SignalFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
-
- sfTestFlags.SignalFlagsMaskValue(g_uiTestMask8);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(g_uiTestValue8 | g_uiTestMask8))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_DropFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
-
- sfTestFlags.DropFlagsMaskValue(g_uiTestMask8);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(g_uiTestValue8 & ~g_uiTestMask8))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_ToggleSingleFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
-
- bool bPreviousValue = sfTestFlags.ToggleSingleFlagValue(g_uiTestBit8);
-
- if (bPreviousValue != ((g_uiTestValue8 & g_uiTestBit8) != 0) || sfTestFlags.QueryFlagsAllValues() != (uint8ou)(g_uiTestValue8 ^ g_uiTestBit8))
- {
- break;
- }
- bool bAnotherPreviousValue = sfTestFlags.ToggleSingleFlagValue(g_uiTestBit8);
-
- if (bAnotherPreviousValue == bPreviousValue || sfTestFlags.QueryFlagsAllValues() != g_uiTestValue8)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_ModifySingleFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
-
- bool bFirstModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit8, true);
-
- if (bFirstModification != ((g_uiTestValue8 & g_uiTestBit8) != g_uiTestBit8) || sfTestFlags.QueryFlagsAllValues() != (uint8ou)(g_uiTestValue8 | g_uiTestBit8))
- {
- break;
- }
-
- bool bAnotherModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit8, bFirstModification);
-
- if (bAnotherModification == bFirstModification || sfTestFlags.QueryFlagsAllValues() != (bFirstModification ? (uint8ou)(g_uiTestValue8 | g_uiTestBit8) : (uint8ou)(g_uiTestValue8 & ~g_uiTestBit8)))
- {
- break;
- }
- bool bYetAnotherModification = sfTestFlags.ModifySingleFlagValue(g_uiTestBit8, bAnotherModification);
- if (bYetAnotherModification != bAnotherModification || sfTestFlags.QueryFlagsAllValues() != (bAnotherModification ? (uint8ou)(g_uiTestValue8 | g_uiTestBit8) : (uint8ou)(g_uiTestValue8 & ~g_uiTestBit8)))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_AssignFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
- uint8ou uiPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestMask8, g_uiTestMask8);
- const uint8ou uiNewFlags = (g_uiTestValue8 & ~g_uiTestMask8) | g_uiTestMask8;
- if (uiPreviousFlags != g_uiTestValue8 || sfTestFlags.QueryFlagsAllValues() != uiNewFlags)
- {
- break;
- }
- uint8ou uiAnotherPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestValue8, 0);
- const uint8ou uiAnotherNewFlags = uiNewFlags & ~g_uiTestValue8;
- if (uiAnotherPreviousFlags != uiNewFlags || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- uint8ou uiYetAnotherPreviousFlags = sfTestFlags.AssignFlagsByMask(g_uiTestMask8, g_uiTestMask8 & g_uiTestValue8);
- OU_ASSERT((g_uiTestMask8 & g_uiTestValue8) != 0); // Test degeneration
-
- const uint8ou uiYetAnotherNewFlags = (uiAnotherNewFlags & ~g_uiTestMask8) | (g_uiTestMask8 & g_uiTestValue8);
- OU_ASSERT(uiYetAnotherNewFlags != OU_UINT8_MAX); // Test degeneration
-
- if (uiYetAnotherPreviousFlags != uiAnotherNewFlags || sfTestFlags.QueryFlagsAllValues() != uiYetAnotherNewFlags)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_AlterFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
-
- bool bWasModification = sfTestFlags.AlterFlagsByMask(g_uiTestMask8, g_uiTestMask8);
-
- const uint8ou uiNewFlags = (g_uiTestValue8 & ~g_uiTestMask8) | g_uiTestMask8;
-
- if (bWasModification != ((g_uiTestValue8 & g_uiTestMask8) != g_uiTestMask8) || sfTestFlags.QueryFlagsAllValues() != uiNewFlags)
- {
- break;
- }
-
- bool bWasAnotherModification = sfTestFlags.AlterFlagsByMask(g_uiTestValue8, 0);
-
- const uint8ou uiAnotherNewFlags = uiNewFlags & ~g_uiTestValue8;
-
- if (bWasAnotherModification != ((uiNewFlags & g_uiTestValue8) != 0) || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- bool bWasAnotherModificationRepeated = sfTestFlags.AlterFlagsByMask(g_uiTestValue8, 0);
-
- if (bWasAnotherModificationRepeated || sfTestFlags.QueryFlagsAllValues() != uiAnotherNewFlags)
- {
- break;
- }
-
- bool bWasYetAnotherModification = sfTestFlags.AlterFlagsByMask(g_uiTestMask8, g_uiTestMask8 & g_uiTestValue8);
- OU_ASSERT((g_uiTestMask8 & g_uiTestValue8) != 0); // Test degeneration
-
- const uint8ou uiYetAnotherNewFlags = (uiAnotherNewFlags & ~g_uiTestMask8) | (g_uiTestMask8 & g_uiTestValue8);
- OU_ASSERT(uiYetAnotherNewFlags != OU_UINT8_MAX); // Test degeneration
-
- if (bWasYetAnotherModification != ((uiAnotherNewFlags & g_uiTestMask8) != (g_uiTestMask8 & g_uiTestValue8)) || sfTestFlags.QueryFlagsAllValues() != uiYetAnotherNewFlags)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_GetFlagsMaskValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
-
- if (sfTestFlags.GetFlagsMaskValue(g_uiTestMask8) != ((g_uiTestValue8 & g_uiTestMask8) != 0))
- {
- break;
- }
-
- if (sfTestFlags.GetFlagsMaskValue((uint8ou)(~g_uiTestValue8)))
- {
- break;
- }
-
- if (!sfTestFlags.GetFlagsMaskValue(OU_UINT8_MAX))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_QueryFlagsByMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
-
- if (sfTestFlags.QueryFlagsByMask(g_uiTestMask8) != (uint8ou)(g_uiTestValue8 & g_uiTestMask8))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsByMask(0))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsByMask(OU_UINT8_MAX) != g_uiTestValue8)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_OnlySignalSingleFlagOutOfMask()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(g_uiTestValue8);
- OU_ASSERT(g_uiTestValue8 != 0); // Test degeneration
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(OU_UINT8_MAX, g_uiTestBit8))
- {
- break;
- }
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestValue8)
- {
- break;
- }
-
- sfTestFlags.AssignFlagsAllValues(0);
- if (!sfTestFlags.OnlySignalSingleFlagOutOfMask(g_uiTestBit8, g_uiTestBit8))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit8)
- {
- break;
- }
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(g_uiTestBit8, g_uiTestBit8))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit8)
- {
- break;
- }
-
- if (sfTestFlags.OnlySignalSingleFlagOutOfMask(OU_UINT8_MAX, g_uiTestAnotherBit8))
- {
- break;
- }
-
- if (sfTestFlags.QueryFlagsAllValues() != g_uiTestBit8)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumSetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags;
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, 0, OU_UINT8_BITS, true);
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS, true);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_INT8_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, 0, OU_UINT8_BITS, false);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)OU_INT8_MIN)
- {
- break;
- }
-
- sfTestFlags.EnumSetEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS, false);
-
- if (sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumSignalEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags;
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, 0, OU_UINT8_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_INT8_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, 0, OU_UINT8_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_INT8_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumSignalEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_INT8_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumDropEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(OU_UINT8_MAX);
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, 0, OU_UINT8_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (OU_UINT8_MAX ^ 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)~(OU_INT8_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, 0, OU_UINT8_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)~(OU_INT8_MIN + 1))
- {
- break;
- }
-
- sfTestFlags.EnumDropEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)~(OU_INT8_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumToggleEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags;
-
- bool bToggleFirstResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, 0, OU_UINT8_BITS);
-
- if (bToggleFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bToggleSecondResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS);
-
- if (bToggleSecondResult || sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_INT8_MIN + 1))
- {
- break;
- }
-
- bool bToggleThirdResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, 0, OU_UINT8_BITS);
-
- if (!bToggleThirdResult || sfTestFlags.QueryFlagsAllValues() != (uint8ou)OU_INT8_MIN)
- {
- break;
- }
-
- bool bToggleFourthResult = sfTestFlags.EnumToggleEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS);
-
- if (!bToggleFourthResult || sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumModifyEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags;
-
- bool bModifyFirstResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT8_BITS, true);
-
- if (!bModifyFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bModifySecondResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS, true);
-
- if (!bModifySecondResult || sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_INT8_MIN + 1))
- {
- break;
- }
-
- bool bModifyThirdResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT8_BITS, true);
-
- if (bModifyThirdResult || sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_INT8_MIN + 1))
- {
- break;
- }
-
- bool bModifyFourthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS, true);
-
- if (bModifyFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_INT8_MIN + 1))
- {
- break;
- }
-
- bool bModifyFifthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, 0, OU_UINT8_BITS, false);
-
- if (!bModifyFifthResult || sfTestFlags.QueryFlagsAllValues() != (uint8ou)OU_INT8_MIN)
- {
- break;
- }
-
- bool bModifySixthResult = sfTestFlags.EnumModifyEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS, false);
-
- if (!bModifySixthResult || sfTestFlags.QueryFlagsAllValues() != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumSignalFirstEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags;
- bool bFirstResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, 0, OU_UINT8_BITS);
- if (!bFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, 0, OU_UINT8_BITS);
-
- if (bSecondResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(2, 0, OU_UINT8_BITS - 1);
-
- if (!bThirdResult || sfTestFlags.QueryFlagsAllValues() != 3)
- {
- break;
- }
-
- bool bFourthResult = sfTestFlags.EnumSignalFirstEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS);
-
- if (bFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_INT8_MIN + 3))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumSignalLastEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags;
-
- bool bFirstResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 0, 1);
-
- if (!bFirstResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 0, 1);
-
- if (bSecondResult || sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, 1, 2);
-
- if (!bThirdResult || sfTestFlags.QueryFlagsAllValues() != 3)
- {
- break;
- }
-
- bool bFourthResult = sfTestFlags.EnumSignalLastEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS);
-
- if (bFourthResult || sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_INT8_MIN + 3))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumGetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags((uint8ou)(OU_INT8_MIN + 1));
-
- if (!sfTestFlags.EnumGetEnumeratedFlagValue(1, 0, OU_UINT8_BITS))
- {
- break;
- }
-
- if (sfTestFlags.EnumGetEnumeratedFlagValue(2, 0, OU_UINT8_BITS - 1))
- {
- break;
- }
-
- if (sfTestFlags.EnumGetEnumeratedFlagValue(1, 1, OU_UINT8_BITS - 1))
- {
- break;
- }
-
- if (!sfTestFlags.EnumGetEnumeratedFlagValue(1, OU_UINT8_BITS - 1, OU_UINT8_BITS))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumFindFirstEnumeratedFlag()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags((uint8ou)(OU_INT8_MIN + 1));
- unsigned int uiFirstResult = sfTestFlags.EnumFindFirstEnumeratedFlag(1, OU_UINT8_BITS);
- if (uiFirstResult != 0)
- {
- break;
- }
- unsigned int uiSecondResult = sfTestFlags.EnumFindFirstEnumeratedFlag(2, OU_UINT8_BITS - 1);
- if (uiSecondResult != OU_UINT8_BITS - 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumAllSignalEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags;
-
- sfTestFlags.EnumAllSignalEnumeratedFlags(1, 1);
- if (sfTestFlags.QueryFlagsAllValues() != 1)
- {
- break;
- }
- sfTestFlags.EnumAllSignalEnumeratedFlags(4, OU_UINT8_BITS - 2);
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_UINT8_MAX ^ 2))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumAllDropEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags(OU_UINT8_MAX);
-
- sfTestFlags.EnumAllDropEnumeratedFlags(1, 1);
-
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(OU_UINT8_MAX ^ 1))
- {
- break;
- }
-
- sfTestFlags.EnumAllDropEnumeratedFlags(4, OU_UINT8_BITS - 2);
-
- if (sfTestFlags.QueryFlagsAllValues() != 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumAllQueryEnumeratedFlags()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags((uint8ou)(OU_INT8_MIN + 1));
-
- uint8ou uiFirstResult = sfTestFlags.EnumAllQueryEnumeratedFlags(1, OU_UINT8_BITS);
- if (uiFirstResult != (uint8ou)(OU_INT8_MIN + 1))
- {
- break;
- }
-
- uint8ou uiSecondResult = sfTestFlags.EnumAllQueryEnumeratedFlags(2, OU_UINT8_BITS - 1);
- if (uiSecondResult != (uint8ou)(OU_INT8_MIN))
- {
- break;
- }
-
- uint8ou uiThirdResult = sfTestFlags.EnumAllQueryEnumeratedFlags(2, OU_UINT8_BITS - 2);
- if (uiThirdResult != 0)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_EnumAnyGetEnumeratedFlagValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags((uint8ou)(OU_INT8_MIN + 1));
-
- bool bFirstResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(1, OU_UINT8_BITS);
- if (!bFirstResult)
- {
- break;
- }
-
- bool bSecondResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(2, OU_UINT8_BITS - 1);
- if (!bSecondResult)
- {
- break;
- }
-
- bool bThirdResult = sfTestFlags.EnumAnyGetEnumeratedFlagValue(2, OU_UINT8_BITS - 2);
- if (bThirdResult)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_StoreFlagsEnumeratedValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags;
- sfTestFlags.StoreFlagsEnumeratedValue(0x03, 1, 2);
- if (sfTestFlags.QueryFlagsAllValues() != (uint8ou)(2 << 1))
- {
- break;
- }
-
- sfTestFlags.StoreFlagsEnumeratedValue(0x03, OU_UINT8_BITS - 2, 3);
-
- if (sfTestFlags.QueryFlagsAllValues() != ((uint8ou)(2 << 1) | (uint8ou)(OU_INT8_MIN | (OU_INT8_MIN >> 1))))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestSimpleFlags8_RetrieveFlagsEnumeratedValue()
- {
- bool bResult = false;
-
- do
- {
- CSimpleFlags8 sfTestFlags((uint8ou)(OU_INT8_MIN + 1));
-
- unsigned int uiFirstResult = sfTestFlags.RetrieveFlagsEnumeratedValue(0x3, 1);
- if (uiFirstResult != 0)
- {
- break;
- }
-
- unsigned int uiSecondResult = sfTestFlags.RetrieveFlagsEnumeratedValue(0x3, OU_UINT8_BITS - 2);
- if (uiSecondResult != 2)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- enum EOUSIMPLEFLAGSFEATURE8
- {
- OSF8__MIN,
-
- OSF8_CONSTRUCTORS = OSF8__MIN,
- OSF8_ASSIGNFLAGSALLVALUES,
- OSF8_QUERYFLAGSALLVALUES,
- OSF8_SETFLAGSMASKVALUE,
- OSF8_SIGNALFLAGSMASKVALUE,
- OSF8_DROPFLAGSMASKVALUE,
- OSF8_TOGGLESINGLEFLAGVALUE,
- OSF8_MODIFYSINGLEFLAGVALUE,
- OSF8_ASSIGNFLAGSBYMASK,
- OSF8_ALTERFLAGSBYMASK,
- OSF8_GETFLAGSMASKVALUE,
- OSF8_QUERYFLAGSBYMASK,
- OSF8_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- OSF8_ENUMSETENUMERATEDFLAGVALUE,
- OSF8_ENUMSIGNALENUMERATEDFLAGVALUE,
- OSF8_ENUMDROPENUMERATEDFLAGVALUE,
- OSF8_ENUMTOGGLEENUMERATEDFLAGVALUE,
- OSF8_ENUMMODIFYENUMERATEDFLAGVALUE,
- OSF8_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- OSF8_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- OSF8_ENUMGETENUMERATEDFLAGVALUE,
- OSF8_ENUMFINDFIRSTENUMERATEDFLAG,
- OSF8_ENUMALLSIGNALENUMERATEDFLAGS,
- OSF8_ENUMALLDROPENUMERATEDFLAGS,
- OSF8_ENUMALLQUERYENUMERATEDFLAGS,
- OSF8_ENUMANYGETENUMERATEDFLAGVALUE,
- OSF8_STOREFLAGSENUMERATEDVALUE,
- OSF8_RETRIEVEFLAGSENUMERATEDVALUE,
- OSF8__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE8, OSF8__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestSimpleFlags8_Constructors, // OSF8_CONSTRUCTORS
- &TestSimpleFlags8_AssignFlagsAllValues, // OSF8_ASSIGNFLAGSALLVALUES,
- &TestSimpleFlags8_QueryFlagsAllValues, // OSF8_QUERYFLAGSALLVALUES,
- &TestSimpleFlags8_SetFlagsMaskValue, // OSF8_SETFLAGSMASKVALUE,
- &TestSimpleFlags8_SignalFlagsMaskValue, // OSF8_SIGNALFLAGSMASKVALUE,
- &TestSimpleFlags8_DropFlagsMaskValue, // OSF8_DROPFLAGSMASKVALUE,
- &TestSimpleFlags8_ToggleSingleFlagValue, // OSF8_TOGGLESINGLEFLAGVALUE,
- &TestSimpleFlags8_ModifySingleFlagValue, // OSF8_MODIFYSINGLEFLAGVALUE,
- &TestSimpleFlags8_AssignFlagsByMask, // OSF8_ASSIGNFLAGSBYMASK,
- &TestSimpleFlags8_AlterFlagsByMask, // OSF8_ALTERFLAGSBYMASK,
- &TestSimpleFlags8_GetFlagsMaskValue, // OSF8_GETFLAGSMASKVALUE,
- &TestSimpleFlags8_QueryFlagsByMask, // OSF8_QUERYFLAGSBYMASK,
- &TestSimpleFlags8_OnlySignalSingleFlagOutOfMask, // OSF8_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- &TestSimpleFlags8_EnumSetEnumeratedFlagValue, // OSF8_ENUMSETENUMERATEDFLAGVALUE,
- &TestSimpleFlags8_EnumSignalEnumeratedFlagValue, // OSF8_ENUMSIGNALENUMERATEDFLAGVALUE,
- &TestSimpleFlags8_EnumDropEnumeratedFlagValue, // OSF8_ENUMDROPENUMERATEDFLAGVALUE,
- &TestSimpleFlags8_EnumToggleEnumeratedFlagValue, // OSF8_ENUMTOGGLEENUMERATEDFLAGVALUE,
- &TestSimpleFlags8_EnumModifyEnumeratedFlagValue, // OSF8_ENUMMODIFYENUMERATEDFLAGVALUE,
- &TestSimpleFlags8_EnumSignalFirstEnumeratedFlagValue, // OSF8_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- &TestSimpleFlags8_EnumSignalLastEnumeratedFlagValue, // OSF8_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- &TestSimpleFlags8_EnumGetEnumeratedFlagValue, // OSF8_ENUMGETENUMERATEDFLAGVALUE,
- &TestSimpleFlags8_EnumFindFirstEnumeratedFlag, // OSF8_ENUMFINDFIRSTENUMERATEDFLAG,
- &TestSimpleFlags8_EnumAllSignalEnumeratedFlags, // OSF8_ENUMALLSIGNALENUMERATEDFLAGS,
- &TestSimpleFlags8_EnumAllDropEnumeratedFlags, // OSF8_ENUMALLDROPENUMERATEDFLAGS,
- &TestSimpleFlags8_EnumAllQueryEnumeratedFlags, // OSF8_ENUMALLQUERYENUMERATEDFLAGS,
- &TestSimpleFlags8_EnumAnyGetEnumeratedFlagValue, // OSF8_ENUMANYGETENUMERATEDFLAGVALUE,
- &TestSimpleFlags8_StoreFlagsEnumeratedValue, // OSF8_STOREFLAGSENUMERATEDVALUE,
- &TestSimpleFlags8_RetrieveFlagsEnumeratedValue, // OSF8_RETRIEVEFLAGSENUMERATEDVALUE,
- };
- static const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE8, OSF8__MAX, CFeatureTestProcedure> g_afnSimpleFlags8FeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE8, OSF8__MAX, const char *>::m_aetElementArray[] =
- {
- "Constructors", // OSF8_CONSTRUCTORS
- "AssignFlagsAllValues", // OSF8_ASSIGNFLAGSALLVALUES,
- "QueryFlagsAllValues", // OSF8_QUERYFLAGSALLVALUES,
- "SetFlagsMaskValue", // OSF8_SETFLAGSMASKVALUE,
- "SignalFlagsMaskValue", // OSF8_SIGNALFLAGSMASKVALUE,
- "DropFlagsMaskValue", // OSF8_DROPFLAGSMASKVALUE,
- "ToggleSingleFlagValue", // OSF8_TOGGLESINGLEFLAGVALUE,
- "ModifySingleFlagValue", // OSF8_MODIFYSINGLEFLAGVALUE,
- "AssignFlagsByMask", // OSF8_ASSIGNFLAGSBYMASK,
- "AlterFlagsByMask", // OSF8_ALTERFLAGSBYMASK,
- "GetFlagsMaskValue", // OSF8_GETFLAGSMASKVALUE,
- "QueryFlagsByMask", // OSF8_QUERYFLAGSBYMASK,
- "OnlySignalSingleFlagOutOfMask", // OSF8_ONLYSIGNALSINGLEFLAGOUTOFMASK,
- "EnumSetEnumeratedFlagValue", // OSF8_ENUMSETENUMERATEDFLAGVALUE,
- "EnumSignalEnumeratedFlagValue", // OSF8_ENUMSIGNALENUMERATEDFLAGVALUE,
- "EnumDropEnumeratedFlagValue", // OSF8_ENUMDROPENUMERATEDFLAGVALUE,
- "EnumToggleEnumeratedFlagValue", // OSF8_ENUMTOGGLEENUMERATEDFLAGVALUE,
- "EnumModifyEnumeratedFlagValue", // OSF8_ENUMMODIFYENUMERATEDFLAGVALUE,
- "EnumSignalFirstEnumeratedFlagValue", // OSF8_ENUMSIGNALFIRSTENUMERATEDFLAGVALUE,
- "EnumSignalLastEnumeratedFlagValue", // OSF8_ENUMSIGNALLASTENUMERATEDFLAGVALUE,
- "EnumGetEnumeratedFlagValue", // OSF8_ENUMGETENUMERATEDFLAGVALUE,
- "EnumFindFirstEnumeratedFlag", // OSF8_ENUMFINDFIRSTENUMERATEDFLAG,
- "EnumAllSignalEnumeratedFlags", // OSF8_ENUMALLSIGNALENUMERATEDFLAGS,
- "EnumAllDropEnumeratedFlags", // OSF8_ENUMALLDROPENUMERATEDFLAGS,
- "EnumAllQueryEnumeratedFlags", // OSF8_ENUMALLQUERYENUMERATEDFLAGS,
- "EnumAnyGetEnumeratedFlagValue", // OSF8_ENUMANYGETENUMERATEDFLAGVALUE,
- "StoreFlagsEnumeratedValue", // OSF8_STOREFLAGSENUMERATEDVALUE,
- "RetrieveFlagsEnumeratedValue", // OSF8_RETRIEVEFLAGSENUMERATEDVALUE,
- };
- static const CEnumUnsortedElementArray<EOUSIMPLEFLAGSFEATURE8, OSF8__MAX, const char *> g_aszSimpleFlags8FeatureTestNames;
- bool TestSimpleFlags8(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OSF8__MAX, g_aszSimpleFlags8FeatureTestNames.GetStoragePointer(), g_afnSimpleFlags8FeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- bool TestFlagsDefines_EnumFlagsMask()
- {
- bool bResult = false;
-
- do
- {
- int64ou iMask;
-
- iMask = OU_FLAGS_ENUMFLAGS_MASK(uint8ou, 1, 1);
- if (iMask - 1 != 0)
- {
- break;
- }
-
- iMask = OU_FLAGS_ENUMFLAGS_MASK(uint8ou, 1, OU_UINT8_BITS);
- if (iMask ^ OU_UINT8_MAX)
- {
- break;
- }
- iMask = OU_FLAGS_ENUMFLAGS_MASK(uint16ou, 1, 1);
- if (iMask - 1 != 0)
- {
- break;
- }
-
- iMask = OU_FLAGS_ENUMFLAGS_MASK(uint16ou, 1, OU_UINT16_BITS);
- if (iMask ^ OU_UINT16_MAX)
- {
- break;
- }
-
- iMask = OU_FLAGS_ENUMFLAGS_MASK(uint32ou, 1, 1);
- if (iMask - 1 != 0)
- {
- break;
- }
-
- iMask = OU_FLAGS_ENUMFLAGS_MASK(uint32ou, 1, OU_UINT32_BITS);
- if (iMask ^ OU_UINT32_MAX)
- {
- break;
- }
-
- iMask = OU_FLAGS_ENUMFLAGS_MASK(uint64ou, 1, 1);
- if (iMask - 1 != 0)
- {
- break;
- }
-
- iMask = OU_FLAGS_ENUMFLAGS_MASK(uint64ou, 1, OU_UINT64_BITS);
- if (iMask ^ OU_UINT64_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestFlagsDefines_EnumFlagsStartValid()
- {
- bool bResult = false;
-
- do
- {
- if (!OU_FLAGS_ENUMFLAGS_START_VALID(uint8ou, 1, OU_UINT8_BITS))
- {
- break;
- }
- /*
- if (OU_FLAGS_ENUMFLAGS_START_VALID(uint8ou, 1, OU_UINT8_BITS + 1))
- {
- break;
- }
- */
- if (!OU_FLAGS_ENUMFLAGS_START_VALID(uint16ou, 1, OU_UINT16_BITS))
- {
- break;
- }
- /*
- if (OU_FLAGS_ENUMFLAGS_START_VALID(uint16ou, 1, OU_UINT16_BITS + 1))
- {
- break;
- }
- */
- if (!OU_FLAGS_ENUMFLAGS_START_VALID(uint32ou, 1, OU_UINT32_BITS))
- {
- break;
- }
- /*
- if (OU_FLAGS_ENUMFLAGS_START_VALID(uint32ou, 1, OU_UINT32_BITS + 1))
- {
- break;
- }
- */
- if (!OU_FLAGS_ENUMFLAGS_START_VALID(uint64ou, 1, OU_UINT64_BITS))
- {
- break;
- }
- /*
- if (OU_FLAGS_ENUMFLAGS_START_VALID(uint64ou, 1, OU_UINT64_BITS + 1))
- {
- break;
- }
- */
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestFlagsDefines_StoreEnumValueInMask()
- {
- bool bResult = false;
-
- do
- {
- if (!OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint8ou, 0, 1) || !OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint8ou, 1, 1))
- {
- break;
- }
- if (!OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint8ou, 0, OU_UINT8_MAX) || !OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint8ou, OU_UINT8_MAX, OU_UINT8_MAX))
- {
- break;
- }
- if (OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint8ou, 1, 2) || OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint8ou, 2, 1))
- {
- break;
- }
- if (OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint8ou, 0, 0) || OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint8ou, 1, 0))
- {
- break;
- }
-
- if (!OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint16ou, 0, 1) || !OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint16ou, 1, 1))
- {
- break;
- }
-
- if (!OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint16ou, 0, OU_UINT16_MAX) || !OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint16ou, OU_UINT16_MAX, OU_UINT16_MAX))
- {
- break;
- }
-
- if (OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint16ou, 1, 2) || OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint16ou, 2, 1))
- {
- break;
- }
-
- if (OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint16ou, 0, 0) || OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint16ou, 1, 0))
- {
- break;
- }
-
- if (!OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint32ou, 0, 1) || !OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint32ou, 1, 1))
- {
- break;
- }
-
- if (!OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint32ou, 0, OU_UINT32_MAX) || !OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint32ou, OU_UINT32_MAX, OU_UINT32_MAX))
- {
- break;
- }
-
- if (OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint32ou, 1, 2) || OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint32ou, 2, 1))
- {
- break;
- }
-
- if (OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint32ou, 0, 0) || OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint32ou, 1, 0))
- {
- break;
- }
-
- if (!OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint64ou, 0, 1) || !OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint64ou, 1, 1))
- {
- break;
- }
-
- if (!OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint64ou, 0, OU_UINT64_MAX) || !OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint64ou, OU_UINT64_MAX, OU_UINT64_MAX))
- {
- break;
- }
-
- if (OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint64ou, 1, 2) || OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint64ou, 2, 1))
- {
- break;
- }
-
- if (OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint64ou, 0, 0) || OU_FLAGS_STOREENUM_VALUE_IN_MASK(uint64ou, 1, 0))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- bool TestFlagsDefines_FlagIsSingle()
- {
- bool bResult = false;
-
- do
- {
- if (!OU_FLAGS_FLAG_IS_SINGLE(uint8ou, 1) || !OU_FLAGS_FLAG_IS_SINGLE(uint8ou, OU_INT8_MIN))
- {
- break;
- }
- if (OU_FLAGS_FLAG_IS_SINGLE(uint8ou, 0) || OU_FLAGS_FLAG_IS_SINGLE(uint8ou, 3) || OU_FLAGS_FLAG_IS_SINGLE(uint8ou, OU_INT8_MIN + 1))
- {
- break;
- }
-
- if (!OU_FLAGS_FLAG_IS_SINGLE(uint16ou, 1) || !OU_FLAGS_FLAG_IS_SINGLE(uint16ou, OU_INT16_MIN))
- {
- break;
- }
-
- if (OU_FLAGS_FLAG_IS_SINGLE(uint16ou, 0) || OU_FLAGS_FLAG_IS_SINGLE(uint16ou, 3) || OU_FLAGS_FLAG_IS_SINGLE(uint16ou, OU_INT16_MIN + 1))
- {
- break;
- }
-
- if (!OU_FLAGS_FLAG_IS_SINGLE(uint32ou, 1) || !OU_FLAGS_FLAG_IS_SINGLE(uint32ou, OU_INT32_MIN))
- {
- break;
- }
-
- if (OU_FLAGS_FLAG_IS_SINGLE(uint32ou, 0) || OU_FLAGS_FLAG_IS_SINGLE(uint32ou, 3) || OU_FLAGS_FLAG_IS_SINGLE(uint32ou, OU_INT32_MIN + 1))
- {
- break;
- }
-
- if (!OU_FLAGS_FLAG_IS_SINGLE(uint64ou, 1) || !OU_FLAGS_FLAG_IS_SINGLE(uint64ou, OU_INT64_MIN))
- {
- break;
- }
-
- if (OU_FLAGS_FLAG_IS_SINGLE(uint64ou, 0) || OU_FLAGS_FLAG_IS_SINGLE(uint64ou, 3) || OU_FLAGS_FLAG_IS_SINGLE(uint64ou, OU_INT64_MIN + 1))
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- enum EOUFLAGSDEFINESFEATURE
- {
- OFF__MIN,
-
- OFF_ENUMFLAGS_MASK = OFF__MIN,
- OFF_ENUMFLAGS_START_VALID,
- OFF_STOREENUM_VALUE_IN_MASK,
- OFF_FLAG_IS_SINGLE,
-
- OFF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUFLAGSDEFINESFEATURE, OFF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestFlagsDefines_EnumFlagsMask, // OFF_ENUMFLAGS_MASK,
- &TestFlagsDefines_EnumFlagsStartValid, // OFF_ENUMFLAGS_START_VALID,
- &TestFlagsDefines_StoreEnumValueInMask, // OFF_STOREENUM_VALUE_IN_MASK,
- &TestFlagsDefines_FlagIsSingle, // OFF_FLAG_IS_SINGLE,
- };
- static const CEnumUnsortedElementArray<EOUFLAGSDEFINESFEATURE, OFF__MAX, CFeatureTestProcedure> g_afnFlagsDefineFeatureTestProcedures;
- template<>const char *const CEnumUnsortedElementArray<EOUFLAGSDEFINESFEATURE, OFF__MAX, const char *>::m_aetElementArray[] =
- {
- "ENUMFLAGS_MASK", // OFF_ENUMFLAGS_MASK = OFF__MIN,
- "ENUMFLAGS_START_VALID", // OFF_ENUMFLAGS_START_VALID,
- "STOREENUM_VALUE_IN_MASK", // OFF_STOREENUM_VALUE_IN_MASK,
- "FLAG_IS_SINGLE", // OFF_FLAG_IS_SINGLE,
- };
- static const CEnumUnsortedElementArray<EOUFLAGSDEFINESFEATURE, OFF__MAX, const char *> g_aszFlagsDefineFeatureTestNames;
- bool TestFlagsDefines(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OFF__MAX, g_aszFlagsDefineFeatureTestNames.GetStoragePointer(), g_afnFlagsDefineFeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- enum EENUMARRAYTESTENUM
- {
- ATE__MIN,
- ATE_FIRSTELEMENT = ATE__MIN,
- ATE_SECONDELEMENT,
- ATE_THIRDELEMENT,
- ATE__MAX,
- };
- template<>
- const int CEnumUnsortedElementArray<EENUMARRAYTESTENUM, ATE__MAX, int>::m_aetElementArray[] =
- {
- 1, // ATE_FIRSTELEMENT,
- 3, // ATE_SECONDELEMENT,
- 2, // ATE_THIRDELEMENT,
- };
- static const CEnumUnsortedElementArray<EENUMARRAYTESTENUM, ATE__MAX, int> g_ai_IntUnsortedArray;
- template<>
- const int CEnumSortedElementArray<EENUMARRAYTESTENUM, ATE__MAX, int>::m_aetElementArray[] =
- {
- 1, // ATE_FIRSTELEMENT,
- 2, // ATE_SECONDELEMENT,
- 3, // ATE_THIRDELEMENT,
- };
- static const CEnumSortedElementArray<EENUMARRAYTESTENUM, ATE__MAX, int> g_ai_IntSortedArray;
- struct ConstCharPtrEq
- {
- bool operator ()(const char *szLeftValue, const char *szRightValue) const
- {
- return strcmp(szLeftValue, szRightValue) == 0;
- }
- };
- struct ConstCharPtrLess
- {
- bool operator ()(const char *szLeftValue, const char *szRightValue) const
- {
- return strcmp(szLeftValue, szRightValue) < 0;
- }
- };
- template<>
- const char *const CEnumUnsortedElementArray<EENUMARRAYTESTENUM, ATE__MAX, const char *, 0, ConstCharPtrEq>::m_aetElementArray[] =
- {
- "first",
- "third",
- "second",
- };
- static const CEnumUnsortedElementArray<EENUMARRAYTESTENUM, ATE__MAX, const char *, 0, ConstCharPtrEq> g_aszStringUnsortedArray;
- template<>
- const char *const CEnumSortedElementArray<EENUMARRAYTESTENUM, ATE__MAX, const char *, 0, ConstCharPtrLess>::m_aetElementArray[] =
- {
- "first",
- "second",
- "third",
- };
- static const CEnumSortedElementArray<EENUMARRAYTESTENUM, ATE__MAX, const char *, 0, ConstCharPtrLess> g_aszStringSortedArray;
- bool TestEnumArrays_UnsortedArray()
- {
- EENUMARRAYTESTENUM teEnumCurrent = ATE__MIN;
-
- for (; teEnumCurrent != ATE__MAX; ++teEnumCurrent)
- {
- int iCurrentValue = g_ai_IntUnsortedArray.Encode(teEnumCurrent);
- EENUMARRAYTESTENUM teIntDecodeCheck = g_ai_IntUnsortedArray.Decode(iCurrentValue);
-
- if (!g_ai_IntUnsortedArray.IsValidDecode(teIntDecodeCheck) || teIntDecodeCheck != teEnumCurrent)
- {
- break;
- }
- if (g_ai_IntUnsortedArray.GetStoragePointer()[teEnumCurrent] != iCurrentValue)
- {
- break;
- }
- const char *szCurrentString = g_aszStringUnsortedArray.Encode(teEnumCurrent);
- EENUMARRAYTESTENUM teStringDecodeCheck = g_aszStringUnsortedArray.Decode(szCurrentString);
-
- if (!g_aszStringUnsortedArray.IsValidDecode(teStringDecodeCheck) || teStringDecodeCheck != teEnumCurrent)
- {
- break;
- }
- if (strcmp(g_aszStringUnsortedArray.GetStoragePointer()[teEnumCurrent], szCurrentString) != 0)
- {
- break;
- }
- EENUMARRAYTESTENUM teInvalidDecodeCheck = g_aszStringUnsortedArray.Decode(szCurrentString + 1);
- if (teInvalidDecodeCheck != ATE__MAX || g_aszStringUnsortedArray.IsValidDecode(teInvalidDecodeCheck))
- {
- break;
- }
- }
- bool bResult = teEnumCurrent == ATE__MAX;
- return bResult;
- }
- bool TestEnumArrays_SortedArray()
- {
- EENUMARRAYTESTENUM teEnumCurrent = ATE__MIN;
-
- for (; teEnumCurrent != ATE__MAX; ++teEnumCurrent)
- {
- int iCurrentValue = g_ai_IntSortedArray.Encode(teEnumCurrent);
- EENUMARRAYTESTENUM teIntDecodeCheck = g_ai_IntSortedArray.Decode(iCurrentValue);
-
- if (!g_ai_IntSortedArray.IsValidDecode(teIntDecodeCheck) || teIntDecodeCheck != teEnumCurrent)
- {
- break;
- }
- if (g_ai_IntSortedArray.GetStoragePointer()[teEnumCurrent] != iCurrentValue)
- {
- break;
- }
- const char *szCurrentString = g_aszStringSortedArray.Encode(teEnumCurrent);
- EENUMARRAYTESTENUM teStringDecodeCheck = g_aszStringSortedArray.Decode(szCurrentString);
-
- if (!g_aszStringSortedArray.IsValidDecode(teStringDecodeCheck) || teStringDecodeCheck != teEnumCurrent)
- {
- break;
- }
- if (strcmp(g_aszStringSortedArray.GetStoragePointer()[teEnumCurrent], szCurrentString) != 0)
- {
- break;
- }
- EENUMARRAYTESTENUM teInvalidDecodeCheck = g_aszStringSortedArray.Decode(szCurrentString + 1);
- if (teInvalidDecodeCheck != ATE__MAX || g_aszStringSortedArray.IsValidDecode(teInvalidDecodeCheck))
- {
- break;
- }
- }
- bool bResult = teEnumCurrent == ATE__MAX;
- return bResult;
- }
- enum EOUENUMARRAYSFEATURE
- {
- ORF__MIN,
- ORF_UNSORTEDARRAY = ORF__MIN,
- ORF_SORTEDARRAY,
- ORF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUENUMARRAYSFEATURE, ORF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestEnumArrays_UnsortedArray, // ORF_UNSORTEDARRAY,
- &TestEnumArrays_SortedArray, // ORF_SORTEDARRAY,
- };
- static const CEnumUnsortedElementArray<EOUENUMARRAYSFEATURE, ORF__MAX, CFeatureTestProcedure> g_afnEnumArrayFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUENUMARRAYSFEATURE, ORF__MAX, const char *>::m_aetElementArray[] =
- {
- "Unsorted Array", // ORF_UNSORTEDARRAY,
- "Sorted Array", // ORF_SORTEDARRAY,
- };
- static const CEnumUnsortedElementArray<EOUENUMARRAYSFEATURE, ORF__MAX, const char *> g_aszEnumArrayFeatureTestNames;
- bool TestEnumArrays(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, ORF__MAX, g_aszEnumArrayFeatureTestNames.GetStoragePointer(), g_afnEnumArrayFeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- enum ETESTTEMPLATES8
- {
- TT8_ONE,
- TT8_TWO,
- };
- enum ETESTTEMPLATES16
- {
- TT16_ONE = 1000,
- TT16_TWO,
- };
- enum ETESTTEMPLATES32
- {
- TT32_ONE = 100000,
- TT32_TWO,
- };
- bool TestTemplates_PrefixIncrement()
- {
- bool bResult = false;
- do
- {
- ETESTTEMPLATES8 t8Test = TT8_ONE;
- ETESTTEMPLATES16 t16Test = TT16_ONE;
- ETESTTEMPLATES32 t32Test = TT32_ONE;
- if (++t8Test != TT8_TWO || t8Test != TT8_TWO)
- {
- break;
- }
- ++t8Test = TT8_ONE;
- if (t8Test != TT8_ONE)
- {
- break;
- }
- if (++t16Test != TT16_TWO || t16Test != TT16_TWO)
- {
- break;
- }
- ++t16Test = TT16_ONE;
- if (t16Test != TT16_ONE)
- {
- break;
- }
- if (++t32Test != TT32_TWO || t32Test != TT32_TWO)
- {
- break;
- }
- ++t32Test = TT32_ONE;
- if (t32Test != TT32_ONE)
- {
- break;
- }
- bResult = true;
- }
- while (false);
- return bResult;
- }
- bool TestTemplates_PostfixIncrement()
- {
- bool bResult = false;
- do
- {
- ETESTTEMPLATES8 t8Test = TT8_ONE;
- ETESTTEMPLATES16 t16Test = TT16_ONE;
- ETESTTEMPLATES32 t32Test = TT32_ONE;
- if (t8Test++ != TT8_ONE || t8Test != TT8_TWO)
- {
- break;
- }
- if (t16Test++ != TT16_ONE || t16Test != TT16_TWO)
- {
- break;
- }
- if (t32Test++ != TT32_ONE || t32Test != TT32_TWO)
- {
- break;
- }
- bResult = true;
- }
- while (false);
- return bResult;
- }
- bool TestTemplates_PrefixDecrement()
- {
- bool bResult = false;
- do
- {
- ETESTTEMPLATES8 t8Test = TT8_TWO;
- ETESTTEMPLATES16 t16Test = TT16_TWO;
- ETESTTEMPLATES32 t32Test = TT32_TWO;
- if (--t8Test != TT8_ONE || t8Test != TT8_ONE)
- {
- break;
- }
- --t8Test = TT8_TWO;
- if (t8Test != TT8_TWO)
- {
- break;
- }
- if (--t16Test != TT16_ONE || t16Test != TT16_ONE)
- {
- break;
- }
- --t16Test = TT16_TWO;
- if (t16Test != TT16_TWO)
- {
- break;
- }
- if (--t32Test != TT32_ONE || t32Test != TT32_ONE)
- {
- break;
- }
- --t32Test = TT32_TWO;
- if (t32Test != TT32_TWO)
- {
- break;
- }
- bResult = true;
- }
- while (false);
- return bResult;
- }
- bool TestTemplates_PostfixDecrement()
- {
- bool bResult = false;
- do
- {
- ETESTTEMPLATES8 t8Test = TT8_TWO;
- ETESTTEMPLATES16 t16Test = TT16_TWO;
- ETESTTEMPLATES32 t32Test = TT32_TWO;
- if (t8Test-- != TT8_TWO || t8Test != TT8_ONE)
- {
- break;
- }
- if (t16Test-- != TT16_TWO || t16Test != TT16_ONE)
- {
- break;
- }
- if (t32Test-- != TT32_TWO || t32Test != TT32_ONE)
- {
- break;
- }
- bResult = true;
- }
- while (false);
- return bResult;
- }
- bool TestTemplates_IsEmptySz()
- {
- bool bResult = false;
- do
- {
- const char *szData = "a";
- const char *szEmpty = "";
- const char *szNull = NULL;
- if (IsEmptySz(szData) || !IsEmptySz(szEmpty) || !IsEmptySz(szNull))
- {
- break;
- }
- bResult = true;
- }
- while (false);
- return bResult;
- }
- enum EOUTEMPLATESFEATURE
- {
- OTF__MIN,
- OTF_PREFIXINCREMENT = OTF__MIN,
- OTF_POSTFIXINCREMENT,
- OTF_PREFIXDECREMENT,
- OTF_POSTFIXDECREMENT,
- OTF_ISEMPTYSZ,
- OTF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUTEMPLATESFEATURE, OTF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestTemplates_PrefixIncrement, // OTF_PREFIXINCREMENT,
- &TestTemplates_PostfixIncrement, // OTF_POSTFIXINCREMENT,
- &TestTemplates_PrefixDecrement, // OTF_PREFIXDECREMENT,
- &TestTemplates_PostfixDecrement, // OTF_POSTFIXDECREMENT,
- &TestTemplates_IsEmptySz, // OTF_ISEMPTYSZ,
- };
- static const CEnumUnsortedElementArray<EOUTEMPLATESFEATURE, OTF__MAX, CFeatureTestProcedure> g_afnTemplateFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUTEMPLATESFEATURE, OTF__MAX, const char *>::m_aetElementArray[] =
- {
- "Prefix Increment", // OTF_PREFIXINCREMENT,
- "Postfix Increment", // OTF_POSTFIXINCREMENT,
- "Prefix Decrement", // OTF_PREFIXDECREMENT,
- "Postfix Decrement", // OTF_POSTFIXDECREMENT,
- "IsEmptySz", // OTF_ISEMPTYSZ,
- };
- static const CEnumUnsortedElementArray<EOUTEMPLATESFEATURE, OTF__MAX, const char *> g_aszTemplateFeatureTestNames;
- bool TestTemplates(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OTF__MAX, g_aszTemplateFeatureTestNames.GetStoragePointer(), g_afnTemplateFeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- typedef CTypeSimpleWrapper<int> CTestWrapper;
- bool TestTypeWrappers_Constructors()
- {
- CTestWrapper twEmptyWrapper;
- CTestWrapper twZeroWrapper(0);
- CTestWrapper twCopyWrapper(twZeroWrapper);
- return true;
- }
- bool TestTypeWrappers_Comparison()
- {
- bool bResult = false;
- do
- {
- CTestWrapper twOneWrapper(1);
- CTestWrapper twTwoWrapper(2);
- if (!(twTwoWrapper == twTwoWrapper) || twOneWrapper == twTwoWrapper)
- {
- break;
- }
- if (twTwoWrapper != twTwoWrapper || !(twOneWrapper != twTwoWrapper))
- {
- break;
- }
- if (!(twOneWrapper < twTwoWrapper) || twTwoWrapper < twTwoWrapper || twTwoWrapper < twOneWrapper)
- {
- break;
- }
- if (twOneWrapper > twTwoWrapper || twTwoWrapper > twTwoWrapper || !(twTwoWrapper > twOneWrapper))
- {
- break;
- }
- if (!(twOneWrapper <= twTwoWrapper) || !(twTwoWrapper <= twTwoWrapper) || twTwoWrapper <= twOneWrapper)
- {
- break;
- }
- if (twOneWrapper >= twTwoWrapper || !(twTwoWrapper >= twTwoWrapper) || !(twTwoWrapper >= twOneWrapper))
- {
- break;
- }
- bResult = true;
- }
- while (false);
- return bResult;
- }
- bool TestTypeWrappers_BoolCasts()
- {
- bool bResult = false;
- do
- {
- CTestWrapper twZeroWrapper(0);
- CTestWrapper twOneWrapper(1);
- /* -- cast to bool is commented in definition
- if (twZeroWrapper || !(false || twOneWrapper))
- {
- break;
- }
- */
- if (!(!twZeroWrapper) || !twOneWrapper)
- {
- break;
- }
- bResult = true;
- }
- while (false);
- return bResult;
- }
- bool TestTypeWrappers_Assignment()
- {
- bool bResult = false;
- do
- {
- CTestWrapper twZeroWrapper(0);
- CTestWrapper twOneWrapper(1);
- CTestWrapper twTestWrapper;
- CTestWrapper &twFirstAssignmentReference = (twTestWrapper = (CTestWrapper::value_type)1);
- if (twTestWrapper != twOneWrapper || &twFirstAssignmentReference != &twTestWrapper)
- {
- break;
- }
- CTestWrapper &twSecondAssignmentReference = (twTestWrapper = twZeroWrapper);
- if (twTestWrapper != twZeroWrapper || &twSecondAssignmentReference != &twTestWrapper)
- {
- break;
- }
- bResult = true;
- }
- while (false);
- return bResult;
- }
- bool TestTypeWrappers_DataCast()
- {
- bool bResult = false;
- do
- {
- const CTestWrapper twZeroWrapper(0);
- CTestWrapper twOneWrapper(1);
- const CTestWrapper::value_type &wtZeroValue = (const CTestWrapper::value_type &)twZeroWrapper;
- CTestWrapper::value_type &wtOneValue = (CTestWrapper::value_type &)twOneWrapper;
- if (wtZeroValue != 0 || wtOneValue != 1)
- {
- break;
- }
- wtOneValue = 0;
- if (twOneWrapper != twZeroWrapper)
- {
- break;
- }
- bResult = true;
- }
- while (false);
- return bResult;
- }
- bool TestTypeWrappers_DataComparison()
- {
- bool bResult = false;
- do
- {
- const CTestWrapper twZeroWrapper(0);
- const CTestWrapper twOneWrapper(1);
- const CTestWrapper::value_type &wtZeroValue = twZeroWrapper;
- const CTestWrapper::value_type &wtOneValue = twOneWrapper;
- if (!(twZeroWrapper == wtZeroValue) || (twZeroWrapper == wtOneValue))
- {
- break;
- }
- if (!(wtZeroValue == twZeroWrapper) || (wtOneValue == twZeroWrapper))
- {
- break;
- }
- if ((twZeroWrapper != wtZeroValue) || !(twZeroWrapper != wtOneValue))
- {
- break;
- }
- if ((wtZeroValue != twZeroWrapper) || !(wtOneValue != twZeroWrapper))
- {
- break;
- }
- if ((twZeroWrapper < wtZeroValue) || !(twZeroWrapper < wtOneValue) || (twOneWrapper < wtZeroValue))
- {
- break;
- }
- if ((wtZeroValue < twZeroWrapper) || (wtOneValue < twZeroWrapper) || !(wtZeroValue < twOneWrapper))
- {
- break;
- }
- if ((twZeroWrapper > wtZeroValue) || (twZeroWrapper > wtOneValue) || !(twOneWrapper > wtZeroValue))
- {
- break;
- }
- if ((wtZeroValue > twZeroWrapper) || !(wtOneValue > twZeroWrapper) || (wtZeroValue > twOneWrapper))
- {
- break;
- }
- if (!(twZeroWrapper <= wtZeroValue) || !(twZeroWrapper <= wtOneValue) || (twOneWrapper <= wtZeroValue))
- {
- break;
- }
- if (!(wtZeroValue <= twZeroWrapper) || (wtOneValue <= twZeroWrapper) || !(wtZeroValue <= twOneWrapper))
- {
- break;
- }
- if (!(twZeroWrapper >= wtZeroValue) || (twZeroWrapper >= wtOneValue) || !(twOneWrapper >= wtZeroValue))
- {
- break;
- }
- if (!(wtZeroValue >= twZeroWrapper) || !(wtOneValue >= twZeroWrapper) || (wtZeroValue >= twOneWrapper))
- {
- break;
- }
- bResult = true;
- }
- while (false);
- return bResult;
- }
- enum EOUTYPEWRAPPERFEATURE
- {
- OWF__MIN,
- OWF_CONSTRUCTORS = OWF__MIN,
- OWF_COMPARISON,
- OWF_BOOLCASTS,
- OWF_ASSIGNMENT,
- OWF_DATACAST,
- OWF_DATACOMPARISON,
- OWF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUTYPEWRAPPERFEATURE, OWF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestTypeWrappers_Constructors, // OWF_CONSTRUCTORS,
- &TestTypeWrappers_Comparison, // OWF_COMPARISON,
- &TestTypeWrappers_BoolCasts, // OWF_BOOLCASTS,
- &TestTypeWrappers_Assignment, // OWF_ASSIGNMENT,
- &TestTypeWrappers_DataCast, // OWF_DATACAST,
- &TestTypeWrappers_DataComparison, // OWF_DATACOMPARISON,
- };
- static const CEnumUnsortedElementArray<EOUTYPEWRAPPERFEATURE, OWF__MAX, CFeatureTestProcedure> g_afnTypeWrapperFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUTYPEWRAPPERFEATURE, OWF__MAX, const char *>::m_aetElementArray[] =
- {
- "Constructors", // OWF_CONSTRUCTORS,
- "Comparison Operators", // OWF_COMPARISON,
- "Boolean Casts", // OWF_BOOLCASTS,
- "Assignment Operators", // OWF_ASSIGNMENT,
- "Data Cast", // OWF_DATACAST,
- "Data Comparisons", // OWF_DATACOMPARISON,
- };
- static const CEnumUnsortedElementArray<EOUTYPEWRAPPERFEATURE, OWF__MAX, const char *> g_aszTypeWrapperFeatureTestNames;
- bool TestTypeWrapper(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OWF__MAX, g_aszTypeWrapperFeatureTestNames.GetStoragePointer(), g_afnTypeWrapperFeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- struct CTestCustomizations_Asserts_FailureInfo
- {
- EASSERTIONFAILURESEVERITY m_fsFailureSeverity;
- const char *m_szAssertionExpression;
- const char *m_szAssertionFileName;
- unsigned int m_uiAssertionSourceLine;
- };
- static const CTestCustomizations_Asserts_FailureInfo g_fiAssertInvalidInfo = { AFS__MAX, NULL, NULL, 0 };
- static CTestCustomizations_Asserts_FailureInfo g_fiAssertLastInfo;
- void _OU_CONVENTION_CALLBACK TestCustomizations_Asserts_AssertionFailure(EASSERTIONFAILURESEVERITY fsFailureSeverity,
- const char *szAssertionExpression, const char *szAssertionFileName, unsigned int uiAssertionSourceLine)
- {
- g_fiAssertLastInfo.m_fsFailureSeverity = fsFailureSeverity;
- g_fiAssertLastInfo.m_szAssertionExpression = szAssertionExpression;
- g_fiAssertLastInfo.m_szAssertionFileName = szAssertionFileName;
- g_fiAssertLastInfo.m_uiAssertionSourceLine = uiAssertionSourceLine;
- }
- bool TestCustomizations_Asserts()
- {
- bool bResult = false;
- CAssertionFailedProcedure fnAssertOldHandler = CAssertionCheckCustomization::GetAssertFailureCustomHandler();
- CAssertionCheckCustomization::CustomizeAssertionChecks(&TestCustomizations_Asserts_AssertionFailure);
- do
- {
- #if !defined(NDEBUG)
- // Only callback invocation is checked here.
- // Availability of functionality depending on preprocessor defines
- // is verified in OST_ASSERT subsystem.
- OU_ASSERT(false); // const unsigned int uiAssertToVerifyLines = 14; -- see further in code
- if (g_fiAssertLastInfo.m_fsFailureSeverity != AFS_ASSERT
- || g_fiAssertLastInfo.m_szAssertionExpression == NULL
- || g_fiAssertLastInfo.m_szAssertionFileName == NULL
- || strcmp(g_fiAssertLastInfo.m_szAssertionFileName, __FILE__) != 0
- || g_fiAssertLastInfo.m_uiAssertionSourceLine == 0)
- {
- break;
- }
- CTestCustomizations_Asserts_FailureInfo fiAssertFailureInfoSave = g_fiAssertLastInfo;
- g_fiAssertLastInfo = g_fiAssertInvalidInfo;
- OU_VERIFY(false); const unsigned int uiAssertToVerifyLines = 14;
- if (g_fiAssertLastInfo.m_fsFailureSeverity != AFS_ASSERT
- || g_fiAssertLastInfo.m_szAssertionExpression == NULL
- || strcmp(g_fiAssertLastInfo.m_szAssertionExpression, fiAssertFailureInfoSave.m_szAssertionExpression) != 0
- || g_fiAssertLastInfo.m_szAssertionFileName == NULL
- || strcmp(g_fiAssertLastInfo.m_szAssertionFileName, __FILE__) != 0
- || g_fiAssertLastInfo.m_uiAssertionSourceLine != fiAssertFailureInfoSave.m_uiAssertionSourceLine + uiAssertToVerifyLines)
- {
- break;
- }
- g_fiAssertLastInfo = g_fiAssertInvalidInfo;
- #endif // #if !defined(NDEBUG)
- /* -- can't verify OU_CHECK() as it crashes the application on failure
- OU_CHECK(false);
- if (g_fiAssertLastInfo.m_fsFailureSeverity != AFS_CHECK
- || g_fiAssertLastInfo.m_szAssertionExpression == NULL
- || g_fiAssertLastInfo.m_szAssertionFileName == NULL
- || strcmp(g_fiAssertLastInfo.m_szAssertionFileName, __FILE__) != 0
- || g_fiAssertLastInfo.m_uiAssertionSourceLine == 0)
- {
- break;
- }
- */
- bResult = true;
- }
- while (false);
- CAssertionCheckCustomization::CustomizeAssertionChecks(fnAssertOldHandler);
- return bResult;
- }
- void *const g_pv_MallocResult = (void *)(size_t)0x12345678;
- bool g_bMallocInvocation = false, g_bReallocInvocation = false;
- bool g_bFreeInvocation = false, g_bFreeSuccess = false;
- void *_OU_CONVENTION_CALLBACK TestCustomizations_MemMgr_Alloc(size_t nBlockSize)
- {
- g_bMallocInvocation = true;
- return (void *)((ptrdiff_t)g_pv_MallocResult + nBlockSize);
- }
- void *_OU_CONVENTION_CALLBACK TestCustomizations_MemMgr_Realloc(void *pv_OldBlock, size_t nBlockNewSize)
- {
- g_bReallocInvocation = true;
- return (void *)((ptrdiff_t)pv_OldBlock - nBlockNewSize);
- }
- void _OU_CONVENTION_CALLBACK TestCustomizations_MemMgr_Free(void *pv_OldBlock)
- {
- g_bFreeInvocation = true;
- g_bFreeSuccess = pv_OldBlock == g_pv_MallocResult;
- }
- bool TestCustomizations_MemMgr()
- {
- bool bResult = false;
- CMemoryAllocationProcedure fnAllocationOldProcedure = CMemoryManagerCustomization::GetMemoryAllocationCustomProcedure();
- CMemoryReallocationProcedure fnReallocationOldProcedure = CMemoryManagerCustomization::GetMemoryReallocationCustomProcedure();
- CMemoryDeallocationProcedure fnDeallocationOldProcedure = CMemoryManagerCustomization::GetMemoryDeallocationCustomProcedure();
- CMemoryManagerCustomization::CustomizeMemoryManager(&TestCustomizations_MemMgr_Alloc, &TestCustomizations_MemMgr_Realloc, &TestCustomizations_MemMgr_Free);
- do
- {
- const size_t nBlockSize = 0x1000;
- void *pv_BlockAllocated = AllocateMemoryBlock(nBlockSize);
- if (!g_bMallocInvocation
- || pv_BlockAllocated != (void *)((size_t)g_pv_MallocResult + nBlockSize))
- {
- break;
- }
- void *pv_BlockReallocated = ReallocateMemoryBlock(pv_BlockAllocated, 2 * nBlockSize);
- if (!g_bReallocInvocation
- || pv_BlockReallocated != (void *)((size_t)g_pv_MallocResult - nBlockSize))
- {
- break;
- }
- FreeMemoryBlock(g_pv_MallocResult);
- if (!g_bFreeInvocation || !g_bFreeSuccess)
- {
- break;
- }
- bResult = true;
- }
- while (false);
- CMemoryManagerCustomization::CustomizeMemoryManager(fnAllocationOldProcedure, fnReallocationOldProcedure, fnDeallocationOldProcedure);
- return bResult;
- }
- enum EOUCUSTOMIZATIONFEATURE
- {
- OCF__MIN,
-
- OCF_ASSERTS = OCF__MIN,
- OCF_MEMMGR,
-
- OCF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUCUSTOMIZATIONFEATURE, OCF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestCustomizations_Asserts, // OCF_ASSERTS,
- &TestCustomizations_MemMgr, // OCF_MEMMGR,
- };
- static const CEnumUnsortedElementArray<EOUCUSTOMIZATIONFEATURE, OCF__MAX, CFeatureTestProcedure> g_afnCustomizationFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUCUSTOMIZATIONFEATURE, OCF__MAX, const char *>::m_aetElementArray[] =
- {
- "Asserts", // OCF_ASSERTS,
- "Memory Manager", // OCF_MEMMGR,
- };
- static const CEnumUnsortedElementArray<EOUCUSTOMIZATIONFEATURE, OCF__MAX, const char *> g_aszCustomizationFeatureTestNames;
- bool TestCustomization(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OCF__MAX, g_aszCustomizationFeatureTestNames.GetStoragePointer(), g_afnCustomizationFeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- static const size_t g_nTestMallocBlockInitialSize = 1001;
- static const size_t g_nTestMallocBlockNextSize = 65501;
- static const uint8ou g_uiTestMallocToken = 0xAA;
- static void *g_pv_MemoryBlock = NULL;
- bool TestMallocs_Allocate()
- {
- bool bResult = false;
- do
- {
- g_pv_MemoryBlock = AllocateMemoryBlock(g_nTestMallocBlockInitialSize);
- if (g_pv_MemoryBlock == NULL || OU_ALIGNED_SIZE((size_t)g_pv_MemoryBlock, _OU_MEMORY_REQUIRED_ALIGNMENT) != (size_t)g_pv_MemoryBlock)
- {
- break;
- }
- *((uint8ou *)g_pv_MemoryBlock + g_nTestMallocBlockInitialSize - 1) = g_uiTestMallocToken;
-
- bResult = true;
- }
- while (false);
- return bResult;
- }
- bool TestMallocs_Reallocate()
- {
- OU_ASSERT(g_nTestMallocBlockNextSize > g_nTestMallocBlockInitialSize);
- bool bResult = false;
- do
- {
- void *pv_OldMemoryBlock = g_pv_MemoryBlock;
- g_pv_MemoryBlock = ReallocateMemoryBlock(pv_OldMemoryBlock, g_nTestMallocBlockNextSize);
- if (g_pv_MemoryBlock == NULL || OU_ALIGNED_SIZE((size_t)g_pv_MemoryBlock, _OU_MEMORY_REQUIRED_ALIGNMENT) != (size_t)g_pv_MemoryBlock)
- {
- break;
- }
- if (*((uint8ou *)g_pv_MemoryBlock + g_nTestMallocBlockInitialSize - 1) != g_uiTestMallocToken)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
- return bResult;
- }
- bool TestMallocs_Deallocate()
- {
- FreeMemoryBlock(g_pv_MemoryBlock);
- FreeMemoryBlock(NULL); // Free must survive NULL-pointer
- return true;
- }
- enum EOUMALLOCFEATURE
- {
- OLF__MIN,
-
- OLF_ALLOCATE = OLF__MIN,
- OLF_REALLOCATE,
- OLF_DEALLOCATE,
-
- OLF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUMALLOCFEATURE, OLF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestMallocs_Allocate, // OLF_ALLOCATE,
- &TestMallocs_Reallocate, // OLF_REALLOCATE,
- &TestMallocs_Deallocate, // OLF_DEALLOCATE,
- };
- static const CEnumUnsortedElementArray<EOUMALLOCFEATURE, OLF__MAX, CFeatureTestProcedure> g_afnMallocFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUMALLOCFEATURE, OLF__MAX, const char *>::m_aetElementArray[] =
- {
- "AllocateMemoryBlock", // OLF_ALLOCATE,
- "ReallocateMemoryBlock", // OLF_REALLOCATE,
- "FreeMemoryBlock", // OLF_DEALLOCATE,
- };
- static const CEnumUnsortedElementArray<EOUMALLOCFEATURE, OLF__MAX, const char *> g_aszMallocFeatureTestNames;
- bool TestMalloc(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OLF__MAX, g_aszMallocFeatureTestNames.GetStoragePointer(), g_afnMallocFeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- bool TestAsserts_FalseFunction(bool &bVarInvocation)
- {
- bool bResult = true;
- bVarInvocation = !bVarInvocation;
- bool *pv_Pointer = &bResult;
- if (pv_Pointer)
- {
- bResult = false;
- }
- return bResult;
- }
- bool TestAsserts_TrueFunction(bool &bVarInvocation)
- {
- bool bResult = false;
- bVarInvocation = !bVarInvocation;
-
- bool *pv_Pointer = &bResult;
- if (pv_Pointer)
- {
- bResult = true;
- }
-
- return bResult;
- }
- bool TestAsserts_Assert()
- {
- bool bNDebugInvocation = false, bOrdinaryInvocation = false;
- #if defined(NDEBUG)
-
- OU_ASSERT(TestAsserts_FalseFunction(bNDebugInvocation));
- bOrdinaryInvocation = true;
- #endif // #if defined(NDEBUG)
-
- OU_ASSERT(TestAsserts_TrueFunction(bOrdinaryInvocation));
- return !bNDebugInvocation && bOrdinaryInvocation;
- }
- bool TestAsserts_Verify()
- {
- bool bNDebugInvocation = false, bOrdinaryInvocation = false;
-
- #if defined(NDEBUG)
-
- OU_VERIFY(TestAsserts_FalseFunction(bNDebugInvocation));
-
- #else // #if !defined(NDEBUG)
- bNDebugInvocation = true;
- #endif // #if !defined(NDEBUG)
-
- OU_VERIFY(TestAsserts_TrueFunction(bOrdinaryInvocation));
-
- return bNDebugInvocation && bOrdinaryInvocation;
- }
- bool TestAsserts_Check()
- {
- bool bOrdinaryInvocation = false;
-
- OU_CHECK(TestAsserts_TrueFunction(bOrdinaryInvocation));
-
- return bOrdinaryInvocation;
- }
- enum EOUASSERTFEATURE
- {
- OEF__MIN,
-
- OEF_ASSERT = OEF__MIN,
- OEF_VERIFY,
- OEF_CHECK,
-
- OEF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUASSERTFEATURE, OEF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestAsserts_Assert, // OEF_ASSERT,
- &TestAsserts_Verify, // OEF_VERIFY,
- &TestAsserts_Check, // OEF_CHECK,
-
- };
- static const CEnumUnsortedElementArray<EOUASSERTFEATURE, OEF__MAX, CFeatureTestProcedure> g_afnAssertFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUASSERTFEATURE, OEF__MAX, const char *>::m_aetElementArray[] =
- {
- "OU_ASSERT", // OEF_ASSERT,
- "OU_VERIFY", // OEF_VERIFY,
- "OU_CHECK", // OEF_CHECK,
- };
- static const CEnumUnsortedElementArray<EOUASSERTFEATURE, OEF__MAX, const char *> g_aszAssertFeatureTestNames;
- bool TestAssert(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OEF__MAX, g_aszAssertFeatureTestNames.GetStoragePointer(), g_afnAssertFeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- struct CTestIntTypes_int8
- {
- int8ou m_iPad;
- int8ou m_iValue;
- };
- bool TestIntTypes_Int8()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(int8ou) != 1 || offsetof(CTestIntTypes_int8, m_iValue) != 1)
- {
- break;
- }
- if (OU_INT8_BITS != sizeof(int8ou) * OU_BITS_IN_BYTE )
- {
- break;
- }
- if ((int8ou)OU_INT8_MIN == 0 || (int8ou)(OU_INT8_MIN << 1) != 0)
- {
- break;
- }
- if (~OU_INT8_MIN != OU_INT8_MAX || ~OU_INT8_MAX != OU_INT8_MIN)
- {
- break;
- }
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- struct CTestIntTypes_uint8
- {
- int8ou m_iPad;
- uint8ou m_iValue;
- };
- bool TestIntTypes_UInt8()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(uint8ou) != 1 || offsetof(CTestIntTypes_uint8, m_iValue) != 1)
- {
- break;
- }
- if (OU_UINT8_BITS != sizeof(uint8ou) * OU_BITS_IN_BYTE)
- {
- break;
- }
-
- if (OU_UINT8_MIN != 0)
- {
- break;
- }
- if (!(OU_UINT8_MAX & (uint8ou)1) || (OU_UINT8_MAX >> 1) != (uint8ou)OU_INT8_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- struct CTestIntTypes_int16
- {
- int8ou m_iPad;
- int16ou m_iValue;
- };
- bool TestIntTypes_Int16()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(int16ou) != 2 || offsetof(CTestIntTypes_int16, m_iValue) != 2)
- {
- break;
- }
-
- if (OU_INT16_BITS != sizeof(int16ou) * OU_BITS_IN_BYTE )
- {
- break;
- }
-
- if ((int16ou)OU_INT16_MIN == 0 || (int16ou)(OU_INT16_MIN << 1) != 0)
- {
- break;
- }
-
- if (~OU_INT16_MIN != OU_INT16_MAX || ~OU_INT16_MAX != OU_INT16_MIN)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- struct CTestIntTypes_uint16
- {
- int8ou m_iPad;
- uint16ou m_iValue;
- };
- bool TestIntTypes_UInt16()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(uint16ou) != 2 || offsetof(CTestIntTypes_uint16, m_iValue) != 2)
- {
- break;
- }
-
- if (OU_UINT16_BITS != sizeof(uint16ou) * OU_BITS_IN_BYTE)
- {
- break;
- }
-
- if (OU_UINT16_MIN != 0)
- {
- break;
- }
-
- if (!(OU_UINT16_MAX & (uint16ou)1) || (OU_UINT16_MAX >> 1) != (uint16ou)OU_INT16_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- struct CTestIntTypes_int32
- {
- int8ou m_iPad;
- int32ou m_iValue;
- };
- bool TestIntTypes_Int32()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(int32ou) != 4 || offsetof(CTestIntTypes_int32, m_iValue) != 4)
- {
- break;
- }
-
- if (OU_INT32_BITS != sizeof(int32ou) * OU_BITS_IN_BYTE )
- {
- break;
- }
-
- if ((int32ou)OU_INT32_MIN == 0 || (int32ou)(OU_INT32_MIN << 1) != 0)
- {
- break;
- }
-
- if (~OU_INT32_MIN != OU_INT32_MAX || ~OU_INT32_MAX != OU_INT32_MIN)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- struct CTestIntTypes_uint32
- {
- int8ou m_iPad;
- uint32ou m_iValue;
- };
- bool TestIntTypes_UInt32()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(uint32ou) != 4 || offsetof(CTestIntTypes_uint32, m_iValue) != 4)
- {
- break;
- }
-
- if (OU_UINT32_BITS != sizeof(uint32ou) * OU_BITS_IN_BYTE)
- {
- break;
- }
-
- if (OU_UINT32_MIN != 0)
- {
- break;
- }
-
- if (!(OU_UINT32_MAX & (uint32ou)1) || (OU_UINT32_MAX >> 1) != (uint32ou)OU_INT32_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- struct CTestIntTypes_int64
- {
- int8ou m_iPad;
- int64ou m_iValue;
- };
- bool TestIntTypes_Int64()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(int64ou) != 8)
- {
- break;
- }
-
- #if _OU_TARGET_ARCH == _OU_TARGET_ARCH_X86 && _OU_TARGET_OS != _OU_TARGET_OS_MAC
-
- if (offsetof(CTestIntTypes_int64, m_iValue) != 8)
- {
- break;
- }
- #endif
- if (OU_INT64_BITS != sizeof(int64ou) * OU_BITS_IN_BYTE )
- {
- break;
- }
-
- if ((int64ou)OU_INT64_MIN == 0 || (int64ou)(OU_INT64_MIN << 1) != 0)
- {
- break;
- }
-
- if (~OU_INT64_MIN != OU_INT64_MAX || ~OU_INT64_MAX != OU_INT64_MIN)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- struct CTestIntTypes_uint64
- {
- int8ou m_iPad;
- uint64ou m_iValue;
- };
- bool TestIntTypes_UInt64()
- {
- bool bResult = false;
-
- do
- {
- if (sizeof(uint64ou) != 8)
- {
- break;
- }
-
- #if _OU_TARGET_ARCH == _OU_TARGET_ARCH_X86 && _OU_TARGET_OS != _OU_TARGET_OS_MAC
-
- if (offsetof(CTestIntTypes_uint64, m_iValue) != 8)
- {
- break;
- }
- #endif
- if (OU_UINT64_BITS != sizeof(uint64ou) * OU_BITS_IN_BYTE)
- {
- break;
- }
-
- if (OU_UINT64_MIN != 0)
- {
- break;
- }
-
- if (!(OU_UINT64_MAX & (uint64ou)1) || (OU_UINT64_MAX >> 1) != (uint64ou)OU_INT64_MAX)
- {
- break;
- }
-
- bResult = true;
- }
- while (false);
-
- return bResult;
- }
- enum EOUINTTYPEFEATURE
- {
- OIF__MIN,
-
- OIF_INT8 = OIF__MIN,
- OIF_UINT8,
- OIF_INT16,
- OIF_UINT16,
- OIF_INT32,
- OIF_UINT32,
- OIF_INT64,
- OIF_UINT64,
-
- OIF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUINTTYPEFEATURE, OIF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestIntTypes_Int8, // OIF_INT8,
- &TestIntTypes_UInt8, // OIF_UINT8,
- &TestIntTypes_Int16, // OIF_INT16,
- &TestIntTypes_UInt16, // OIF_UINT16,
- &TestIntTypes_Int32, // OIF_INT32,
- &TestIntTypes_UInt32, // OIF_UINT32,
- &TestIntTypes_Int64, // OIF_INT64,
- &TestIntTypes_UInt64, // OIF_UINT64,
- };
- static const CEnumUnsortedElementArray<EOUINTTYPEFEATURE, OIF__MAX, CFeatureTestProcedure> g_afnIntTypeFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUINTTYPEFEATURE, OIF__MAX, const char *>::m_aetElementArray[] =
- {
- "int8ou", // OIF_INT8,
- "uint8ou", // OIF_UINT8,
- "int16ou", // OIF_INT16,
- "uint16ou", // OIF_UINT16,
- "int32ou", // OIF_INT32,
- "uint32ou", // OIF_UINT32,
- "int64ou", // OIF_INT64,
- "uint64ou", // OIF_UINT64,
- };
- static const CEnumUnsortedElementArray<EOUINTTYPEFEATURE, OIF__MAX, const char *> g_aszIntTypeFeatureTestNames;
- bool TestIntTypes(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OIF__MAX, g_aszIntTypeFeatureTestNames.GetStoragePointer(), g_afnIntTypeFeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- struct CTestMacros_OffsetStruct
- {
- int8ou m_i8a;
- int16ou m_i16a;
- int32ou m_i32a;
- int64ou m_i64;
- int32ou m_i32b;
- int16ou m_i16b;
- int8ou m_i8b;
- };
- bool TestMacros_OffsetOf()
- {
- size_t sOffset_i8a = offsetof(CTestMacros_OffsetStruct, m_i8a);
- size_t sOffset_i16a = offsetof(CTestMacros_OffsetStruct, m_i16a);
- size_t sOffset_i32a = offsetof(CTestMacros_OffsetStruct, m_i32a);
- size_t sOffset_i64 = offsetof(CTestMacros_OffsetStruct, m_i64);
- size_t sOffset_i32b = offsetof(CTestMacros_OffsetStruct, m_i32b);
- size_t sOffset_i16b = offsetof(CTestMacros_OffsetStruct, m_i16b);
- size_t sOffset_i8b = offsetof(CTestMacros_OffsetStruct, m_i8b);
- size_t sStructSize = sizeof(CTestMacros_OffsetStruct);
- return true
- && sOffset_i8a == 0
- && sOffset_i16a == 2
- && sOffset_i32a == 4
- && sOffset_i64 == 8
- && sOffset_i32b == 16
- && sOffset_i16b == 20
- && sOffset_i8b == 22
- && sStructSize == 24;
- }
- bool TestMacros_AlignedSize()
- {
- return true
- && OU_ALIGNED_SIZE(0, sizeof(int8ou)) == 0
- && OU_ALIGNED_SIZE(0, sizeof(int16ou)) == 0
- && OU_ALIGNED_SIZE(0, sizeof(int32ou)) == 0
- && OU_ALIGNED_SIZE(0, sizeof(int64ou)) == 0
- && OU_ALIGNED_SIZE(sizeof(int8ou), sizeof(int8ou)) == sizeof(int8ou)
- && OU_ALIGNED_SIZE(sizeof(int8ou), sizeof(int16ou)) == sizeof(int16ou)
- && OU_ALIGNED_SIZE(sizeof(int8ou), sizeof(int32ou)) == sizeof(int32ou)
- && OU_ALIGNED_SIZE(sizeof(int8ou), sizeof(int64ou)) == sizeof(int64ou)
- && OU_ALIGNED_SIZE(sizeof(int16ou), sizeof(int8ou)) == sizeof(int16ou)
- && OU_ALIGNED_SIZE(sizeof(int16ou), sizeof(int16ou)) == sizeof(int16ou)
- && OU_ALIGNED_SIZE(sizeof(int16ou), sizeof(int32ou)) == sizeof(int32ou)
- && OU_ALIGNED_SIZE(sizeof(int16ou), sizeof(int64ou)) == sizeof(int64ou)
- && OU_ALIGNED_SIZE(sizeof(int32ou), sizeof(int8ou)) == sizeof(int32ou)
- && OU_ALIGNED_SIZE(sizeof(int32ou), sizeof(int16ou)) == sizeof(int32ou)
- && OU_ALIGNED_SIZE(sizeof(int32ou), sizeof(int32ou)) == sizeof(int32ou)
- && OU_ALIGNED_SIZE(sizeof(int32ou), sizeof(int64ou)) == sizeof(int64ou)
- && OU_ALIGNED_SIZE(sizeof(int64ou), sizeof(int8ou)) == sizeof(int64ou)
- && OU_ALIGNED_SIZE(sizeof(int64ou), sizeof(int16ou)) == sizeof(int64ou)
- && OU_ALIGNED_SIZE(sizeof(int64ou), sizeof(int32ou)) == sizeof(int64ou)
- && OU_ALIGNED_SIZE(sizeof(int64ou), sizeof(int64ou)) == sizeof(int64ou);
- }
- bool TestMacros_ArraySize()
- {
- static int m_ai_Array1[1];
- static int m_aai_Array11[1][1];
- static int m_ai_Array2[2];
- static int m_aai_Array21[2][1];
- static int m_aai_Array12[1][2];
- return true
- && OU_ARRAY_SIZE(m_ai_Array1) == 1
- && OU_ARRAY_SIZE(m_aai_Array11[0]) == 1
- && OU_ARRAY_SIZE(m_aai_Array11) == 1
- && OU_ARRAY_SIZE(m_ai_Array2) == 2
- && OU_ARRAY_SIZE(m_aai_Array21[0]) == 1
- && OU_ARRAY_SIZE(m_aai_Array21) == 2
- && OU_ARRAY_SIZE(m_aai_Array12[0]) == 2
- && OU_ARRAY_SIZE(m_aai_Array12) == 1;
- }
- bool TestMacros_InIntRange()
- {
- char iZero = 0;
- char iOne = 1;
- char iMinusOne = -1;
- unsigned int uiTen = 10;
- unsigned int uiNotZero = ~0U;
- return true
- && !OU_IN_INT_RANGE(iZero, 0, 0)
- && !OU_IN_INT_RANGE(iOne, 0, 0)
- && !OU_IN_INT_RANGE(iMinusOne, 0, 0)
- && !OU_IN_INT_RANGE(uiTen, 0, 0)
- && !OU_IN_INT_RANGE(uiNotZero, 0, 0)
- && OU_IN_INT_RANGE(iZero, 0, 1)
- && !OU_IN_INT_RANGE(iOne, 0, 1)
- && !OU_IN_INT_RANGE(iMinusOne, 0, 1)
- && !OU_IN_INT_RANGE(uiTen, 0, 1)
- && !OU_IN_INT_RANGE(uiNotZero, 0, 1)
- && !OU_IN_INT_RANGE(iZero, 1, 2)
- && OU_IN_INT_RANGE(iOne, 1, 2)
- && !OU_IN_INT_RANGE(iMinusOne, 1, 2)
- && !OU_IN_INT_RANGE(uiTen, 1, 2)
- && !OU_IN_INT_RANGE(uiNotZero, 1, 2)
- && OU_IN_INT_RANGE(iZero, -1, 1)
- && !OU_IN_INT_RANGE(iOne, -1, 1)
- && OU_IN_INT_RANGE(iMinusOne, -1, 1)
- && !OU_IN_INT_RANGE(uiTen, -1, 1)
- && OU_IN_INT_RANGE(uiNotZero, -1, 1)
- && !OU_IN_INT_RANGE(iZero, 1, -1)
- && OU_IN_INT_RANGE(iOne, 1, -1)
- && !OU_IN_INT_RANGE(iMinusOne, 1, -1)
- && OU_IN_INT_RANGE(uiTen, 1, -1)
- && !OU_IN_INT_RANGE(uiNotZero, 1, -1);
- }
- bool TestMacros_InI64Range()
- {
- char iZero = 0;
- char iOne = 1;
- char iMinusOne = -1;
- unsigned int uiTen = 10;
- unsigned int uiNotZero = ~0U;
-
- return true
- && !OU_IN_I64_RANGE(iZero, 0, 0)
- && !OU_IN_I64_RANGE(iOne, 0, 0)
- && !OU_IN_I64_RANGE(iMinusOne, 0, 0)
- && !OU_IN_I64_RANGE(uiTen, 0, 0)
- && !OU_IN_I64_RANGE(uiNotZero, 0, 0)
-
- && OU_IN_I64_RANGE(iZero, 0, 1)
- && !OU_IN_I64_RANGE(iOne, 0, 1)
- && !OU_IN_I64_RANGE(iMinusOne, 0, 1)
- && !OU_IN_I64_RANGE(uiTen, 0, 1)
- && !OU_IN_I64_RANGE(uiNotZero, 0, 1)
-
- && !OU_IN_I64_RANGE(iZero, 1, 2)
- && OU_IN_I64_RANGE(iOne, 1, 2)
- && !OU_IN_I64_RANGE(iMinusOne, 1, 2)
- && !OU_IN_I64_RANGE(uiTen, 1, 2)
- && !OU_IN_I64_RANGE(uiNotZero, 1, 2)
-
- && OU_IN_I64_RANGE(iZero, -1, 1)
- && !OU_IN_I64_RANGE(iOne, -1, 1)
- && OU_IN_I64_RANGE(iMinusOne, -1, 1)
- && !OU_IN_I64_RANGE(uiTen, -1, 1)
- && !OU_IN_I64_RANGE(uiNotZero, -1, 1)
-
- && !OU_IN_I64_RANGE(iZero, 1, -1)
- && OU_IN_I64_RANGE(iOne, 1, -1)
- && !OU_IN_I64_RANGE(iMinusOne, 1, -1)
- && OU_IN_I64_RANGE(uiTen, 1, -1)
- && OU_IN_I64_RANGE(uiNotZero, 1, -1);
- }
- bool TestMacros_InSizetRange()
- {
- char iZero = 0;
- char iOne = 1;
- char iMinusOne = -1;
- unsigned int uiTen = 10;
- unsigned int uiNotZero = ~0U;
-
- return true
- && !OU_IN_SIZET_RANGE(iZero, 0, 0)
- && !OU_IN_SIZET_RANGE(iOne, 0, 0)
- && !OU_IN_SIZET_RANGE(iMinusOne, 0, 0)
- && !OU_IN_SIZET_RANGE(uiTen, 0, 0)
- && !OU_IN_SIZET_RANGE(uiNotZero, 0, 0)
-
- && OU_IN_SIZET_RANGE(iZero, 0, 1)
- && !OU_IN_SIZET_RANGE(iOne, 0, 1)
- && !OU_IN_SIZET_RANGE(iMinusOne, 0, 1)
- && !OU_IN_SIZET_RANGE(uiTen, 0, 1)
- && !OU_IN_SIZET_RANGE(uiNotZero, 0, 1)
-
- && !OU_IN_SIZET_RANGE(iZero, 1, 2)
- && OU_IN_SIZET_RANGE(iOne, 1, 2)
- && !OU_IN_SIZET_RANGE(iMinusOne, 1, 2)
- && !OU_IN_SIZET_RANGE(uiTen, 1, 2)
- && !OU_IN_SIZET_RANGE(uiNotZero, 1, 2)
-
- && OU_IN_SIZET_RANGE(iZero, -1, 1)
- && !OU_IN_SIZET_RANGE(iOne, -1, 1)
- && OU_IN_SIZET_RANGE(iMinusOne, -1, 1)
- && !OU_IN_SIZET_RANGE(uiTen, -1, 1)
- && OU_IN_SIZET_RANGE(uiNotZero, -1, 1) == (sizeof(size_t) == sizeof(unsigned int))
-
- && !OU_IN_SIZET_RANGE(iZero, 1, -1)
- && OU_IN_SIZET_RANGE(iOne, 1, -1)
- && !OU_IN_SIZET_RANGE(iMinusOne, 1, -1)
- && OU_IN_SIZET_RANGE(uiTen, 1, -1)
- && OU_IN_SIZET_RANGE(uiNotZero, 1, -1) != (sizeof(size_t) == sizeof(unsigned int));
- }
- enum EOUMACROFEATURE
- {
- OMF__MIN,
- OMF_OFFSETOF = OMF__MIN,
- OMF_ALIGNEDSIZE,
- OMF_ARRAYSIZE,
- OMF_ININTRANGE,
- OMF_INI64RANGE,
- OMF_INSIZETRANGE,
- OMF__MAX,
- };
- template<>
- CFeatureTestProcedure const CEnumUnsortedElementArray<EOUMACROFEATURE, OMF__MAX, CFeatureTestProcedure>::m_aetElementArray[] =
- {
- &TestMacros_OffsetOf, // OMF_OFFSETOF,
- &TestMacros_AlignedSize, // OMF_ALIGNEDSIZE,
- &TestMacros_ArraySize, // OMF_ARRAYSIZE,
- &TestMacros_InIntRange, // OMF_ININTRANGE,
- &TestMacros_InI64Range, // OMF_INI64RANGE,
- &TestMacros_InSizetRange, // OMF_INSIZETRANGE,
- };
- static const CEnumUnsortedElementArray<EOUMACROFEATURE, OMF__MAX, CFeatureTestProcedure> g_afnMacroFeatureTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUMACROFEATURE, OMF__MAX, const char *>::m_aetElementArray[] =
- {
- "offsetof", // OMF_OFFSETOF,
- "OU_ALIGNED_SIZE", // OMF_ALIGNEDSIZE,
- "OU_ARRAY_SIZE", // OMF_ARRAYSIZE,
- "OU_IN_INT_RANGE", // OMF_ININTRANGE,
- "OU_IN_I64_RANGE", // OMF_INI64RANGE,
- "OU_IN_SIZET_RANGE", // OMF_INSIZETRANGE,
- };
- static const CEnumUnsortedElementArray<EOUMACROFEATURE, OMF__MAX, const char *> g_aszMacroFeatureTestNames;
- bool TestMacros(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- return TestSubsystem(nOutSuccessCount, nOutTestCount, OMF__MAX, g_aszMacroFeatureTestNames.GetStoragePointer(), g_afnMacroFeatureTestProcedures.GetStoragePointer());
- }
- //////////////////////////////////////////////////////////////////////////
- // Verifies that target order is not changed
- template<>
- int const CEnumSortedElementArray<int, _OU_TARGET_OS__MAX - 1, int, 100>::m_aetElementArray[] =
- {
- _OU_TARGET_OS_GENUNIX, // _OU_TARGET_OS_GENUNIX
- _OU_TARGET_OS_WINDOWS, // _OU_TARGET_OS_WINDOWS
- _OU_TARGET_OS_QNX, // _OU_TARGET_OS_QNX
- _OU_TARGET_OS_MAC, // _OU_TARGET_OS_MAC
- _OU_TARGET_OS_AIX, // _OU_TARGET_OS_AIX
- _OU_TARGET_OS_SUNOS, // _OU_TARGET_OS_SUNOS
- _OU_TARGET_OS_IOS, // _OU_TARGET_OS_IOS
- };
- static const CEnumSortedElementArray<int, _OU_TARGET_OS__MAX - 1, int, 100> g_ai_TargetOrderCheck;
- template<>
- const char *const CEnumUnsortedElementArray<int, _OU_TARGET_OS__MAX - 1, const char *, 100>::m_aetElementArray[] =
- {
- "GENERIC UNIX", // _OU_TARGET_OS_GENUNIX
- "WINDOWS", // _OU_TARGET_OS_WINDOWS
- "QNX", // _OU_TARGET_OS_QNX
- "MAC", // _OU_TARGET_OS_MAC
- "AIX", // _OU_TARGET_OS_AIX
- "SunOS", // _OU_TARGET_OS_SUNOS
- "iOS", // _OU_TARGET_OS_IOS
- };
- static const CEnumUnsortedElementArray<int, _OU_TARGET_OS__MAX - 1, const char *, 100> g_aszOSNames;
- // Verifies that bits order is not changed
- template<>
- int const CEnumSortedElementArray<int, _OU_TARGET_BITS__MAX - 1, int, 101>::m_aetElementArray[] =
- {
- _OU_TARGET_BITS_32, // _OU_TARGET_BITS_32
- _OU_TARGET_BITS_64, // _OU_TARGET_BITS_64
- };
- static const CEnumSortedElementArray<int, _OU_TARGET_BITS__MAX - 1, int, 101> g_ai_BitsOrderCheck;
- template<>
- const char *const CEnumUnsortedElementArray<int, _OU_TARGET_BITS__MAX - 1, const char *, 101>::m_aetElementArray[] =
- {
- "32", // _OU_TARGET_BITS_32
- "64", // _OU_TARGET_BITS_64
- };
- static const CEnumUnsortedElementArray<int, _OU_TARGET_BITS__MAX - 1, const char *, 101> g_aszBitsNames;
- // Verifies that architectures order is not changed
- template<>
- int const CEnumSortedElementArray<int, _OU_TARGET_ARCH__MAX - 1, int, 102>::m_aetElementArray[] =
- {
- _OU_TARGET_ARCH_OTHER, // _OU_TARGET_ARCH_OTHER
- _OU_TARGET_ARCH_X86, // _OU_TARGET_ARCH_X86
- _OU_TARGET_ARCH_IA64, // _OU_TARGET_ARCH_IA64
- _OU_TARGET_ARCH_X64, // _OU_TARGET_ARCH_X64
- _OU_TARGET_ARCH_POWERPC, // _OU_TARGET_ARCH_POWERPC
- _OU_TARGET_ARCH_SPARC, // _OU_TARGET_ARCH_SPARC
- _OU_TARGET_ARCH_ARM, // _OU_TARGET_ARCH_ARM
- };
- static const CEnumSortedElementArray<int, _OU_TARGET_ARCH__MAX - 1, int, 102> g_ai_ArchitecturesOrderCheck;
- template<>
- const char *const CEnumUnsortedElementArray<int, _OU_TARGET_ARCH__MAX - 1, const char *, 102>::m_aetElementArray[] =
- {
- "OTHER", // _OU_TARGET_ARCH_OTHER
- "x86", // _OU_TARGET_ARCH_X86
- "Itanium", // _OU_TARGET_ARCH_IA64
- "x64", // _OU_TARGET_ARCH_X64
- "PowerPC", // _OU_TARGET_ARCH_POWERPC
- "Sparc", // _OU_TARGET_ARCH_SPARC
- "ARM", // _OU_TARGET_ARCH_ARM
- };
- static const CEnumUnsortedElementArray<int, _OU_TARGET_ARCH__MAX - 1, const char *, 102> g_aszArchitecturesNames;
- // Verifies that compilers order is not changed
- template<>
- int const CEnumSortedElementArray<int, _OU_COMPILER__MAX - 1, int, 103>::m_aetElementArray[] =
- {
- _OU_COMPILER__OTHER, // _OU_COMPILER__OTHER,
- _OU_COMPILER_GCC, // _OU_COMPILER_GCC,
- _OU_COMPILER_MSVC, // _OU_COMPILER_MSVC,
- };
- static const CEnumSortedElementArray<int, _OU_COMPILER__MAX - 1, int, 103> g_ai_CompilersOrderCheck;
- template<>
- const char *const CEnumUnsortedElementArray<int, _OU_COMPILER__MAX - 1, const char *, 103>::m_aetElementArray[] =
- {
- "UNKNOWN", // _OU_COMPILER__OTHER,
- "GCC", // _OU_COMPILER_GCC,
- "MSVC", // _OU_COMPILER_MSVC,
- };
- static const CEnumUnsortedElementArray<int, _OU_COMPILER__MAX - 1, const char *, 103> g_aszCompilersNames;
- // Verifies that compiler versions order is not changed
- template<>
- int const CEnumSortedElementArray<int, _OU_COMPILER_VERSION__MAX - 1, int, 104>::m_aetElementArray[] =
- {
- _OU_COMPILER_VERSION__OTHER, // _OU_COMPILER_VERSION__OTHER,
- _OU_COMPILER_VERSION_MSVC1998, // _OU_COMPILER_VERSION_MSVC1998,
- _OU_COMPILER_VERSION_GCCLT4, // _OU_COMPILER_VERSION_GCCLT4,
- };
- static const CEnumSortedElementArray<int, _OU_COMPILER_VERSION__MAX - 1, int, 104> g_ai_CompilersVersionOrderCheck;
- template<>
- const char *const CEnumUnsortedElementArray<int, _OU_COMPILER_VERSION__MAX - 1, const char *, 104>::m_aetElementArray[] =
- {
- "OTHER", // _OU_COMPILER_VERSION__OTHER,
- "MSVC1998", // _OU_COMPILER_VERSION_MSVC1998,
- "GCC LESS THAN 4.0", // _OU_COMPILER_VERSION_GCCLT4,
- };
- static const CEnumUnsortedElementArray<int, _OU_COMPILER_VERSION__MAX - 1, const char *, 104> g_aszCompilerVersionNames;
- #define _TESTPLATFORM_DEFINITION_TEXT(Definition) #Definition
- #define TESTPLATFORM_TEFINITION_TEXT(Definition) _TESTPLATFORM_DEFINITION_TEXT(Definition)
- bool TestPlatform(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount)
- {
- const char *szOSName = g_aszOSNames.Encode(_OU_TARGET_OS - 1);
- const char *szBitsName = g_aszBitsNames.Encode(_OU_TARGET_BITS - 1);
- const char *szArchitectureName = g_aszArchitecturesNames.Encode(_OU_TARGET_ARCH - 1);
- const char *szCompilerName = g_aszCompilersNames.Encode(_OU_COMPILER - 1);
- const char *szCompilerVersion = g_aszCompilerVersionNames.Encode(_OU_COMPILER_VERSION - 1);
-
- printf("Target OS: %s\n", szOSName);
- printf("Target Bits: %s\n", szBitsName);
- printf("Target Architecture %s\n", szArchitectureName);
- printf("Compiler Name: %s\n", szCompilerName);
- printf("Compiler Version: %s\n", szCompilerVersion);
- printf("Method Convention: %s\n", TESTPLATFORM_TEFINITION_TEXT(=_OU_CONVENTION_METHOD));
- printf("Function Convention: %s\n", TESTPLATFORM_TEFINITION_TEXT(=_OU_CONVENTION_API));
- printf("Callback Convention: %s\n", TESTPLATFORM_TEFINITION_TEXT(=_OU_CONVENTION_CALLBACK));
- printf("Alwaysinline definition: %s\n", TESTPLATFORM_TEFINITION_TEXT(=_OU_ALWAYSINLINE));
- printf("Inline definition: %s\n", TESTPLATFORM_TEFINITION_TEXT(=_OU_INLINE));
-
- nOutSuccessCount = 0;
- nOutTestCount = 0;
- return true;
- }
- //////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////
- enum EOUSUBSYSTEMTEST
- {
- OST__MIN,
- OST_INTTYPES = OST__MIN,
- OST_MACROS,
- OST_TEMPLATES,
- OST_TYPEWRAPPER,
- OST_ASSERT,
- OST_MALLOC,
- OST_CUSTOMIZATION,
- OST_ENUMARRAYS,
- OST_ATOMIC,
- OST_FLAGSDEFINES,
- OST_ATOMICFLAGS,
- OST_SIMPLEFLAGS64,
- OST_SIMPLEFLAGS32,
- OST_SIMPLEFLAGS16,
- OST_SIMPLEFLAGS8,
- OST_TLS,
- OST_PLATFORM,
- OST__MAX,
- };
- typedef bool (*COUSubsystemTestProcedure)(unsigned int &nOutSuccessCount, unsigned int &nOutTestCount);
- template<>
- COUSubsystemTestProcedure const CEnumUnsortedElementArray<EOUSUBSYSTEMTEST, OST__MAX, COUSubsystemTestProcedure>::m_aetElementArray[] =
- {
- &TestIntTypes, // OST_INTTYPES,
- &TestMacros, // OST_MACROS,
- &TestTemplates, // OST_TEMPLATES,
- &TestTypeWrapper, // OST_TYPEWRAPPER,
- &TestAssert, // OST_ASSERT,
- &TestMalloc, // OST_MALLOC,
- &TestCustomization, // OST_CUSTOMIZATION,
- &TestEnumArrays, // OST_ENUMARRAYS,
- &TestAtomic, // OST_ATOMIC,
- &TestFlagsDefines, // OST_FLAGSDEFINES,
- &TestAtomicFlags, // OST_ATOMICFLAGS,
- &TestSimpleFlags64, // OST_SIMPLEFLAGS64,
- &TestSimpleFlags32, // OST_SIMPLEFLAGS32,
- &TestSimpleFlags16, // OST_SIMPLEFLAGS16,
- &TestSimpleFlags8, // OST_SIMPLEFLAGS8,
- &TestTLS, // OST_TLS,
- &TestPlatform, // OST_PLATFORM,
- };
- static const CEnumUnsortedElementArray<EOUSUBSYSTEMTEST, OST__MAX, COUSubsystemTestProcedure> g_afnOUSubsystemTestProcedures;
- template<>
- const char *const CEnumUnsortedElementArray<EOUSUBSYSTEMTEST, OST__MAX, const char *>::m_aetElementArray[] =
- {
- "IntTypes", // OST_INTTYPES,
- "Macros", // OST_MACROS,
- "Templates", // OST_TEMPLATES,
- "TypeWrapper", // OST_TYPEWRAPPER,
- "Assert", // OST_ASSERT,
- "Malloc", // OST_MALLOC,
- "Customization", // OST_CUSTOMIZATION,
- "EnumArrays", // OST_ENUMARRAYS,
- "Atomic", // OST_ATOMIC,
- "FlagsDefines", // OST_FLAGSDEFINES,
- "AtomicFlags", // OST_ATOMICFLAGS,
- "SimpleFlags64", // OST_SIMPLEFLAGS64,
- "SimpleFlags32", // OST_SIMPLEFLAGS32,
- "SimpleFlags16", // OST_SIMPLEFLAGS16,
- "SimpleFlags8", // OST_SIMPLEFLAGS8,
- "TLS", // OST_TLS,
- "Platform", // OST_PLATFORM,
- };
- static const CEnumUnsortedElementArray<EOUSUBSYSTEMTEST, OST__MAX, const char *> g_aszOUSubsystemNames;
- bool ProcessOUCoverageTests(unsigned int &nOutFailureCount)
- {
- unsigned int nSuccessCount = 0;
- for (EOUSUBSYSTEMTEST stSubsystemTest = OST__MIN; stSubsystemTest != OST__MAX; ++stSubsystemTest)
- {
- const char *szSubsystemName = g_aszOUSubsystemNames.Encode(stSubsystemTest);
- printf("\nTesting subsystem \"%s\"\n", szSubsystemName);
- printf("---------------------------------------------------\n");
- unsigned int nSubsysytemSuccessCount = 0, nSubsystemTestCount = 1;
- COUSubsystemTestProcedure fnTestProcedure = g_afnOUSubsystemTestProcedures.Encode(stSubsystemTest);
- if (fnTestProcedure(nSubsysytemSuccessCount, nSubsystemTestCount) && nSubsysytemSuccessCount == nSubsystemTestCount)
- {
- nSuccessCount += 1;
- }
- unsigned int nSubsysytemFailureCount = nSubsystemTestCount - nSubsysytemSuccessCount;
- printf("---------------------------------------------------\n");
- printf("Feature tests failed: %3u out of %3u\n", nSubsysytemFailureCount, nSubsystemTestCount);
- }
- unsigned int nFailureCount = OST__MAX - nSuccessCount;
-
- printf("\n===================================================\n");
- printf("Subsystem tests failed: %3u out of %3u\n", nFailureCount, (unsigned int)OST__MAX);
- nOutFailureCount = nFailureCount;
- return nSuccessCount == OST__MAX;
- }
- int main(int argc, char* argv[])
- {
- unsigned int nFailureCount;
- ProcessOUCoverageTests(nFailureCount);
- return nFailureCount;
- }
|