PageRenderTime 52ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/third_party/gofrontend/libgo/go/math/cmplx/cmath_test.go

http://github.com/axw/llgo
Go | 866 lines | 841 code | 14 blank | 11 comment | 133 complexity | 74a430b4ed3588560f180705f7da7c9e MD5 | raw file
Possible License(s): BSD-3-Clause, MIT
  1. // Copyright 2010 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package cmplx
  5. import (
  6. "math"
  7. "testing"
  8. )
  9. var vc26 = []complex128{
  10. (4.97901192488367350108546816 + 7.73887247457810456552351752i),
  11. (7.73887247457810456552351752 - 0.27688005719200159404635997i),
  12. (-0.27688005719200159404635997 - 5.01060361827107492160848778i),
  13. (-5.01060361827107492160848778 + 9.63629370719841737980004837i),
  14. (9.63629370719841737980004837 + 2.92637723924396464525443662i),
  15. (2.92637723924396464525443662 + 5.22908343145930665230025625i),
  16. (5.22908343145930665230025625 + 2.72793991043601025126008608i),
  17. (2.72793991043601025126008608 + 1.82530809168085506044576505i),
  18. (1.82530809168085506044576505 - 8.68592476857560136238589621i),
  19. (-8.68592476857560136238589621 + 4.97901192488367350108546816i),
  20. }
  21. var vc = []complex128{
  22. (4.9790119248836735e+00 + 7.7388724745781045e+00i),
  23. (7.7388724745781045e+00 - 2.7688005719200159e-01i),
  24. (-2.7688005719200159e-01 - 5.0106036182710749e+00i),
  25. (-5.0106036182710749e+00 + 9.6362937071984173e+00i),
  26. (9.6362937071984173e+00 + 2.9263772392439646e+00i),
  27. (2.9263772392439646e+00 + 5.2290834314593066e+00i),
  28. (5.2290834314593066e+00 + 2.7279399104360102e+00i),
  29. (2.7279399104360102e+00 + 1.8253080916808550e+00i),
  30. (1.8253080916808550e+00 - 8.6859247685756013e+00i),
  31. (-8.6859247685756013e+00 + 4.9790119248836735e+00i),
  32. }
  33. // The expected results below were computed by the high precision calculators
  34. // at http://keisan.casio.com/. More exact input values (array vc[], above)
  35. // were obtained by printing them with "%.26f". The answers were calculated
  36. // to 26 digits (by using the "Digit number" drop-down control of each
  37. // calculator).
  38. var abs = []float64{
  39. 9.2022120669932650313380972e+00,
  40. 7.7438239742296106616261394e+00,
  41. 5.0182478202557746902556648e+00,
  42. 1.0861137372799545160704002e+01,
  43. 1.0070841084922199607011905e+01,
  44. 5.9922447613166942183705192e+00,
  45. 5.8978784056736762299945176e+00,
  46. 3.2822866700678709020367184e+00,
  47. 8.8756430028990417290744307e+00,
  48. 1.0011785496777731986390856e+01,
  49. }
  50. var acos = []complex128{
  51. (1.0017679804707456328694569 - 2.9138232718554953784519807i),
  52. (0.03606427612041407369636057 + 2.7358584434576260925091256i),
  53. (1.6249365462333796703711823 + 2.3159537454335901187730929i),
  54. (2.0485650849650740120660391 - 3.0795576791204117911123886i),
  55. (0.29621132089073067282488147 - 3.0007392508200622519398814i),
  56. (1.0664555914934156601503632 - 2.4872865024796011364747111i),
  57. (0.48681307452231387690013905 - 2.463655912283054555225301i),
  58. (0.6116977071277574248407752 - 1.8734458851737055262693056i),
  59. (1.3649311280370181331184214 + 2.8793528632328795424123832i),
  60. (2.6189310485682988308904501 - 2.9956543302898767795858704i),
  61. }
  62. var acosh = []complex128{
  63. (2.9138232718554953784519807 + 1.0017679804707456328694569i),
  64. (2.7358584434576260925091256 - 0.03606427612041407369636057i),
  65. (2.3159537454335901187730929 - 1.6249365462333796703711823i),
  66. (3.0795576791204117911123886 + 2.0485650849650740120660391i),
  67. (3.0007392508200622519398814 + 0.29621132089073067282488147i),
  68. (2.4872865024796011364747111 + 1.0664555914934156601503632i),
  69. (2.463655912283054555225301 + 0.48681307452231387690013905i),
  70. (1.8734458851737055262693056 + 0.6116977071277574248407752i),
  71. (2.8793528632328795424123832 - 1.3649311280370181331184214i),
  72. (2.9956543302898767795858704 + 2.6189310485682988308904501i),
  73. }
  74. var asin = []complex128{
  75. (0.56902834632415098636186476 + 2.9138232718554953784519807i),
  76. (1.5347320506744825455349611 - 2.7358584434576260925091256i),
  77. (-0.054140219438483051139860579 - 2.3159537454335901187730929i),
  78. (-0.47776875817017739283471738 + 3.0795576791204117911123886i),
  79. (1.2745850059041659464064402 + 3.0007392508200622519398814i),
  80. (0.50434073530148095908095852 + 2.4872865024796011364747111i),
  81. (1.0839832522725827423311826 + 2.463655912283054555225301i),
  82. (0.9590986196671391943905465 + 1.8734458851737055262693056i),
  83. (0.20586519875787848611290031 - 2.8793528632328795424123832i),
  84. (-1.0481347217734022116591284 + 2.9956543302898767795858704i),
  85. }
  86. var asinh = []complex128{
  87. (2.9113760469415295679342185 + 0.99639459545704326759805893i),
  88. (2.7441755423994259061579029 - 0.035468308789000500601119392i),
  89. (-2.2962136462520690506126678 - 1.5144663565690151885726707i),
  90. (-3.0771233459295725965402455 + 1.0895577967194013849422294i),
  91. (3.0048366100923647417557027 + 0.29346979169819220036454168i),
  92. (2.4800059370795363157364643 + 1.0545868606049165710424232i),
  93. (2.4718773838309585611141821 + 0.47502344364250803363708842i),
  94. (1.8910743588080159144378396 + 0.56882925572563602341139174i),
  95. (2.8735426423367341878069406 - 1.362376149648891420997548i),
  96. (-2.9981750586172477217567878 + 0.5183571985225367505624207i),
  97. }
  98. var atan = []complex128{
  99. (1.5115747079332741358607654 + 0.091324403603954494382276776i),
  100. (1.4424504323482602560806727 - 0.0045416132642803911503770933i),
  101. (-1.5593488703630532674484026 - 0.20163295409248362456446431i),
  102. (-1.5280619472445889867794105 + 0.081721556230672003746956324i),
  103. (1.4759909163240799678221039 + 0.028602969320691644358773586i),
  104. (1.4877353772046548932715555 + 0.14566877153207281663773599i),
  105. (1.4206983927779191889826 + 0.076830486127880702249439993i),
  106. (1.3162236060498933364869556 + 0.16031313000467530644933363i),
  107. (1.5473450684303703578810093 - 0.11064907507939082484935782i),
  108. (-1.4841462340185253987375812 + 0.049341850305024399493142411i),
  109. }
  110. var atanh = []complex128{
  111. (0.058375027938968509064640438 + 1.4793488495105334458167782i),
  112. (0.12977343497790381229915667 - 1.5661009410463561327262499i),
  113. (-0.010576456067347252072200088 - 1.3743698658402284549750563i),
  114. (-0.042218595678688358882784918 + 1.4891433968166405606692604i),
  115. (0.095218997991316722061828397 + 1.5416884098777110330499698i),
  116. (0.079965459366890323857556487 + 1.4252510353873192700350435i),
  117. (0.15051245471980726221708301 + 1.4907432533016303804884461i),
  118. (0.25082072933993987714470373 + 1.392057665392187516442986i),
  119. (0.022896108815797135846276662 - 1.4609224989282864208963021i),
  120. (-0.08665624101841876130537396 + 1.5207902036935093480142159i),
  121. }
  122. var conj = []complex128{
  123. (4.9790119248836735e+00 - 7.7388724745781045e+00i),
  124. (7.7388724745781045e+00 + 2.7688005719200159e-01i),
  125. (-2.7688005719200159e-01 + 5.0106036182710749e+00i),
  126. (-5.0106036182710749e+00 - 9.6362937071984173e+00i),
  127. (9.6362937071984173e+00 - 2.9263772392439646e+00i),
  128. (2.9263772392439646e+00 - 5.2290834314593066e+00i),
  129. (5.2290834314593066e+00 - 2.7279399104360102e+00i),
  130. (2.7279399104360102e+00 - 1.8253080916808550e+00i),
  131. (1.8253080916808550e+00 + 8.6859247685756013e+00i),
  132. (-8.6859247685756013e+00 - 4.9790119248836735e+00i),
  133. }
  134. var cos = []complex128{
  135. (3.024540920601483938336569e+02 + 1.1073797572517071650045357e+03i),
  136. (1.192858682649064973252758e-01 + 2.7857554122333065540970207e-01i),
  137. (7.2144394304528306603857962e+01 - 2.0500129667076044169954205e+01i),
  138. (2.24921952538403984190541e+03 - 7.317363745602773587049329e+03i),
  139. (-9.148222970032421760015498e+00 + 1.953124661113563541862227e+00i),
  140. (-9.116081175857732248227078e+01 - 1.992669213569952232487371e+01i),
  141. (3.795639179042704640002918e+00 + 6.623513350981458399309662e+00i),
  142. (-2.9144840732498869560679084e+00 - 1.214620271628002917638748e+00i),
  143. (-7.45123482501299743872481e+02 + 2.8641692314488080814066734e+03i),
  144. (-5.371977967039319076416747e+01 + 4.893348341339375830564624e+01i),
  145. }
  146. var cosh = []complex128{
  147. (8.34638383523018249366948e+00 + 7.2181057886425846415112064e+01i),
  148. (1.10421967379919366952251e+03 - 3.1379638689277575379469861e+02i),
  149. (3.051485206773701584738512e-01 - 2.6805384730105297848044485e-01i),
  150. (-7.33294728684187933370938e+01 + 1.574445942284918251038144e+01i),
  151. (-7.478643293945957535757355e+03 + 1.6348382209913353929473321e+03i),
  152. (4.622316522966235701630926e+00 - 8.088695185566375256093098e+00i),
  153. (-8.544333183278877406197712e+01 + 3.7505836120128166455231717e+01i),
  154. (-1.934457815021493925115198e+00 + 7.3725859611767228178358673e+00i),
  155. (-2.352958770061749348353548e+00 - 2.034982010440878358915409e+00i),
  156. (7.79756457532134748165069e+02 + 2.8549350716819176560377717e+03i),
  157. }
  158. var exp = []complex128{
  159. (1.669197736864670815125146e+01 + 1.4436895109507663689174096e+02i),
  160. (2.2084389286252583447276212e+03 - 6.2759289284909211238261917e+02i),
  161. (2.227538273122775173434327e-01 + 7.2468284028334191250470034e-01i),
  162. (-6.5182985958153548997881627e-03 - 1.39965837915193860879044e-03i),
  163. (-1.4957286524084015746110777e+04 + 3.269676455931135688988042e+03i),
  164. (9.218158701983105935659273e+00 - 1.6223985291084956009304582e+01i),
  165. (-1.7088175716853040841444505e+02 + 7.501382609870410713795546e+01i),
  166. (-3.852461315830959613132505e+00 + 1.4808420423156073221970892e+01i),
  167. (-4.586775503301407379786695e+00 - 4.178501081246873415144744e+00i),
  168. (4.451337963005453491095747e-05 - 1.62977574205442915935263e-04i),
  169. }
  170. var log = []complex128{
  171. (2.2194438972179194425697051e+00 + 9.9909115046919291062461269e-01i),
  172. (2.0468956191154167256337289e+00 - 3.5762575021856971295156489e-02i),
  173. (1.6130808329853860438751244e+00 - 1.6259990074019058442232221e+00i),
  174. (2.3851910394823008710032651e+00 + 2.0502936359659111755031062e+00i),
  175. (2.3096442270679923004800651e+00 + 2.9483213155446756211881774e-01i),
  176. (1.7904660933974656106951860e+00 + 1.0605860367252556281902109e+00i),
  177. (1.7745926939841751666177512e+00 + 4.8084556083358307819310911e-01i),
  178. (1.1885403350045342425648780e+00 + 5.8969634164776659423195222e-01i),
  179. (2.1833107837679082586772505e+00 - 1.3636647724582455028314573e+00i),
  180. (2.3037629487273259170991671e+00 + 2.6210913895386013290915234e+00i),
  181. }
  182. var log10 = []complex128{
  183. (9.6389223745559042474184943e-01 + 4.338997735671419492599631e-01i),
  184. (8.8895547241376579493490892e-01 - 1.5531488990643548254864806e-02i),
  185. (7.0055210462945412305244578e-01 - 7.0616239649481243222248404e-01i),
  186. (1.0358753067322445311676952e+00 + 8.9043121238134980156490909e-01i),
  187. (1.003065742975330237172029e+00 + 1.2804396782187887479857811e-01i),
  188. (7.7758954439739162532085157e-01 + 4.6060666333341810869055108e-01i),
  189. (7.7069581462315327037689152e-01 + 2.0882857371769952195512475e-01i),
  190. (5.1617650901191156135137239e-01 + 2.5610186717615977620363299e-01i),
  191. (9.4819982567026639742663212e-01 - 5.9223208584446952284914289e-01i),
  192. (1.0005115362454417135973429e+00 + 1.1383255270407412817250921e+00i),
  193. }
  194. type ff struct {
  195. r, theta float64
  196. }
  197. var polar = []ff{
  198. {9.2022120669932650313380972e+00, 9.9909115046919291062461269e-01},
  199. {7.7438239742296106616261394e+00, -3.5762575021856971295156489e-02},
  200. {5.0182478202557746902556648e+00, -1.6259990074019058442232221e+00},
  201. {1.0861137372799545160704002e+01, 2.0502936359659111755031062e+00},
  202. {1.0070841084922199607011905e+01, 2.9483213155446756211881774e-01},
  203. {5.9922447613166942183705192e+00, 1.0605860367252556281902109e+00},
  204. {5.8978784056736762299945176e+00, 4.8084556083358307819310911e-01},
  205. {3.2822866700678709020367184e+00, 5.8969634164776659423195222e-01},
  206. {8.8756430028990417290744307e+00, -1.3636647724582455028314573e+00},
  207. {1.0011785496777731986390856e+01, 2.6210913895386013290915234e+00},
  208. }
  209. var pow = []complex128{
  210. (-2.499956739197529585028819e+00 + 1.759751724335650228957144e+00i),
  211. (7.357094338218116311191939e+04 - 5.089973412479151648145882e+04i),
  212. (1.320777296067768517259592e+01 - 3.165621914333901498921986e+01i),
  213. (-3.123287828297300934072149e-07 - 1.9849567521490553032502223E-7i),
  214. (8.0622651468477229614813e+04 - 7.80028727944573092944363e+04i),
  215. (-1.0268824572103165858577141e+00 - 4.716844738244989776610672e-01i),
  216. (-4.35953819012244175753187e+01 + 2.2036445974645306917648585e+02i),
  217. (8.3556092283250594950239e-01 - 1.2261571947167240272593282e+01i),
  218. (1.582292972120769306069625e+03 + 1.273564263524278244782512e+04i),
  219. (6.592208301642122149025369e-08 + 2.584887236651661903526389e-08i),
  220. }
  221. var sin = []complex128{
  222. (-1.1073801774240233539648544e+03 + 3.024539773002502192425231e+02i),
  223. (1.0317037521400759359744682e+00 - 3.2208979799929570242818e-02i),
  224. (-2.0501952097271429804261058e+01 - 7.2137981348240798841800967e+01i),
  225. (7.3173638080346338642193078e+03 + 2.249219506193664342566248e+03i),
  226. (-1.964375633631808177565226e+00 - 9.0958264713870404464159683e+00i),
  227. (1.992783647158514838337674e+01 - 9.11555769410191350416942e+01i),
  228. (-6.680335650741921444300349e+00 + 3.763353833142432513086117e+00i),
  229. (1.2794028166657459148245993e+00 - 2.7669092099795781155109602e+00i),
  230. (2.8641693949535259594188879e+03 + 7.451234399649871202841615e+02i),
  231. (-4.893811726244659135553033e+01 - 5.371469305562194635957655e+01i),
  232. }
  233. var sinh = []complex128{
  234. (8.34559353341652565758198e+00 + 7.2187893208650790476628899e+01i),
  235. (1.1042192548260646752051112e+03 - 3.1379650595631635858792056e+02i),
  236. (-8.239469336509264113041849e-02 + 9.9273668758439489098514519e-01i),
  237. (7.332295456982297798219401e+01 - 1.574585908122833444899023e+01i),
  238. (-7.4786432301380582103534216e+03 + 1.63483823493980029604071e+03i),
  239. (4.595842179016870234028347e+00 - 8.135290105518580753211484e+00i),
  240. (-8.543842533574163435246793e+01 + 3.750798997857594068272375e+01i),
  241. (-1.918003500809465688017307e+00 + 7.4358344619793504041350251e+00i),
  242. (-2.233816733239658031433147e+00 - 2.143519070805995056229335e+00i),
  243. (-7.797564130187551181105341e+02 - 2.8549352346594918614806877e+03i),
  244. }
  245. var sqrt = []complex128{
  246. (2.6628203086086130543813948e+00 + 1.4531345674282185229796902e+00i),
  247. (2.7823278427251986247149295e+00 - 4.9756907317005224529115567e-02i),
  248. (1.5397025302089642757361015e+00 - 1.6271336573016637535695727e+00i),
  249. (1.7103411581506875260277898e+00 + 2.8170677122737589676157029e+00i),
  250. (3.1390392472953103383607947e+00 + 4.6612625849858653248980849e-01i),
  251. (2.1117080764822417640789287e+00 + 1.2381170223514273234967850e+00i),
  252. (2.3587032281672256703926939e+00 + 5.7827111903257349935720172e-01i),
  253. (1.7335262588873410476661577e+00 + 5.2647258220721269141550382e-01i),
  254. (2.3131094974708716531499282e+00 - 1.8775429304303785570775490e+00i),
  255. (8.1420535745048086240947359e-01 + 3.0575897587277248522656113e+00i),
  256. }
  257. var tan = []complex128{
  258. (-1.928757919086441129134525e-07 + 1.0000003267499169073251826e+00i),
  259. (1.242412685364183792138948e+00 - 3.17149693883133370106696e+00i),
  260. (-4.6745126251587795225571826e-05 - 9.9992439225263959286114298e-01i),
  261. (4.792363401193648192887116e-09 + 1.0000000070589333451557723e+00i),
  262. (2.345740824080089140287315e-03 + 9.947733046570988661022763e-01i),
  263. (-2.396030789494815566088809e-05 + 9.9994781345418591429826779e-01i),
  264. (-7.370204836644931340905303e-03 + 1.0043553413417138987717748e+00i),
  265. (-3.691803847992048527007457e-02 + 9.6475071993469548066328894e-01i),
  266. (-2.781955256713729368401878e-08 - 1.000000049848910609006646e+00i),
  267. (9.4281590064030478879791249e-05 + 9.9999119340863718183758545e-01i),
  268. }
  269. var tanh = []complex128{
  270. (1.0000921981225144748819918e+00 + 2.160986245871518020231507e-05i),
  271. (9.9999967727531993209562591e-01 - 1.9953763222959658873657676e-07i),
  272. (-1.765485739548037260789686e+00 + 1.7024216325552852445168471e+00i),
  273. (-9.999189442732736452807108e-01 + 3.64906070494473701938098e-05i),
  274. (9.9999999224622333738729767e-01 - 3.560088949517914774813046e-09i),
  275. (1.0029324933367326862499343e+00 - 4.948790309797102353137528e-03i),
  276. (9.9996113064788012488693567e-01 - 4.226995742097032481451259e-05i),
  277. (1.0074784189316340029873945e+00 - 4.194050814891697808029407e-03i),
  278. (9.9385534229718327109131502e-01 + 5.144217985914355502713437e-02i),
  279. (-1.0000000491604982429364892e+00 - 2.901873195374433112227349e-08i),
  280. }
  281. // special cases
  282. var vcAbsSC = []complex128{
  283. NaN(),
  284. }
  285. var absSC = []float64{
  286. math.NaN(),
  287. }
  288. var vcAcosSC = []complex128{
  289. NaN(),
  290. }
  291. var acosSC = []complex128{
  292. NaN(),
  293. }
  294. var vcAcoshSC = []complex128{
  295. NaN(),
  296. }
  297. var acoshSC = []complex128{
  298. NaN(),
  299. }
  300. var vcAsinSC = []complex128{
  301. NaN(),
  302. }
  303. var asinSC = []complex128{
  304. NaN(),
  305. }
  306. var vcAsinhSC = []complex128{
  307. NaN(),
  308. }
  309. var asinhSC = []complex128{
  310. NaN(),
  311. }
  312. var vcAtanSC = []complex128{
  313. NaN(),
  314. }
  315. var atanSC = []complex128{
  316. NaN(),
  317. }
  318. var vcAtanhSC = []complex128{
  319. NaN(),
  320. }
  321. var atanhSC = []complex128{
  322. NaN(),
  323. }
  324. var vcConjSC = []complex128{
  325. NaN(),
  326. }
  327. var conjSC = []complex128{
  328. NaN(),
  329. }
  330. var vcCosSC = []complex128{
  331. NaN(),
  332. }
  333. var cosSC = []complex128{
  334. NaN(),
  335. }
  336. var vcCoshSC = []complex128{
  337. NaN(),
  338. }
  339. var coshSC = []complex128{
  340. NaN(),
  341. }
  342. var vcExpSC = []complex128{
  343. NaN(),
  344. }
  345. var expSC = []complex128{
  346. NaN(),
  347. }
  348. var vcIsNaNSC = []complex128{
  349. complex(math.Inf(-1), math.Inf(-1)),
  350. complex(math.Inf(-1), math.NaN()),
  351. complex(math.NaN(), math.Inf(-1)),
  352. complex(0, math.NaN()),
  353. complex(math.NaN(), 0),
  354. complex(math.Inf(1), math.Inf(1)),
  355. complex(math.Inf(1), math.NaN()),
  356. complex(math.NaN(), math.Inf(1)),
  357. complex(math.NaN(), math.NaN()),
  358. }
  359. var isNaNSC = []bool{
  360. false,
  361. false,
  362. false,
  363. true,
  364. true,
  365. false,
  366. false,
  367. false,
  368. true,
  369. }
  370. var vcLogSC = []complex128{
  371. NaN(),
  372. }
  373. var logSC = []complex128{
  374. NaN(),
  375. }
  376. var vcLog10SC = []complex128{
  377. NaN(),
  378. }
  379. var log10SC = []complex128{
  380. NaN(),
  381. }
  382. var vcPolarSC = []complex128{
  383. NaN(),
  384. }
  385. var polarSC = []ff{
  386. {math.NaN(), math.NaN()},
  387. }
  388. var vcPowSC = [][2]complex128{
  389. {NaN(), NaN()},
  390. }
  391. var powSC = []complex128{
  392. NaN(),
  393. }
  394. var vcSinSC = []complex128{
  395. NaN(),
  396. }
  397. var sinSC = []complex128{
  398. NaN(),
  399. }
  400. var vcSinhSC = []complex128{
  401. NaN(),
  402. }
  403. var sinhSC = []complex128{
  404. NaN(),
  405. }
  406. var vcSqrtSC = []complex128{
  407. NaN(),
  408. }
  409. var sqrtSC = []complex128{
  410. NaN(),
  411. }
  412. var vcTanSC = []complex128{
  413. NaN(),
  414. }
  415. var tanSC = []complex128{
  416. NaN(),
  417. }
  418. var vcTanhSC = []complex128{
  419. NaN(),
  420. }
  421. var tanhSC = []complex128{
  422. NaN(),
  423. }
  424. // functions borrowed from pkg/math/all_test.go
  425. func tolerance(a, b, e float64) bool {
  426. d := a - b
  427. if d < 0 {
  428. d = -d
  429. }
  430. if a != 0 {
  431. e = e * a
  432. if e < 0 {
  433. e = -e
  434. }
  435. }
  436. return d < e
  437. }
  438. func soclose(a, b, e float64) bool { return tolerance(a, b, e) }
  439. func veryclose(a, b float64) bool { return tolerance(a, b, 4e-16) }
  440. func alike(a, b float64) bool {
  441. switch {
  442. case a != a && b != b: // math.IsNaN(a) && math.IsNaN(b):
  443. return true
  444. case a == b:
  445. return math.Signbit(a) == math.Signbit(b)
  446. }
  447. return false
  448. }
  449. func cTolerance(a, b complex128, e float64) bool {
  450. d := Abs(a - b)
  451. if a != 0 {
  452. e = e * Abs(a)
  453. if e < 0 {
  454. e = -e
  455. }
  456. }
  457. return d < e
  458. }
  459. func cSoclose(a, b complex128, e float64) bool { return cTolerance(a, b, e) }
  460. func cVeryclose(a, b complex128) bool { return cTolerance(a, b, 4e-16) }
  461. func cAlike(a, b complex128) bool {
  462. switch {
  463. case IsNaN(a) && IsNaN(b):
  464. return true
  465. case a == b:
  466. return math.Signbit(real(a)) == math.Signbit(real(b)) && math.Signbit(imag(a)) == math.Signbit(imag(b))
  467. }
  468. return false
  469. }
  470. func TestAbs(t *testing.T) {
  471. for i := 0; i < len(vc); i++ {
  472. if f := Abs(vc[i]); !veryclose(abs[i], f) {
  473. t.Errorf("Abs(%g) = %g, want %g", vc[i], f, abs[i])
  474. }
  475. }
  476. for i := 0; i < len(vcAbsSC); i++ {
  477. if f := Abs(vcAbsSC[i]); !alike(absSC[i], f) {
  478. t.Errorf("Abs(%g) = %g, want %g", vcAbsSC[i], f, absSC[i])
  479. }
  480. }
  481. }
  482. func TestAcos(t *testing.T) {
  483. for i := 0; i < len(vc); i++ {
  484. if f := Acos(vc[i]); !cSoclose(acos[i], f, 1e-14) {
  485. t.Errorf("Acos(%g) = %g, want %g", vc[i], f, acos[i])
  486. }
  487. }
  488. for i := 0; i < len(vcAcosSC); i++ {
  489. if f := Acos(vcAcosSC[i]); !cAlike(acosSC[i], f) {
  490. t.Errorf("Acos(%g) = %g, want %g", vcAcosSC[i], f, acosSC[i])
  491. }
  492. }
  493. }
  494. func TestAcosh(t *testing.T) {
  495. for i := 0; i < len(vc); i++ {
  496. if f := Acosh(vc[i]); !cSoclose(acosh[i], f, 1e-14) {
  497. t.Errorf("Acosh(%g) = %g, want %g", vc[i], f, acosh[i])
  498. }
  499. }
  500. for i := 0; i < len(vcAcoshSC); i++ {
  501. if f := Acosh(vcAcoshSC[i]); !cAlike(acoshSC[i], f) {
  502. t.Errorf("Acosh(%g) = %g, want %g", vcAcoshSC[i], f, acoshSC[i])
  503. }
  504. }
  505. }
  506. func TestAsin(t *testing.T) {
  507. for i := 0; i < len(vc); i++ {
  508. if f := Asin(vc[i]); !cSoclose(asin[i], f, 1e-14) {
  509. t.Errorf("Asin(%g) = %g, want %g", vc[i], f, asin[i])
  510. }
  511. }
  512. for i := 0; i < len(vcAsinSC); i++ {
  513. if f := Asin(vcAsinSC[i]); !cAlike(asinSC[i], f) {
  514. t.Errorf("Asin(%g) = %g, want %g", vcAsinSC[i], f, asinSC[i])
  515. }
  516. }
  517. }
  518. func TestAsinh(t *testing.T) {
  519. for i := 0; i < len(vc); i++ {
  520. if f := Asinh(vc[i]); !cSoclose(asinh[i], f, 4e-15) {
  521. t.Errorf("Asinh(%g) = %g, want %g", vc[i], f, asinh[i])
  522. }
  523. }
  524. for i := 0; i < len(vcAsinhSC); i++ {
  525. if f := Asinh(vcAsinhSC[i]); !cAlike(asinhSC[i], f) {
  526. t.Errorf("Asinh(%g) = %g, want %g", vcAsinhSC[i], f, asinhSC[i])
  527. }
  528. }
  529. }
  530. func TestAtan(t *testing.T) {
  531. for i := 0; i < len(vc); i++ {
  532. if f := Atan(vc[i]); !cVeryclose(atan[i], f) {
  533. t.Errorf("Atan(%g) = %g, want %g", vc[i], f, atan[i])
  534. }
  535. }
  536. for i := 0; i < len(vcAtanSC); i++ {
  537. if f := Atan(vcAtanSC[i]); !cAlike(atanSC[i], f) {
  538. t.Errorf("Atan(%g) = %g, want %g", vcAtanSC[i], f, atanSC[i])
  539. }
  540. }
  541. }
  542. func TestAtanh(t *testing.T) {
  543. for i := 0; i < len(vc); i++ {
  544. if f := Atanh(vc[i]); !cVeryclose(atanh[i], f) {
  545. t.Errorf("Atanh(%g) = %g, want %g", vc[i], f, atanh[i])
  546. }
  547. }
  548. for i := 0; i < len(vcAtanhSC); i++ {
  549. if f := Atanh(vcAtanhSC[i]); !cAlike(atanhSC[i], f) {
  550. t.Errorf("Atanh(%g) = %g, want %g", vcAtanhSC[i], f, atanhSC[i])
  551. }
  552. }
  553. }
  554. func TestConj(t *testing.T) {
  555. for i := 0; i < len(vc); i++ {
  556. if f := Conj(vc[i]); !cVeryclose(conj[i], f) {
  557. t.Errorf("Conj(%g) = %g, want %g", vc[i], f, conj[i])
  558. }
  559. }
  560. for i := 0; i < len(vcConjSC); i++ {
  561. if f := Conj(vcConjSC[i]); !cAlike(conjSC[i], f) {
  562. t.Errorf("Conj(%g) = %g, want %g", vcConjSC[i], f, conjSC[i])
  563. }
  564. }
  565. }
  566. func TestCos(t *testing.T) {
  567. for i := 0; i < len(vc); i++ {
  568. if f := Cos(vc[i]); !cSoclose(cos[i], f, 3e-15) {
  569. t.Errorf("Cos(%g) = %g, want %g", vc[i], f, cos[i])
  570. }
  571. }
  572. for i := 0; i < len(vcCosSC); i++ {
  573. if f := Cos(vcCosSC[i]); !cAlike(cosSC[i], f) {
  574. t.Errorf("Cos(%g) = %g, want %g", vcCosSC[i], f, cosSC[i])
  575. }
  576. }
  577. }
  578. func TestCosh(t *testing.T) {
  579. for i := 0; i < len(vc); i++ {
  580. if f := Cosh(vc[i]); !cSoclose(cosh[i], f, 2e-15) {
  581. t.Errorf("Cosh(%g) = %g, want %g", vc[i], f, cosh[i])
  582. }
  583. }
  584. for i := 0; i < len(vcCoshSC); i++ {
  585. if f := Cosh(vcCoshSC[i]); !cAlike(coshSC[i], f) {
  586. t.Errorf("Cosh(%g) = %g, want %g", vcCoshSC[i], f, coshSC[i])
  587. }
  588. }
  589. }
  590. func TestExp(t *testing.T) {
  591. for i := 0; i < len(vc); i++ {
  592. if f := Exp(vc[i]); !cSoclose(exp[i], f, 1e-15) {
  593. t.Errorf("Exp(%g) = %g, want %g", vc[i], f, exp[i])
  594. }
  595. }
  596. for i := 0; i < len(vcExpSC); i++ {
  597. if f := Exp(vcExpSC[i]); !cAlike(expSC[i], f) {
  598. t.Errorf("Exp(%g) = %g, want %g", vcExpSC[i], f, expSC[i])
  599. }
  600. }
  601. }
  602. func TestIsNaN(t *testing.T) {
  603. for i := 0; i < len(vcIsNaNSC); i++ {
  604. if f := IsNaN(vcIsNaNSC[i]); isNaNSC[i] != f {
  605. t.Errorf("IsNaN(%v) = %v, want %v", vcIsNaNSC[i], f, isNaNSC[i])
  606. }
  607. }
  608. }
  609. func TestLog(t *testing.T) {
  610. for i := 0; i < len(vc); i++ {
  611. if f := Log(vc[i]); !cVeryclose(log[i], f) {
  612. t.Errorf("Log(%g) = %g, want %g", vc[i], f, log[i])
  613. }
  614. }
  615. for i := 0; i < len(vcLogSC); i++ {
  616. if f := Log(vcLogSC[i]); !cAlike(logSC[i], f) {
  617. t.Errorf("Log(%g) = %g, want %g", vcLogSC[i], f, logSC[i])
  618. }
  619. }
  620. }
  621. func TestLog10(t *testing.T) {
  622. for i := 0; i < len(vc); i++ {
  623. if f := Log10(vc[i]); !cVeryclose(log10[i], f) {
  624. t.Errorf("Log10(%g) = %g, want %g", vc[i], f, log10[i])
  625. }
  626. }
  627. for i := 0; i < len(vcLog10SC); i++ {
  628. if f := Log10(vcLog10SC[i]); !cAlike(log10SC[i], f) {
  629. t.Errorf("Log10(%g) = %g, want %g", vcLog10SC[i], f, log10SC[i])
  630. }
  631. }
  632. }
  633. func TestPolar(t *testing.T) {
  634. for i := 0; i < len(vc); i++ {
  635. if r, theta := Polar(vc[i]); !veryclose(polar[i].r, r) && !veryclose(polar[i].theta, theta) {
  636. t.Errorf("Polar(%g) = %g, %g want %g, %g", vc[i], r, theta, polar[i].r, polar[i].theta)
  637. }
  638. }
  639. for i := 0; i < len(vcPolarSC); i++ {
  640. if r, theta := Polar(vcPolarSC[i]); !alike(polarSC[i].r, r) && !alike(polarSC[i].theta, theta) {
  641. t.Errorf("Polar(%g) = %g, %g, want %g, %g", vcPolarSC[i], r, theta, polarSC[i].r, polarSC[i].theta)
  642. }
  643. }
  644. }
  645. func TestPow(t *testing.T) {
  646. // Special cases for Pow(0, c).
  647. var zero = complex(0, 0)
  648. zeroPowers := [][2]complex128{
  649. {0, 1 + 0i},
  650. {1.5, 0 + 0i},
  651. {-1.5, complex(math.Inf(0), 0)},
  652. {-1.5 + 1.5i, Inf()},
  653. }
  654. for _, zp := range zeroPowers {
  655. if f := Pow(zero, zp[0]); f != zp[1] {
  656. t.Errorf("Pow(%g, %g) = %g, want %g", zero, zp[0], f, zp[1])
  657. }
  658. }
  659. var a = complex(3.0, 3.0)
  660. for i := 0; i < len(vc); i++ {
  661. if f := Pow(a, vc[i]); !cSoclose(pow[i], f, 4e-15) {
  662. t.Errorf("Pow(%g, %g) = %g, want %g", a, vc[i], f, pow[i])
  663. }
  664. }
  665. for i := 0; i < len(vcPowSC); i++ {
  666. if f := Pow(vcPowSC[i][0], vcPowSC[i][0]); !cAlike(powSC[i], f) {
  667. t.Errorf("Pow(%g, %g) = %g, want %g", vcPowSC[i][0], vcPowSC[i][0], f, powSC[i])
  668. }
  669. }
  670. }
  671. func TestRect(t *testing.T) {
  672. for i := 0; i < len(vc); i++ {
  673. if f := Rect(polar[i].r, polar[i].theta); !cVeryclose(vc[i], f) {
  674. t.Errorf("Rect(%g, %g) = %g want %g", polar[i].r, polar[i].theta, f, vc[i])
  675. }
  676. }
  677. for i := 0; i < len(vcPolarSC); i++ {
  678. if f := Rect(polarSC[i].r, polarSC[i].theta); !cAlike(vcPolarSC[i], f) {
  679. t.Errorf("Rect(%g, %g) = %g, want %g", polarSC[i].r, polarSC[i].theta, f, vcPolarSC[i])
  680. }
  681. }
  682. }
  683. func TestSin(t *testing.T) {
  684. for i := 0; i < len(vc); i++ {
  685. if f := Sin(vc[i]); !cSoclose(sin[i], f, 2e-15) {
  686. t.Errorf("Sin(%g) = %g, want %g", vc[i], f, sin[i])
  687. }
  688. }
  689. for i := 0; i < len(vcSinSC); i++ {
  690. if f := Sin(vcSinSC[i]); !cAlike(sinSC[i], f) {
  691. t.Errorf("Sin(%g) = %g, want %g", vcSinSC[i], f, sinSC[i])
  692. }
  693. }
  694. }
  695. func TestSinh(t *testing.T) {
  696. for i := 0; i < len(vc); i++ {
  697. if f := Sinh(vc[i]); !cSoclose(sinh[i], f, 2e-15) {
  698. t.Errorf("Sinh(%g) = %g, want %g", vc[i], f, sinh[i])
  699. }
  700. }
  701. for i := 0; i < len(vcSinhSC); i++ {
  702. if f := Sinh(vcSinhSC[i]); !cAlike(sinhSC[i], f) {
  703. t.Errorf("Sinh(%g) = %g, want %g", vcSinhSC[i], f, sinhSC[i])
  704. }
  705. }
  706. }
  707. func TestSqrt(t *testing.T) {
  708. for i := 0; i < len(vc); i++ {
  709. if f := Sqrt(vc[i]); !cVeryclose(sqrt[i], f) {
  710. t.Errorf("Sqrt(%g) = %g, want %g", vc[i], f, sqrt[i])
  711. }
  712. }
  713. for i := 0; i < len(vcSqrtSC); i++ {
  714. if f := Sqrt(vcSqrtSC[i]); !cAlike(sqrtSC[i], f) {
  715. t.Errorf("Sqrt(%g) = %g, want %g", vcSqrtSC[i], f, sqrtSC[i])
  716. }
  717. }
  718. }
  719. func TestTan(t *testing.T) {
  720. for i := 0; i < len(vc); i++ {
  721. if f := Tan(vc[i]); !cSoclose(tan[i], f, 3e-15) {
  722. t.Errorf("Tan(%g) = %g, want %g", vc[i], f, tan[i])
  723. }
  724. }
  725. for i := 0; i < len(vcTanSC); i++ {
  726. if f := Tan(vcTanSC[i]); !cAlike(tanSC[i], f) {
  727. t.Errorf("Tan(%g) = %g, want %g", vcTanSC[i], f, tanSC[i])
  728. }
  729. }
  730. }
  731. func TestTanh(t *testing.T) {
  732. for i := 0; i < len(vc); i++ {
  733. if f := Tanh(vc[i]); !cSoclose(tanh[i], f, 2e-15) {
  734. t.Errorf("Tanh(%g) = %g, want %g", vc[i], f, tanh[i])
  735. }
  736. }
  737. for i := 0; i < len(vcTanhSC); i++ {
  738. if f := Tanh(vcTanhSC[i]); !cAlike(tanhSC[i], f) {
  739. t.Errorf("Tanh(%g) = %g, want %g", vcTanhSC[i], f, tanhSC[i])
  740. }
  741. }
  742. }
  743. func BenchmarkAbs(b *testing.B) {
  744. for i := 0; i < b.N; i++ {
  745. Abs(complex(2.5, 3.5))
  746. }
  747. }
  748. func BenchmarkAcos(b *testing.B) {
  749. for i := 0; i < b.N; i++ {
  750. Acos(complex(2.5, 3.5))
  751. }
  752. }
  753. func BenchmarkAcosh(b *testing.B) {
  754. for i := 0; i < b.N; i++ {
  755. Acosh(complex(2.5, 3.5))
  756. }
  757. }
  758. func BenchmarkAsin(b *testing.B) {
  759. for i := 0; i < b.N; i++ {
  760. Asin(complex(2.5, 3.5))
  761. }
  762. }
  763. func BenchmarkAsinh(b *testing.B) {
  764. for i := 0; i < b.N; i++ {
  765. Asinh(complex(2.5, 3.5))
  766. }
  767. }
  768. func BenchmarkAtan(b *testing.B) {
  769. for i := 0; i < b.N; i++ {
  770. Atan(complex(2.5, 3.5))
  771. }
  772. }
  773. func BenchmarkAtanh(b *testing.B) {
  774. for i := 0; i < b.N; i++ {
  775. Atanh(complex(2.5, 3.5))
  776. }
  777. }
  778. func BenchmarkConj(b *testing.B) {
  779. for i := 0; i < b.N; i++ {
  780. Conj(complex(2.5, 3.5))
  781. }
  782. }
  783. func BenchmarkCos(b *testing.B) {
  784. for i := 0; i < b.N; i++ {
  785. Cos(complex(2.5, 3.5))
  786. }
  787. }
  788. func BenchmarkCosh(b *testing.B) {
  789. for i := 0; i < b.N; i++ {
  790. Cosh(complex(2.5, 3.5))
  791. }
  792. }
  793. func BenchmarkExp(b *testing.B) {
  794. for i := 0; i < b.N; i++ {
  795. Exp(complex(2.5, 3.5))
  796. }
  797. }
  798. func BenchmarkLog(b *testing.B) {
  799. for i := 0; i < b.N; i++ {
  800. Log(complex(2.5, 3.5))
  801. }
  802. }
  803. func BenchmarkLog10(b *testing.B) {
  804. for i := 0; i < b.N; i++ {
  805. Log10(complex(2.5, 3.5))
  806. }
  807. }
  808. func BenchmarkPhase(b *testing.B) {
  809. for i := 0; i < b.N; i++ {
  810. Phase(complex(2.5, 3.5))
  811. }
  812. }
  813. func BenchmarkPolar(b *testing.B) {
  814. for i := 0; i < b.N; i++ {
  815. Polar(complex(2.5, 3.5))
  816. }
  817. }
  818. func BenchmarkPow(b *testing.B) {
  819. for i := 0; i < b.N; i++ {
  820. Pow(complex(2.5, 3.5), complex(2.5, 3.5))
  821. }
  822. }
  823. func BenchmarkRect(b *testing.B) {
  824. for i := 0; i < b.N; i++ {
  825. Rect(2.5, 1.5)
  826. }
  827. }
  828. func BenchmarkSin(b *testing.B) {
  829. for i := 0; i < b.N; i++ {
  830. Sin(complex(2.5, 3.5))
  831. }
  832. }
  833. func BenchmarkSinh(b *testing.B) {
  834. for i := 0; i < b.N; i++ {
  835. Sinh(complex(2.5, 3.5))
  836. }
  837. }
  838. func BenchmarkSqrt(b *testing.B) {
  839. for i := 0; i < b.N; i++ {
  840. Sqrt(complex(2.5, 3.5))
  841. }
  842. }
  843. func BenchmarkTan(b *testing.B) {
  844. for i := 0; i < b.N; i++ {
  845. Tan(complex(2.5, 3.5))
  846. }
  847. }
  848. func BenchmarkTanh(b *testing.B) {
  849. for i := 0; i < b.N; i++ {
  850. Tanh(complex(2.5, 3.5))
  851. }
  852. }