1 ! RUN: %python %S/test_folding.py %s %flang_fc1
2 ! Test numeric model inquiry intrinsics
6 integer, parameter :: &
10 bs8
= bit_size(0_8), &
12 logical, parameter :: test_bit_size_1
= bs1
== 8
13 logical, parameter :: test_bit_size_2
= bs2
== 16
14 logical, parameter :: test_bit_size_4
= bs4
== 32
15 logical, parameter :: test_bit_size_8
= bs8
== 64
16 logical, parameter :: test_bit_size_16
= bs16
== 128
18 real(2), parameter :: &
19 eps2
= epsilon(0._2
), zeps2
= real(z
'1400', kind
=2), deps2
= 9.765625e-4_2
20 real(3), parameter :: &
21 eps3
= epsilon(0._3
), zeps3
= real(z
'3c00', kind
=3), deps3
= 7.8135e-3_3
22 real(4), parameter :: &
23 eps4
= epsilon(0._4
), zeps4
= real(z
'34000000', kind
=4), &
24 deps4
= 1.1920928955078125e-07_4
25 real(8), parameter :: &
26 eps8
= epsilon(0._8
), zeps8
= real(z
'3cb0000000000000', kind
=8), &
27 deps8
= 2.2204460492503130808472633361816406250e-16_8
28 real(10), parameter :: &
29 eps10
= epsilon(0._10
), zeps10
= real(z
'3fc08000000000000000', kind
=10), &
30 deps10
= 1.08420217248550443400745280086994171142578125e-19_10
31 real(16), parameter :: &
32 eps16
= epsilon(0._16
), &
33 zeps16
= real(z
'3f8f0000000000000000000000000000', kind
=16), &
34 deps16
= 1.9259299443872358530559779425849273185381016482153881952399387955665588378906250e-34_16
35 logical, parameter :: test_eps2
= eps2
== zeps2
.and
. eps2
== deps2
36 logical, parameter :: test_eps3
= eps3
== zeps3
.and
. eps3
== deps3
37 logical, parameter :: test_eps4
= eps4
== zeps4
.and
. eps4
== deps4
38 logical, parameter :: test_eps8
= eps8
== zeps8
.and
. eps8
== deps8
39 logical, parameter :: test_eps10
= eps10
== zeps10
.and
. eps10
== deps10
40 logical, parameter :: test_eps16
= eps16
== zeps16
.and
. eps16
== deps16
42 integer(1), parameter :: &
43 ihuge1
= huge(0_1), zihuge1
= int(z
'7f', kind
=1), dihuge1
= 127_1
44 integer(2), parameter :: &
45 ihuge2
= huge(0_2), zihuge2
= int(z
'7fff', kind
=2), dihuge2
= 32767_2
46 integer(4), parameter :: &
47 ihuge4
= huge(0_4), zihuge4
= int(z
'7fffffff', kind
=4), &
48 dihuge4
= 2147483647_4
49 integer(8), parameter :: &
50 ihuge8
= huge(0_8), zihuge8
= int(z
'7fffffffffffffff', kind
=8), &
51 dihuge8
= 9223372036854775807_8
52 integer(16), parameter :: &
53 ihuge16
= huge(0_16), &
54 zihuge16
= int(z
'7fffffffffffffffffffffffffffffff', kind
=16), &
55 dihuge16
= 170141183460469231731687303715884105727_16
56 logical, parameter :: test_ihuge1
= ihuge1
== zihuge1
.and
. ihuge1
== dihuge1
57 logical, parameter :: test_ihuge2
= ihuge2
== zihuge2
.and
. ihuge2
== dihuge2
58 logical, parameter :: test_ihuge4
= ihuge4
== zihuge4
.and
. ihuge4
== dihuge4
59 logical, parameter :: test_ihuge8
= ihuge8
== zihuge8
.and
. ihuge8
== dihuge8
60 logical, parameter :: test_ihuge16
= ihuge16
== zihuge16
.and
. ihuge16
== dihuge16
62 real(2), parameter :: &
63 ahuge2
= huge(0._2
), zahuge2
= real(z
'7bff', kind
=2), dahuge2
= 6.5504e4_2
64 real(3), parameter :: &
65 ahuge3
= huge(0._3
), zahuge3
= real(z
'7f7f', kind
=3), &
66 dahuge3
= 3.3895313892515354759047080037148786688e38_3
67 real(4), parameter :: &
68 ahuge4
= huge(0._4
), zahuge4
= real(z
'7f7fffff', kind
=4), &
69 dahuge4
= 3.4028234663852885981170418348451692544e38_4
70 real(8), parameter :: &
71 ahuge8
= huge(0._8
), zahuge8
= real(z
'7fefffffffffffff', kind
=8), &
72 dahuge8
= 1.7976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817&
73 &1540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868&
74 &5084551339423045832369032229481658085593321233482747978262041447231687381771809192998812504040261841&
76 real(10), parameter :: &
77 ahuge10
= huge(0._10
), zahuge10
= real(z
'7ffeffffffffffffffff', kind
=10), &
78 dahuge10
= 1.1897314953572317650212638530309702051690633222946242004403237338917370055229707226164102903365288828&
79 &5354569780749557731442744315367028843419812557385374367867359320070697326320191591828296152436552951&
80 &0646791086614311790632169778838896134786560600399148753433211454911160088679845154866512852340149773&
81 &0376000091254793939662231513836224178385427439178381387178058894875405751682263476592355769748051137&
82 &2564902088485522249479139937758502601177354918009979622602685950855888360815984690023564513234659447&
83 &6384939859276456284579661772930407806609229102715046085388087959327781622986827547830768080040150694&
84 &9423034117289577771003357140105597752421240573470073862516601108283791196230084692772009651535002084&
85 &7447079244384854591288672300061908512647211195136146752763351956292759795725027800298079590419313960&
86 &3021470997035276467445530922022679656280991498232083329641241038509239184734786121921697210543484287&
87 &0483534081130425730022164213489173471742348007148807510020643905172342476560047217680964861079949434&
88 &1570347632064355862420744350442438056613601760883747816538902780957697597728686007148702828795556714&
89 &1404632615832623602762896316173978484254486860609948270867968048078702511858930838546584223040908805&
90 &9962945945862019037660484467909260022254105307759010657606713472001258464069570302571389609837579989&
91 &2695455305236856075868317922311363951946885088077187210470520395758748001314313144425494391994017575&
92 &3169339392366881856189129931729104252921236835159922322050998001677102784035360140829296398115122877&
93 &7681357060457893435354516965395612540488464471697868932116710872290880827783505182288576460622187397&
94 &0285165508372099234948333443522898475123275372663606621390228126470623407535207172405866507951821730&
95 &3463782631353393706774901950197841690441824738063162828586857741432581165364040218402724913393320949&
96 &2194984224427304270198730445366203502623869578046820036014472919971230955300572061418669748528468561&
97 &8651483271597448120312194675168637934309618961510733006555242148519520176285859509105183947250286387&
98 &1632494167613804996319791441870254302706758495192008837915169401581740046711477877201459644461175204&
99 &0594535047647218079757611117208462736392796003396704700376133745095531841500737964126050479232516613&
100 &5484129188421134082301547330475406707281876350361733290800595189632520707167390454777712968226520622&
101 &5651439919376804400292380903112437912614776255964694221981375146967079446870358004392507659451618379&
102 &8118593920495440361149153107822510726914869798092409467721427270124043771874092167566136349389004512&
103 &3235166814608932240069799317601780533819184998193300841098599393876029260139091141452600372028487213&
104 &2411955424282101831204216104467404621635336900583664606591156298764745525068145003932941404131495400&
105 &6776029510059622530228230036314738246810596484424413248645731374375950964161680480241293518762046681&
106 &3563687753281467553879887177183651289394719533506188500326760735438867336800207438784965701457609034&
107 &9857571243045102038730494854256702479339322809110526041538528994849203991091946129912491633289917998&
108 &0943803378795220931314669461497059396641523759492858909604899161219449899863848370224866722491489246&
109 &7841020618336462741696957630763248023558797524525373703543388296086275342774001633343405508353704850&
110 &7374544819754722228975281083020898682633020285259923084168054539687911418297629988964576482765287504&
111 &5628549242651652177507995162596692291149777889623566709566271384820181913483216879958636526376209782&
112 &8507009933729439678463987902491451422274252700636394232799848397673998715441855420156224415492665301&
113 &4515504685489258620276085761837129763358761215382565129633538141663949516556000264159186554850057052&
114 &6114319529199188079545223946496276356301785808966922264062353828985358675959906470083856871238103295&
115 &9192649484625076899225841930548076362021508902214922052806984201835084058693849381549890944546197789&
116 &3029113576516775406232278298314033473276603952231603422824717528181818844304880921321933550869873395&
117 &8612760736708666523755556758031714901084773200964243187800700087973460329062789435537435644488519071&
118 &9161645514115576193939969076741515640282654366402676009508752394550734155613586793306603174472092444&
119 &6513532366647649735400851967040771103640538150073486891798364049570606189535005089840913826869535090&
120 &0667833244725787121966044152849248400418509328119089636341757398971665960007594878006191640948543387&
121 &5852065711654107226099628815012314437794400874930194474433078438899570184271000480830501217712356062&
122 &2895076269042856800047718893158089358515593863176652948089031267747029662545110861548958395087796755&
123 &4641379448959605279752098748138397625785921057562844017593493241621483395653501891968113890918437957&
124 &3470326940634289008780584694035245347939808067427323629788710086717580253156130235606487870925986528&
125 &8416350972529537091114317204887747405539054009425375424119317944175137064689643861517718849867010341&
126 &5325423859110896247108853858086888377772586485641459342621210866475884892600317623459607695088491496&
127 &6244415660441955208681198977024e4932_10
128 real(16), parameter :: &
129 ahuge16
= huge(0._16
), zahuge16
= real(z
'7ffeffffffffffffffffffffffffffff', kind
=16), &
130 dahuge16
= 1.1897314953572317650857593266280070161964690526416940455296988842121635797553123923249740128484620735&
131 &2590203356474912685975526543357380446267269875194526149085346195872502126284586579940540449357468156&
132 &6096686172574953791792292256220777095858112702436475442537092608935138247345677279593806773692330094&
133 &6157461197257841728898925219399207576542048645656733564522472781522888677006389355954564966995114417&
134 &5290960687851325094831139688610052683309212868397475219226638679188087369434307734815556410166997113&
135 &8512786874753496996549221727686770196551512812712488289469952298031867469924683981576664562667786719&
136 &0614996396303416570983054252372208766646300878087672561828032202122199248523759030495209113959109189&
137 &2120527349676858811903011159301878936803923201167140417584510885470696521560577711351625740481881769&
138 &5075025715299705916714352103671782759119316034498392169720631800164034124698918142227577300459309880&
139 &4547151796062998955075830758511951858579711731676769660579988993526318854177162953020146688023840758&
140 &4603622660648014297759540713505037980864913015716402406031178690879637251033587351277479527574859541&
141 &7572920936651398752709055215663939505589207804914540432978557623565645991208599669097180808881920063&
142 &7227714312184890119222096790535459636284173260024397328029395243137866685140273814343210366365711716&
143 &7042358647275956123197079396783927914728272019537706060212263845788320480934171752680963925353944773&
144 &0280863675704796054050525162959099932535265586464682793821550087166946662209865086040990507131145474&
145 &2674110428395423227629949387596131127438371928396826762575553883728144908453957471281620658715882191&
146 &0888724011665136196205080002917629993882608241754751673226993047313326125892184551681523545535431045&
147 &8114528303607394526100730578774092094736822286015459361126642549541799645333882549670764145955017051&
148 &3308000612538651401801532119293614565003435147928902055320217600618822326157365533772949809740595905&
149 &2018796145979938674151302850593441045360348019238334932111517181105100410859283099181138255290906487&
150 &3029533418691087118107895004426881765865961841419267486232005929789956207494587649901662172318722999&
151 &4845123258260870315619363836897406865052797752967893316136838227985970406516005241290251498948731531&
152 &9694209505667084746692764481259650670012944357951247923062137397808873125708979962290218382410541293&
153 &0483065603459863120371744282301377070153823878609951218937542956964157950988060608985782910656238116&
154 &1422035741047574518281708048752574462041283485138290827317223641893804935883389476643706232798207558&
155 &3164620541748839306283820178954721954319445090211369992596537690819279215212221282457887933650687528&
156 &8617303469517112245451315447164280392523574962804175375927948971096983905242318797695347043690474223&
157 &8132665056397611644388442665313646268512196339944341540985621273959361844218214442734315345078601616&
158 &1428702272098406156966033337278824103713153807737748015267058325792053556997331818811268567331899796&
159 &7497786786001251403873023920127717626858627038170562807276699687356274072773403132694104831615879354&
160 &3958115858251128378415632227616233344591881315378823557324830300859768903829697344762145934281912127&
161 &1714133304757786755221851743106484876037319629031012446614508707837714052853304868420427879959665251&
162 &4009368964527494988719996088230065668196236298805733689960371306226158464997243490564472254071897564&
163 &1441285398399860960455632647712855850663041779957201017448443871583297673755604162078008788300720724&
164 &1390865785566723954636935777578134428819598917631335685641784543423281488674422674670706697975557712&
165 &1788798468777700116472954103621810567107869855646414713502627836321256957407217461738363552424248762&
166 &4364780853518109957492932381740813319050481446127009055414257022203025376114948242287653245779337785&
167 &1981877869734028258091278067497905893806255685600107605770598216668682475603756961576049761981948205&
168 &2758118532729333127733603742149847001463931981340719681330844408263017545241644293372483217234561694&
169 &2639378557592944486629790954192274518015884259778696940266014279196551684158959230431151917518727133&
170 &4609575263460825447598815416225495259785319903964588374219923638761039583094807436598839770784963225&
171 &2080920941206268114832425403540515474312327876180802357701527842702008781378306569508588571830140611&
172 &0980426830095308627974030153554643774062498539644810004022317716657008936075218040845236685686491032&
173 &5886266629337247244143556352059546170104239050079561583450594483732665254246744436486149918427509748&
174 &5253621979537504128523848241127715641240965261646703516395599407360083455079665191393229410544185167&
175 &9990997876554244625589008743884056491694537267393122602348155432978423086460721901479480729284567258&
176 &3503954612118213364077776992584180757905173583882311275962271406750966991364528828189455892561297242&
177 &5252452248453502562347348900936766966136332741088135837550717443838484760651019872222926016920811114&
178 &6169371432077434885046020127763642567468723152059526010722289706864609324352227544963417635351891055&
179 &48847634608972381760403137363968e4932_16
180 logical, parameter :: test_ahuge2
= ahuge2
== zahuge2
.and
. ahuge2
== dahuge2
181 logical, parameter :: test_ahuge3
= ahuge3
== zahuge3
.and
. ahuge3
== dahuge3
182 logical, parameter :: test_ahuge4
= ahuge4
== zahuge4
.and
. ahuge4
== dahuge4
183 logical, parameter :: test_ahuge8
= ahuge8
== zahuge8
.and
. ahuge8
== dahuge8
184 logical, parameter :: test_ahuge10
= ahuge10
== zahuge10
.and
. ahuge10
== dahuge10
185 logical, parameter :: test_ahuge16
= ahuge16
== zahuge16
.and
. ahuge16
== dahuge16
187 real(2), parameter :: tiny2
= tiny(0._2
), ztiny2
= real(z
'0400', kind
=2)
188 real(3), parameter :: tiny3
= tiny(0._3
), ztiny3
= real(z
'0080', kind
=3)
189 real(4), parameter :: tiny4
= tiny(0._4
), ztiny4
= real(z
'00800000', kind
=4)
190 real(8), parameter :: tiny8
= tiny(0._8
), ztiny8
= real(z
'0010000000000000', kind
=8)
191 real(10), parameter :: tiny10
= tiny(0._10
), ztiny10
= real(z
'00018000000000000000', kind
=10)
192 real(16), parameter :: tiny16
= tiny(0._16
), ztiny16
= real(z
'00010000000000000000000000000000', kind
=16)
193 logical, parameter :: test_tiny2
= tiny2
== ztiny2
194 logical, parameter :: test_tiny3
= tiny3
== ztiny3
195 logical, parameter :: test_tiny4
= tiny4
== ztiny4
196 logical, parameter :: test_tiny8
= tiny8
== ztiny8
197 logical, parameter :: test_tiny10
= tiny10
== ztiny10
198 logical, parameter :: test_tiny16
= tiny16
== ztiny16
200 logical, parameter :: test_exponent_0
= exponent(0.0) == 0
201 logical, parameter :: test_exponent_r8
= exponent(0.125) == -2
202 logical, parameter :: test_exponent_r4
= exponent(0.25) == -1
203 logical, parameter :: test_exponent_r2
= exponent(0.5) == 0
204 logical, parameter :: test_exponent_1
= exponent(1.0) == 1
205 logical, parameter :: test_exponent_4
= exponent(4.1) == 3
206 logical, parameter :: test_exponent_12
= exponent(12.9) == 4
208 integer, parameter :: &
209 max2
= maxexponent(0._2
), &
210 max3
= maxexponent(0._3
), &
211 max4
= maxexponent(0._4
), &
212 max8
= maxexponent(0._8
), &
213 max10
= maxexponent(0._10
), &
214 max16
= maxexponent(0._16
)
215 logical, parameter :: test_max2
= max2
== 16
216 logical, parameter :: test_max3
= max3
== 128
217 logical, parameter :: test_max4
= max4
== 128
218 logical, parameter :: test_max8
= max8
== 1024
219 logical, parameter :: test_max10
= max10
== 16384
220 logical, parameter :: test_max16
= max16
== 16384
222 integer, parameter :: &
223 min2
= minexponent(0._2
), &
224 min3
= minexponent(0._3
), &
225 min4
= minexponent(0._4
), &
226 min8
= minexponent(0._8
), &
227 min10
= minexponent(0._10
), &
228 min16
= minexponent(0._16
)
229 logical, parameter :: test_min2
= min2
== -13
230 logical, parameter :: test_min3
= min3
== -125
231 logical, parameter :: test_min4
= min4
== -125
232 logical, parameter :: test_min8
= min8
== -1021
233 logical, parameter :: test_min10
= min10
== -16381
234 logical, parameter :: test_min16
= min16
== -16381
236 integer, parameter :: &
237 irange1
= range(0_1), &
238 irange2
= range(0_2), &
239 irange4
= range(0_4), &
240 irange8
= range(0_8), &
241 irange16
= range(0_16)
242 logical, parameter :: test_irange1
= irange1
== 2
243 logical, parameter :: test_irange2
= irange2
== 4
244 logical, parameter :: test_irange4
= irange4
== 9
245 logical, parameter :: test_irange8
= irange8
== 18
246 logical, parameter :: test_irange16
= irange16
== 38
248 integer, parameter :: &
249 arange2
= range(0._2
), zrange2
= range((0._2
,0._2
)), &
250 arange3
= range(0._3
), zrange3
= range((0._3
, 0._3
)), &
251 arange4
= range(0._4
), zrange4
= range((0._4
, 0._4
)), &
252 arange8
= range(0._8
), zrange8
= range((0._8
, 0._8
)), &
253 arange10
= range(0._10
), zrange10
= range((0._10
, 0._10
)), &
254 arange16
= range(0._16
), zrange16
= range((0._16
, 0._16
))
255 logical, parameter :: test_arange2
= arange2
== 4 .and
. zrange2
== 4
256 logical, parameter :: test_arange3
= arange3
== 37 .and
. zrange3
== 37
257 logical, parameter :: test_zrange4
= arange4
== 37 .and
. zrange4
== 37
258 logical, parameter :: test_zrange8
= arange8
== 307 .and
. zrange8
== 307
259 logical, parameter :: test_zrange10
= arange10
== 4931 .and
. zrange10
== 4931
260 logical, parameter :: test_zrange16
= arange16
== 4931 .and
. zrange16
== 4931