|
- /*****************************************************************************
- Copyright (c) 2011-2016, The OpenBLAS Project
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- 3. Neither the name of the OpenBLAS project nor the names of
- its contributors may be used to endorse or promote products
- derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- **********************************************************************************/
-
- #include "openblas_utest.h"
- #if defined(ARCH_LOONGARCH64)
- #pragma GCC optimize("no-gcse")
- #endif
- /*
- void BLASFUNC(cpotrf)(char*, BLASINT*, complex float*, BLASINT*, BLASINT*);
- void BLASFUNC(zpotrs_(char*, BLASINT*, BLASINT*, complex double*,
- BLASINT*, complex double*, BLASINT*, BLASINT*);
- */
-
- //https://github.com/xianyi/OpenBLAS/issues/695
- CTEST(potrf, bug_695){
-
- openblas_complex_float A1[100] =
- {
- openblas_make_complex_float(5.8525753, +0.0),
- openblas_make_complex_float(-0.79540455, -0.7066077),
- openblas_make_complex_float(0.98274714, -1.3824869),
- openblas_make_complex_float(2.619998, -1.8532984),
- openblas_make_complex_float(-1.8306153, +1.2336911),
- openblas_make_complex_float(0.32275113, -0.015575029),
- openblas_make_complex_float(2.1968813, -1.0640624),
- openblas_make_complex_float(0.27894387, -0.97911835),
- openblas_make_complex_float(3.0476584, -0.18548489),
- openblas_make_complex_float(0.3842994, -0.7050991),
- openblas_make_complex_float(-0.79540455, +0.7066077),
- openblas_make_complex_float(8.313246, +0.0),
- openblas_make_complex_float(-1.8076122, +0.8882447),
- openblas_make_complex_float(0.47806996, -0.48494184),
- openblas_make_complex_float(0.5096429, +0.5395974),
- openblas_make_complex_float(-0.7285097, +0.10360408),
- openblas_make_complex_float(-1.1760061, +2.7146957),
- openblas_make_complex_float(-0.4271084, -0.042899966),
- openblas_make_complex_float(-1.7228563, -2.8335886),
- openblas_make_complex_float(1.8942566, -0.6389735),
- openblas_make_complex_float(0.98274714, +1.3824869),
- openblas_make_complex_float(-1.8076122, -0.8882447),
- openblas_make_complex_float(9.367975, +0.0),
- openblas_make_complex_float(-0.1838578, -0.6468568),
- openblas_make_complex_float(-1.8338387, -0.7064959),
- openblas_make_complex_float(0.041852742, +0.6556877),
- openblas_make_complex_float(2.5673025, -1.9732997),
- openblas_make_complex_float(-1.1148382, +0.15693812),
- openblas_make_complex_float(2.4704504, +1.0389464),
- openblas_make_complex_float(1.0858271, +1.298006),
- openblas_make_complex_float(2.619998, +1.8532984),
- openblas_make_complex_float(0.47806996, +0.48494184),
- openblas_make_complex_float(-0.1838578, +0.6468568),
- openblas_make_complex_float(3.1117508, +0.0),
- openblas_make_complex_float(-1.956626, -0.22825956),
- openblas_make_complex_float(0.07081801, +0.31801307),
- openblas_make_complex_float(0.3698375, +0.5400855),
- openblas_make_complex_float(0.80686307, -1.5315914),
- openblas_make_complex_float(1.5649154, +1.6229297),
- openblas_make_complex_float(-0.112077385, -1.2014246),
- openblas_make_complex_float(-1.8306153, -1.2336911),
- openblas_make_complex_float(0.5096429, -0.5395974),
- openblas_make_complex_float(-1.8338387, +0.7064959),
- openblas_make_complex_float(-1.956626, +0.22825956),
- openblas_make_complex_float(3.6439795, +0.0),
- openblas_make_complex_float(-0.2594722, -0.48786148),
- openblas_make_complex_float(-0.47636223, +0.27821827),
- openblas_make_complex_float(-0.61608654, +2.01858),
- openblas_make_complex_float(-2.7767487, -1.7693765),
- openblas_make_complex_float(0.048102796, +0.9741874),
- openblas_make_complex_float(0.32275113, +0.015575029),
- openblas_make_complex_float(-0.7285097, -0.10360408),
- openblas_make_complex_float(0.041852742, -0.6556877),
- openblas_make_complex_float(0.07081801, -0.31801307),
- openblas_make_complex_float(-0.2594722, +0.48786148),
- openblas_make_complex_float(3.624376, +0.0),
- openblas_make_complex_float(-1.6697118, -0.4017511),
- openblas_make_complex_float(-1.4397877, +0.7550918),
- openblas_make_complex_float(-0.31456697, +1.0403451),
- openblas_make_complex_float(-0.31978557, -0.13701046),
- openblas_make_complex_float(2.1968813, +1.0640624),
- openblas_make_complex_float(-1.1760061, -2.7146957),
- openblas_make_complex_float(2.5673025, +1.9732997),
- openblas_make_complex_float(0.3698375, -0.5400855),
- openblas_make_complex_float(-0.47636223, -0.27821827),
- openblas_make_complex_float(-1.6697118, +0.4017511),
- openblas_make_complex_float(6.8273163, +0.0),
- openblas_make_complex_float(-0.10051322, -0.24303961),
- openblas_make_complex_float(1.4415971, -0.29750675),
- openblas_make_complex_float(1.221786, +0.85654986),
- openblas_make_complex_float(0.27894387, +0.97911835),
- openblas_make_complex_float(-0.4271084, +0.042899966),
- openblas_make_complex_float(-1.1148382, -0.15693812),
- openblas_make_complex_float(0.80686307, +1.5315914),
- openblas_make_complex_float(-0.61608654, -2.01858),
- openblas_make_complex_float(-1.4397877, -0.7550918),
- openblas_make_complex_float(-0.10051322, +0.24303961),
- openblas_make_complex_float(3.4057708, +0.0),
- openblas_make_complex_float(-0.5856801, +1.0203559),
- openblas_make_complex_float(0.7103452, -0.8422135),
- openblas_make_complex_float(3.0476584, +0.18548489),
- openblas_make_complex_float(-1.7228563, +2.8335886),
- openblas_make_complex_float(2.4704504, -1.0389464),
- openblas_make_complex_float(1.5649154, -1.6229297),
- openblas_make_complex_float(-2.7767487, +1.7693765),
- openblas_make_complex_float(-0.31456697, -1.0403451),
- openblas_make_complex_float(1.4415971, +0.29750675),
- openblas_make_complex_float(-0.5856801, -1.0203559),
- openblas_make_complex_float(7.005772, +0.0),
- openblas_make_complex_float(-0.9617417, +1.2486815),
- openblas_make_complex_float(0.3842994, +0.7050991),
- openblas_make_complex_float(1.8942566, +0.6389735),
- openblas_make_complex_float(1.0858271, -1.298006),
- openblas_make_complex_float(-0.112077385, +1.2014246),
- openblas_make_complex_float(0.048102796, -0.9741874),
- openblas_make_complex_float(-0.31978557, +0.13701046),
- openblas_make_complex_float(1.221786, -0.85654986),
- openblas_make_complex_float(0.7103452, +0.8422135),
- openblas_make_complex_float(-0.9617417, -1.2486815),
- openblas_make_complex_float(3.4629636, +0.0)
- };
-
- char up = 'U';
-
- blasint n=10;
- blasint info[1];
- #ifdef BUILD_COMPLEX
- BLASFUNC(cpotrf)(&up, &n, (float*)(A1), &n, info);
- //printf("%g+%g*I\n", creal(A1[91]), cimag(A1[91]));
- #endif
-
- openblas_complex_double A2[100] =
- {
- openblas_make_complex_double(3.0607147216796875, +0.0),
- openblas_make_complex_double(-0.5905849933624268, -0.29020825028419495),
- openblas_make_complex_double(0.321084201335907, +0.45168760418891907),
- openblas_make_complex_double(0.8387917876243591, -0.644718587398529),
- openblas_make_complex_double(-0.3642411530017853, +0.051274992525577545),
- openblas_make_complex_double(0.8071482181549072, +0.33944568037986755),
- openblas_make_complex_double(0.013674172572791576, +0.21422699093818665),
- openblas_make_complex_double(0.35476258397102356, +0.42408594489097595),
- openblas_make_complex_double(-0.5991537570953369, -0.23082709312438965),
- openblas_make_complex_double(-0.0600702166557312, -0.2113417387008667),
- openblas_make_complex_double(-0.7954045534133911, +0.7066076993942261),
- openblas_make_complex_double(2.807175397872925, +0.0),
- openblas_make_complex_double(-0.1691000759601593, +0.313548743724823),
- openblas_make_complex_double(-0.30911174416542053, +0.7447023987770081),
- openblas_make_complex_double(-0.22347848117351532, +0.03316075727343559),
- openblas_make_complex_double(-0.4088296890258789, -1.0214389562606812),
- openblas_make_complex_double(-0.2344931811094284, +0.08056317269802094),
- openblas_make_complex_double(0.793269693851471, -0.17507623136043549),
- openblas_make_complex_double(0.03163455054163933, +0.20559945702552795),
- openblas_make_complex_double(0.13581633567810059, -0.2110036462545395),
- openblas_make_complex_double(0.9827471375465393, +1.3824869394302368),
- openblas_make_complex_double(-1.8076121807098389, -0.8882446885108948),
- openblas_make_complex_double(2.3277781009674072, +0.0),
- openblas_make_complex_double(0.830405056476593, -0.19296252727508545),
- openblas_make_complex_double(0.1394239068031311, -0.5260677933692932),
- openblas_make_complex_double(1.239942193031311, -0.09915469586849213),
- openblas_make_complex_double(0.06731037050485611, -0.059320636093616486),
- openblas_make_complex_double(0.11507681757211685, -0.1984301060438156),
- openblas_make_complex_double(-0.6843825578689575, +0.4647614359855652),
- openblas_make_complex_double(1.213119387626648, -0.7757048010826111),
- openblas_make_complex_double(2.619997978210449, +1.8532984256744385),
- openblas_make_complex_double(0.4780699610710144, +0.48494184017181396),
- openblas_make_complex_double(-0.18385779857635498, +0.6468567848205566),
- openblas_make_complex_double(2.0811400413513184, +0.0),
- openblas_make_complex_double(-0.035075582563877106, +0.09732913225889206),
- openblas_make_complex_double(0.27337002754211426, -0.9032229781150818),
- openblas_make_complex_double(-0.8374675512313843, +0.0479498989880085),
- openblas_make_complex_double(0.6916252374649048, +0.45711082220077515),
- openblas_make_complex_double(0.1883818507194519, +0.06482727080583572),
- openblas_make_complex_double(-0.32384994626045227, +0.05857187137007713),
- openblas_make_complex_double(-1.8306152820587158, -1.2336910963058472),
- openblas_make_complex_double(0.5096428990364075, -0.5395973920822144),
- openblas_make_complex_double(-1.833838701248169, +0.7064958810806274),
- openblas_make_complex_double(-1.956626057624817, +0.22825956344604492),
- openblas_make_complex_double(1.706615924835205, +0.0),
- openblas_make_complex_double(-0.2895336151123047, +0.17579378187656403),
- openblas_make_complex_double(-0.923172116279602, -0.4530014097690582),
- openblas_make_complex_double(0.5040621757507324, -0.37026339769363403),
- openblas_make_complex_double(-0.2824432849884033, -1.0374568700790405),
- openblas_make_complex_double(0.1399831622838974, +0.4977008104324341),
- openblas_make_complex_double(0.32275113463401794, +0.015575028955936432),
- openblas_make_complex_double(-0.7285097241401672, -0.10360407829284668),
- openblas_make_complex_double(0.041852742433547974, -0.655687689781189),
- openblas_make_complex_double(0.07081800699234009, -0.318013072013855),
- openblas_make_complex_double(-0.25947219133377075, +0.4878614842891693),
- openblas_make_complex_double(1.5735365152359009, +0.0),
- openblas_make_complex_double(-0.2647853195667267, -0.26654252409935),
- openblas_make_complex_double(-0.6190430521965027, -0.24699924886226654),
- openblas_make_complex_double(-0.6288471221923828, +0.48154571652412415),
- openblas_make_complex_double(0.02446540631353855, -0.2611822783946991),
- openblas_make_complex_double(2.1968812942504883, +1.0640623569488525),
- openblas_make_complex_double(-1.1760060787200928, -2.714695692062378),
- openblas_make_complex_double(2.5673024654388428, +1.9732997417449951),
- openblas_make_complex_double(0.3698374927043915, -0.54008549451828),
- openblas_make_complex_double(-0.4763622283935547, -0.27821826934814453),
- openblas_make_complex_double(-1.6697118282318115, +0.4017511010169983),
- openblas_make_complex_double(1.2674795389175415, +0.0),
- openblas_make_complex_double(0.3079095482826233, -0.07258892804384232),
- openblas_make_complex_double(-0.5929520130157471, -0.038360968232154846),
- openblas_make_complex_double(0.04388086497783661, -0.025549031794071198),
- openblas_make_complex_double(0.27894386649131775, +0.9791183471679688),
- openblas_make_complex_double(-0.42710840702056885, +0.0428999662399292),
- openblas_make_complex_double(-1.1148382425308228, -0.1569381207227707),
- openblas_make_complex_double(0.8068630695343018, +1.5315914154052734),
- openblas_make_complex_double(-0.6160865426063538, -2.0185799598693848),
- openblas_make_complex_double(-1.439787745475769, -0.7550917863845825),
- openblas_make_complex_double(-0.10051321983337402, +0.24303960800170898),
- openblas_make_complex_double(0.9066106081008911, +0.0),
- openblas_make_complex_double(0.05315789580345154, -0.06136537343263626),
- openblas_make_complex_double(-0.21304509043693542, +0.6494344472885132),
- openblas_make_complex_double(3.0476584434509277, +0.1854848861694336),
- openblas_make_complex_double(-1.7228562831878662, +2.8335886001586914),
- openblas_make_complex_double(2.4704504013061523, -1.0389463901519775),
- openblas_make_complex_double(1.564915418624878, -1.6229296922683716),
- openblas_make_complex_double(-2.7767486572265625, +1.769376516342163),
- openblas_make_complex_double(-0.314566969871521, -1.0403450727462769),
- openblas_make_complex_double(1.4415971040725708, +0.29750674962997437),
- openblas_make_complex_double(-0.5856801271438599, -1.0203559398651123),
- openblas_make_complex_double(0.5668219923973083, +0.0),
- openblas_make_complex_double(0.033351436257362366, -0.07832501083612442),
- openblas_make_complex_double(0.3842993974685669, +0.7050991058349609),
- openblas_make_complex_double(1.894256591796875, +0.6389734745025635),
- openblas_make_complex_double(1.085827112197876, -1.2980060577392578),
- openblas_make_complex_double(-0.11207738518714905, +1.2014245986938477),
- openblas_make_complex_double(0.04810279607772827, -0.9741873741149902),
- openblas_make_complex_double(-0.31978556513786316, +0.13701045513153076),
- openblas_make_complex_double(1.2217860221862793, -0.856549859046936),
- openblas_make_complex_double(0.7103452086448669, +0.84221351146698),
- openblas_make_complex_double(-0.9617416858673096, -1.2486815452575684),
- openblas_make_complex_double(0.0756804421544075, +0.0)
- };
- openblas_complex_double B[20] =
- {
- openblas_make_complex_double(-0.21782716937787788, -0.9222220085490986),
- openblas_make_complex_double(-0.7620356655676837, +0.15533508334193666),
- openblas_make_complex_double(-0.905011814118756, +0.2847570854574069),
- openblas_make_complex_double(-0.3451346708401685, +1.076948486041297),
- openblas_make_complex_double(0.25336108035924787, +0.975317836492159),
- openblas_make_complex_double(0.11192755545114, -0.1603741874112385),
- openblas_make_complex_double(-0.20604111555491242, +0.10570814584017311),
- openblas_make_complex_double(-1.0568488936791578, -0.06025820467086475),
- openblas_make_complex_double(-0.6650468984506477, -0.5000967284800251),
- openblas_make_complex_double(-1.0509472322215125, +0.5022165705328413),
- openblas_make_complex_double(-0.727775859267237, +0.50638268521728),
- openblas_make_complex_double(0.39947219167701153, -0.4576746001199889),
- openblas_make_complex_double(-0.7122162951294634, -0.630289556702497),
- openblas_make_complex_double(0.9870834574024372, -0.2825689605519449),
- openblas_make_complex_double(0.0628393808469436, -0.1253397353973715),
- openblas_make_complex_double(0.8439562576196216, +1.0850814110398734),
- openblas_make_complex_double(0.562377322638969, -0.2578030745663871),
- openblas_make_complex_double(0.12696236014017806, -0.09853584666755086),
- openblas_make_complex_double(-0.023682508769195098, +0.18093440285319276),
- openblas_make_complex_double(-0.7264975746431271, +0.31670415674097235)
- };
- char lo = 'L';
- blasint nrhs = 2;
- #ifdef BUILD_COMPLEX16
- BLASFUNC(zpotrs)(&lo, &n, &nrhs, (double*)(A2), &n, (double*)(B), &n, info);
- #endif
- // note that this is exactly equal to A1
- openblas_complex_float A3[100] =
- {
- openblas_make_complex_float(5.8525753, +0.0),
- openblas_make_complex_float(-0.79540455, -0.7066077),
- openblas_make_complex_float(0.98274714, -1.3824869),
- openblas_make_complex_float(2.619998, -1.8532984),
- openblas_make_complex_float(-1.8306153, +1.2336911),
- openblas_make_complex_float(0.32275113, -0.015575029),
- openblas_make_complex_float(2.1968813, -1.0640624),
- openblas_make_complex_float(0.27894387, -0.97911835),
- openblas_make_complex_float(3.0476584, -0.18548489),
- openblas_make_complex_float(0.3842994, -0.7050991),
- openblas_make_complex_float(-0.79540455, +0.7066077),
- openblas_make_complex_float(8.313246, +0.0),
- openblas_make_complex_float(-1.8076122, +0.8882447),
- openblas_make_complex_float(0.47806996, -0.48494184),
- openblas_make_complex_float(0.5096429, +0.5395974),
- openblas_make_complex_float(-0.7285097, +0.10360408),
- openblas_make_complex_float(-1.1760061, +2.7146957),
- openblas_make_complex_float(-0.4271084, -0.042899966),
- openblas_make_complex_float(-1.7228563, -2.8335886),
- openblas_make_complex_float(1.8942566, -0.6389735),
- openblas_make_complex_float(0.98274714, +1.3824869),
- openblas_make_complex_float(-1.8076122, -0.8882447),
- openblas_make_complex_float(9.367975, +0.0),
- openblas_make_complex_float(-0.1838578, -0.6468568),
- openblas_make_complex_float(-1.8338387, -0.7064959),
- openblas_make_complex_float(0.041852742, +0.6556877),
- openblas_make_complex_float(2.5673025, -1.9732997),
- openblas_make_complex_float(-1.1148382, +0.15693812),
- openblas_make_complex_float(2.4704504, +1.0389464),
- openblas_make_complex_float(1.0858271, +1.298006),
- openblas_make_complex_float(2.619998, +1.8532984),
- openblas_make_complex_float(0.47806996, +0.48494184),
- openblas_make_complex_float(-0.1838578, +0.6468568),
- openblas_make_complex_float(3.1117508, +0.0),
- openblas_make_complex_float(-1.956626, -0.22825956),
- openblas_make_complex_float(0.07081801, +0.31801307),
- openblas_make_complex_float(0.3698375, +0.5400855),
- openblas_make_complex_float(0.80686307, -1.5315914),
- openblas_make_complex_float(1.5649154, +1.6229297),
- openblas_make_complex_float(-0.112077385, -1.2014246),
- openblas_make_complex_float(-1.8306153, -1.2336911),
- openblas_make_complex_float(0.5096429, -0.5395974),
- openblas_make_complex_float(-1.8338387, +0.7064959),
- openblas_make_complex_float(-1.956626, +0.22825956),
- openblas_make_complex_float(3.6439795, +0.0),
- openblas_make_complex_float(-0.2594722, -0.48786148),
- openblas_make_complex_float(-0.47636223, +0.27821827),
- openblas_make_complex_float(-0.61608654, +2.01858),
- openblas_make_complex_float(-2.7767487, -1.7693765),
- openblas_make_complex_float(0.048102796, +0.9741874),
- openblas_make_complex_float(0.32275113, +0.015575029),
- openblas_make_complex_float(-0.7285097, -0.10360408),
- openblas_make_complex_float(0.041852742, -0.6556877),
- openblas_make_complex_float(0.07081801, -0.31801307),
- openblas_make_complex_float(-0.2594722, +0.48786148),
- openblas_make_complex_float(3.624376, +0.0),
- openblas_make_complex_float(-1.6697118, -0.4017511),
- openblas_make_complex_float(-1.4397877, +0.7550918),
- openblas_make_complex_float(-0.31456697, +1.0403451),
- openblas_make_complex_float(-0.31978557, -0.13701046),
- openblas_make_complex_float(2.1968813, +1.0640624),
- openblas_make_complex_float(-1.1760061, -2.7146957),
- openblas_make_complex_float(2.5673025, +1.9732997),
- openblas_make_complex_float(0.3698375, -0.5400855),
- openblas_make_complex_float(-0.47636223, -0.27821827),
- openblas_make_complex_float(-1.6697118, +0.4017511),
- openblas_make_complex_float(6.8273163, +0.0),
- openblas_make_complex_float(-0.10051322, -0.24303961),
- openblas_make_complex_float(1.4415971, -0.29750675),
- openblas_make_complex_float(1.221786, +0.85654986),
- openblas_make_complex_float(0.27894387, +0.97911835),
- openblas_make_complex_float(-0.4271084, +0.042899966),
- openblas_make_complex_float(-1.1148382, -0.15693812),
- openblas_make_complex_float(0.80686307, +1.5315914),
- openblas_make_complex_float(-0.61608654, -2.01858),
- openblas_make_complex_float(-1.4397877, -0.7550918),
- openblas_make_complex_float(-0.10051322, +0.24303961),
- openblas_make_complex_float(3.4057708, +0.0),
- openblas_make_complex_float(-0.5856801, +1.0203559),
- openblas_make_complex_float(0.7103452, -0.8422135),
- openblas_make_complex_float(3.0476584, +0.18548489),
- openblas_make_complex_float(-1.7228563, +2.8335886),
- openblas_make_complex_float(2.4704504, -1.0389464),
- openblas_make_complex_float(1.5649154, -1.6229297),
- openblas_make_complex_float(-2.7767487, +1.7693765),
- openblas_make_complex_float(-0.31456697, -1.0403451),
- openblas_make_complex_float(1.4415971, +0.29750675),
- openblas_make_complex_float(-0.5856801, -1.0203559),
- openblas_make_complex_float(7.005772, +0.0),
- openblas_make_complex_float(-0.9617417, +1.2486815),
- openblas_make_complex_float(0.3842994, +0.7050991),
- openblas_make_complex_float(1.8942566, +0.6389735),
- openblas_make_complex_float(1.0858271, -1.298006),
- openblas_make_complex_float(-0.112077385, +1.2014246),
- openblas_make_complex_float(0.048102796, -0.9741874),
- openblas_make_complex_float(-0.31978557, +0.13701046),
- openblas_make_complex_float(1.221786, -0.85654986),
- openblas_make_complex_float(0.7103452, +0.8422135),
- openblas_make_complex_float(-0.9617417, -1.2486815),
- openblas_make_complex_float(3.4629636, +0.0)
- };
- #ifdef BUILD_COMPLEX
- BLASFUNC(cpotrf)(&up, &n, (float*)(A3), &n, info);
- // printf("%g+%g*I\n", creal(A3[91]), cimag(A3[91]));
- if(isnan(CREAL(A3[91])) || isnan(CIMAG(A3[91]))) {
- CTEST_ERR("%s:%d got NaN", __FILE__, __LINE__);
- }
- #endif
- }
-
- // Check potrf factorizes a small problem correctly
- CTEST(potrf, smoketest_trivial){
- float A1s[4] = {2, 0.3, 0.3, 3};
- double A1d[4] = {2, 0.3, 0.3, 3};
- openblas_complex_float A1c[4] = {
- openblas_make_complex_float(2,0),
- openblas_make_complex_float(0.3,0.1),
- openblas_make_complex_float(0.3,-0.1),
- openblas_make_complex_float(3,0)
- };
- openblas_complex_double A1z[4] = {
- openblas_make_complex_double(2,0),
- openblas_make_complex_double(0.3,0.1),
- openblas_make_complex_double(0.3,-0.1),
- openblas_make_complex_double(3,0)
- };
- float zeros = 0, ones = 1;
- double zerod = 0, oned = 1;
- openblas_complex_float zeroc = openblas_make_complex_float(0, 0),
- onec = openblas_make_complex_float(1, 0);
- openblas_complex_double zeroz = openblas_make_complex_double(0, 0),
- onez = openblas_make_complex_float(1, 0);
-
- char uplo, trans1, trans2;
- blasint nv = 4;
- blasint n = 2;
- blasint inc = 1;
- blasint info = 0;
- int i, j, cycle;
-
- float As[4], Bs[4];
- double Ad[4], Bd[4];
- openblas_complex_float Ac[4], Bc[4];
- openblas_complex_double Az[4], Bz[4];
-
- for (cycle = 0; cycle < 2; ++cycle) {
- if (cycle == 0) {
- uplo = 'L';
- }
- else {
- uplo = 'U';
- }
-
- #ifdef BUILD_SINGLE
- BLASFUNC(scopy)(&nv, A1s, &inc, As, &inc);
- #endif
- #ifdef BUILD_DOUBLE
- BLASFUNC(dcopy)(&nv, A1d, &inc, Ad, &inc);
- #endif
- #ifdef BUILD_COMPLEX
- BLASFUNC(ccopy)(&nv, (float *)A1c, &inc, (float *)Ac, &inc);
- #endif
- #ifdef BUILD_COMPLEX16
- BLASFUNC(zcopy)(&nv, (double *)A1z, &inc, (double *)Az, &inc);
- #endif
-
- #ifdef BUILD_SINGLE
- BLASFUNC(spotrf)(&uplo, &n, As, &n, &info);
- if (info != 0) {
- CTEST_ERR("%s:%d info != 0", __FILE__, __LINE__);
- }
- #endif
- #ifdef BUILD_DOUBLE
- BLASFUNC(dpotrf)(&uplo, &n, Ad, &n, &info);
- if (info != 0) {
- CTEST_ERR("%s:%d info != 0", __FILE__, __LINE__);
- }
- #endif
- #ifdef BUILD_COMPLEX
- BLASFUNC(cpotrf)(&uplo, &n, (float *)Ac, &n, &info);
- if (info != 0) {
- CTEST_ERR("%s:%d info != 0", __FILE__, __LINE__);
- }
- #endif
- #ifdef BUILD_COMPLEX16
- BLASFUNC(zpotrf)(&uplo, &n, (double *)Az, &n, &info);
- if (info != 0) {
- CTEST_ERR("%s:%d info != 0", __FILE__, __LINE__);
- }
- #endif
- /* Fill the other triangle */
- if (uplo == 'L') {
- for (i = 0; i < n; ++i) {
- for (j = i+1; j < n; ++j) {
- As[i+n*j] = 0;
- Ad[i+n*j] = 0;
- Ac[i+n*j] = zeroc;
- Az[i+n*j] = zeroz;
- }
- }
- }
- else {
- for (i = 0; i < n; ++i) {
- for (j = 0; j < i; ++j) {
- As[i+n*j] = 0;
- Ad[i+n*j] = 0;
- Ac[i+n*j] = zeroc;
- Az[i+n*j] = zeroz;
- }
- }
- }
-
- /* B = A A^H or A^H A */
- if (uplo == 'L') {
- trans1 = 'N';
- trans2 = 'C';
- }
- else {
- trans1 = 'C';
- trans2 = 'N';
- }
- #ifdef BUILD_SINGLE
- BLASFUNC(sgemm)(&trans1, &trans2, &n, &n, &n, &ones, As, &n, As, &n, &zeros, Bs, &n);
- #endif
- #ifdef BUILD_DOUBLE
- BLASFUNC(dgemm)(&trans1, &trans2, &n, &n, &n, &oned, Ad, &n, Ad, &n, &zerod, Bd, &n);
- #endif
- #ifdef BUILD_COMPLEX
- BLASFUNC(cgemm)(&trans1, &trans2, &n, &n, &n, (float *)&onec,
- (float *)Ac, &n, (float *)Ac, &n, (float *)&zeroc, (float *)Bc, &n);
- #endif
- #ifdef BUILD_COMPLEX16
- BLASFUNC(zgemm)(&trans1, &trans2, &n, &n, &n, (double *)&onez,
- (double *)Az, &n, (double *)Az, &n, (double *)&zeroz, (double *)Bz, &n);
- #endif
- /* Check result is close to original */
- for (i = 0; i < n; ++i) {
- for (j = 0; j < n; ++j) {
- double err;
-
- #ifdef BUILD_SINGLE
- err = fabs(A1s[i+n*j] - Bs[i+n*j]);
- if (err > 1e-5) {
- CTEST_ERR("%s:%d %c s(%d,%d) difference: %g", __FILE__, __LINE__, uplo, i, j, err);
- }
- #endif
- #ifdef BUILD_DOUBLE
- err = fabs(A1d[i+n*j] - Bd[i+n*j]);
- if (err > 1e-12) {
- CTEST_ERR("%s:%d %c d(%d,%d) difference: %g", __FILE__, __LINE__, uplo, i, j, err);
- }
- #endif
-
- #ifdef BUILD_COMPLEX
- #ifdef OPENBLAS_COMPLEX_C99
- err = cabsf(A1c[i+n*j] - Bc[i+n*j]);
- #else
- err = hypot(A1c[i+n*j].real - Bc[i+n*j].real,
- A1c[i+n*j].imag - Bc[i+n*j].imag);
- #endif
- if (err > 1e-5) {
- CTEST_ERR("%s:%d %c c(%d,%d) difference: %g", __FILE__, __LINE__, uplo, i, j, err);
- }
- #endif
-
- #ifdef BUILD_COMPLEX16
- #ifdef OPENBLAS_COMPLEX_C99
- err = cabs(A1z[i+n*j] - Bz[i+n*j]);
- #else
- err = hypot(A1z[i+n*j].real - Bz[i+n*j].real,
- A1z[i+n*j].imag - Bz[i+n*j].imag);
- #endif
- if (err > 1e-12) {
- CTEST_ERR("%s:%d %c z(%d,%d) difference: %g", __FILE__, __LINE__, uplo, i, j, err);
- }
- #endif
- }
- }
- }
- }
|