From 7aeb199bf6c4d6786133e4f3cbf3e3ebb8b9ad4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Fr=C3=B6jdh?= Date: Thu, 22 Oct 2026 16:31:10 +0200 Subject: [PATCH] dev/ [Mythen3] Check bad-channel flags before shifting the channel register (#1626) * [Mythen3] Check bad-channel flags before shifting the channel register The bad-channel test in setChannelRegisterChip ran after the register was divided by two, so the mask 0x38 hit the LSB of the counter 0 trim instead of the flags. Every channel with an odd trim value was logged as a bad channel, 1280 lines per module, which made setAllTrimbits about 190 ms slower for odd values. Test the flags where they were set. Also remove an unused message buffer in validate_writePatternWord and log the client pattern file name at debug level instead of printing it on every pattern load. * check is back * m3 binary in --------- Co-authored-by: Dhanya Thattil --- .../bin/mythen3DetectorServer_developer | Bin 322428 -> 322428 bytes .../mythen3DetectorServer/mythen3.c | 4 +- .../slsDetectorServer/src/loadPattern.c | 12 +++-- .../src/FrameSynchronizerApp.cpp | 46 +++++++++--------- slsReceiverSoftware/src/MultiReceiverApp.cpp | 15 +++--- slsSupportLib/include/sls/ToString.h | 3 +- slsSupportLib/include/sls/versionAPI.h | 2 +- slsSupportLib/tests/test-ToString.cpp | 4 +- 8 files changed, 44 insertions(+), 42 deletions(-) diff --git a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer index 28608b0616d83e06346523c5270c67c6ee18f8cd..e90b1eb187f468b3c40ed9d0db0eaecabdb0d8bc 100755 GIT binary patch delta 58702 zcmd?Sd3+Q_*EZZ$nS>-j7?#OQ5;7qPSx7?Iw*X<-B_Jp$B4|KVQ1(Ru5i%o0L}Zgj zip{Wy2nYcQ5=0;Y5fl)?1-V@yAfloMMMXp*?^WGrCOu7n+xxk{?|Hx9_eUjHUwx{& zmQ$yyPF45(eWK>yCu+{m4P5zMfU@$%=SPR+0^|l;l-vTwRs^sk1*KnM0#3dWJw#3C7xDLcQ z4O~~98yFN}AbXHtEdzHqan%f5U*bXy+yLSN4cs8RI(pk`_NaP3x`;igu5~&iJ;xH2 zeu~HH3|Fj8S+QcNblCBm;!!Nq)KkvUfiEJJpVi(mUD*~Zx(+z{?ru4cw3@i7i{Mg2JS`S^xB$Dt0K z869f-t6hmDKw%I#8z0Z7In;Kuqt&`~BiL*;v+jL-8Hf?l>bANKTNH~##r|heN!C<4D{XqM7@Oj->7k^sqDPkGc_J~Txx6fotmGT%{^&qSXv+cy_Vg2K0RH@6q?y%gx1g-6UK?v67ZpZOn7hrYI*ZmSU!rGj2&Ei_(GN0gCHxwRywlT*+5Q zHSAJD*6uw}Ppx(uGSr}YpyAg%IYMo)F%kjK_gnD|lQ~k8%J?IE2tv2(q5o)#7aq6{JU1bAz$>PmiB(-$;!roXZpPn_PzMf+UeLx;Qx?CLvQjU8tfoLxIaF7hKz__5^-P6QpLnIT zs;s3X6#vzxTc!y~3xm+I{tC+vZyD z$Q;VfsG~ARM_e#8%TG(Rhic98i@L`ZquSclY;J5?`*pqQf`VbKfW1%3Ei2E7E~93* zOP5cY+in26tfdv=s>YR#YN;zVB&j{KB%;|?sy$t!*>&7b*KalE8rMK@NCx6G~`WZq=z-R_vl8mOgrwqwoI^qwtP+k&iaVJu8$C&(%_979oObx0OE z$Hs!ZtkDe8VLi~1R~C%w;g(l2ZZ9qFeQH*>x7FBQeQpwcXD>r^bySZi_0_w7V}p<@ zXK3+X4HetpMJ29)f_=RMIDf3aI&Wl_m=lG(*S@zE8>{xcw;jt>7u}nZ-LtBQ+Hp7#&%zzprch`zC7b zfK-PQ1A>^YN2lb!Jr8z~|9ZL_h^e(PK)bSQ>30vR(F0>7%p9l*ItOWjryg*qIfJI@ zG7?rRsQ1uD#)_musJ{)a$KFw$5BH66l{8fBL7o!X21-;_C9x)k)Ue_bt)jnLD&DTi zA__J>{3PS&WUWT4u190pPwL=D$Fo1x6OVRBpNt#QfxDWjLx!}dp7gI)_JE=@`?*V6 zeydVn%^woUl{)I7AAKC>#OqN4fumm>b!iXdiQV#O#QIoAG6^|s5={7Fl$5r zV^67bM-Io(uxCPy8ZoLNo33V!8qF4{*<-qkIjy->wT-sda1Bk-=SOu&omQ)vqq`!O zL8`iXX>^Sm#Um<|+*$xhh6tIXQ`Jw$){fh|tXv=WEz|Y!TG1Jd3Yd7Ii@zJCrnYjb zjmAyVBB3_MHRi5y1=q(#F@AWNx?*~``qQ&f1wEb^%eCCU!cM4zCqB$iFB7eYVIEd8 zu@x&-BPShXzsY*r`cw!53Z2|UrZ@Rvw8ZMk1&M*n%d-)@99^QUq?1yNX-HLVDxzhj za&2{VmuPkI(@#Z*J)qAys@IM!K3Pw%lFG75kmE=-ead(it7fAiil^MklGL!Nt$Cx` zat0SFXVFrx(YoWN_TeobP=^msS3_o`sdHQ*q53^n*Ca)_F7arotu=!zLDFQZ!*X6@ zoseiu;1y{|)a&l>2C|n}29*y*#sNa|TIaiqjOATg_B-0O=om;{G#=yn-%6(?rSqUx zk{~@DnT#E`}jH(?Qu236W3Z=vztBnhN#8~{6svpE@r@+0m`@lfi#={eJKX*h%@k0OU=*I6Z}3 zpa=GgxLIMYsHbMc^BRrR7pBFjKeeqXtiSMJ)iopVrZKLm+0Vsu=Z!ILS{5FS)l6)F zCq<9*>T^4IFsPZasj|7WrN(8<*&61S4_v>~jH@qcYecl{>p^z#Xvw29!<%S*sgoSY zib{epc00WzYRb#y&6f6Zd9$TQ%N~D267~K;5^bU}&N~}xnYc~Ht0GzN3Ox%?Mql~) z`Gs-}pD}BJ{1^E`ceU;87&Z3=Yo@mvEEtHrgRrHC-Xr9H?|p4WR;_%VqRU{?nOe;& z^^wJT1QOo$9(zd5oE_KEn}Bh0aI*(wEU;Ls6wmWbhDc7u0I%+zU6(zko}JxmE4P%+MIS{sK8*^54{eHT6>B2TJ1YGhK*Mz%nN#HovA*FZgyQw=_1Sg1TD_wvKxe#4ICoc1#@BOEMQt{nt-QPz}=f0H>Vz1!`jIg++SFE&64c=*5Gb>Ohea zQ6tZ4gZJS#IhV8nUnT5NSBnN!v6}UnuqgGEu(N3Ovgpo}oa!I>vFam>o3V!K(#6>U z#m^?G^Oi)bjwKPSjoNrgf3AG1&RsH;cXF!Ldc>&VODFK+XVtk&JMx}R^^5+{=B2^h z^S*j@X_FY42h3}IdGNX=9N^JAMR7A8A@1D9tm>1?>hSwz{5bWkWxZsIq03X`zvj#D zV?))s%XA`9N%Kj7)vmA?*mtU@;l^^qI z-?P2>aH#uUZo+e%>cuWDG1>PvaaY@xa*FI9{BgCXjVzN+IZ?qkc; z{ws1Kl`ARe$1w0?FqK5PoTF$~@mj&96)Iy})fuavgMNgq{t%PUQ>$Nts{{E~*T3=@ z|4O!CwAye@b^Z++YrV5ZAeQK8pdbge@lQ@|1~Y$+jb8@D)baf_C;2r9W3ICI)lS?J zBmF=H32SFEUMWW1{Mve6yjbnOZk+56N7oHxHP!U>4OksDdwoizRHw9J-JfH>MynkB zhv@3{arz{ELpn=V_iS`FDBcyQ=-Om(VL-dI0n*|%IpnQKM>d8+;u z>eAN}lVm}$V$e+ct)3!%c9x9}ZGtizxpH1@r%wsHsOcNwy^)2Gw0EYM1=<-Y{YybF zD~hj--rK!UaVc72woB;xmuQ8Su3p{Pn%#?>In{eMMf3hKdZTW#@xd|LkfUXNn0jcF z<{P-WDTpqhZcUcIZHOS za|>4Dn+pbSnI~uKm)?Nu;6pWTYm54FnZk_Alyta(_P`Car$iP^sgqtl5N%OsZ0!p3 zcy#MK?ssBtbS1w}oY9qhj5wn!`BUPIuH?^&GrE#b6K8ZKpVK*iSMv8HSj#YKmJ(-l zCI3pCaVC0&IHN21T8tQYA735H2i3!Hq<9)t71h4vF>1z}9k_C5LC%|SNYqfTZ%<`c z)Re+rSk6r@%ujrx$`K`Z_6H6dFSh2+KB80&D7HR}X@zCxZmcOQ!vl@wM0K_2j@B$v zowXx|MX4KhG-2`TsU1n^RzYtyVU5&`w_324>Nx!Epl$$jhkEL*RMtlg-I>ZBR-5l^ z!bYpZc1E!=>WrQ3;H@~Yb0C|jCcZtKO;Z=Voz9CdtNY$Aie9{`kz8}h!PK)pN!QaD z=>$g>mZ^EWR>1UR?oMKFt3!4VVDGB?b~j-M)yumtviH^Vds?$&YFtqY_av%4i(;xb zwJP?BE01Z;TqNkKuI3aqz@jt1$j&}h4-_S_FV)hb=5d}bb>UjwU1CQFgR!zd+xCp7 zja9KdF1fa6T<@w~ic^A$kJVL_j_QQsI8>&(v^bufRreG(2}!G=X!-j_y;^+OT^8%7 zVA`F)IGrN})3_?ck%DPlb>c|DG%lPtQZS8+B90VH%jcECVA>#$36_?TiX zSo4l0AY{^IMVXI~tG;odL8Ur>D9U1msox%WrqaeMIv#!SxI6hT4ab;Xu%T*9)#Hl zO&L0M&(+qTLlzzP20lpmKH&X?vw`;#eiV2Q;bFjU6CMM+gYX34Hwixtyj8<)#p1!m zX1b9JypixM;Pr&(1Ft2l0>46d5%5aF%Ya`dyaISB;a7kK;n#o{65a&-qMI(Z;$kl0 zLf{t&?*g7lcpvbygbxBwBYXtdo6d3IDa4-uev0sE;0c7k10GM~;qkz! zgeL(f6V3rnAUqv7j_?fN7{bp3*Csp%ID)VW98P#Ka7~Hb(Ds*cVWk^ufU6Q-4;)JP z4d6H%Vagp#j;2#Np2mC$Z zQsDE1F9Cl|_z&O`!hZvQML1xMHRyA~p}?OJt^xdsj@_0>TpXtxall6jrvM)&+!**h z!WqEt63ztPN4NuU5#cVty9jp!ev5EV;O&Ha0~Z9i_3G-2i!F3x0PrTl4*_o=JOubP z!oz{r5FQDB=rxM-@JelxYz!M4Y0e%A5EzRvaxEM<}4g$mNqUG)b;NgTn27Zk2 zzknYld>VK#;d8(P34ag#0O5cOvWnZcjKGIFoQ3aBIRzz%2>a2X3Ze*#9QDXiPU+0XHDr4mgc)C*XR7y8&Zk zQLCYz!109p0M{Yh4>+3egTRr52Lsy)4+XB}ri+ods7`o1a2Vl9z?BJ41r8>h3mi!J zd0E^rywGp7RoO?WZzpM>*(FB5jJ!Nsq1u^#wm!uh~I5#9!Tf$&?v-xA&fe2(zD zz-I^_0X{|eIPe#QPXM1J`~~o*oa}!IEaC6|* zgj)fxAlwFcIbj#@62cvU7fCGbe-~V+bmLCo`GoHVodrXLxG`KL;O>ME0N+9Q2ykb@9|6PdpgrI- z;C6(+1a3q43~(#L-vBq~WdFa%MH9Ml5x61Y-+}8B{u4Nb@HOBh!U3;YgX$6v0gfdc z1`N-gmZ6%!QG^}94#LrHT-fL$7PtoCL|`0g(ITe;<8Y#e8v=(AZVn8;v&Odp4j|kC zSRvdM_!`ZsdjMZ0+#C20V9oyDkBi^vMmF#-gdYYjB|H@P2g1XEzau;n_#47wfzJ|t z68JRX$-rL{mIeM7;oR3?|4-1x^SJRb;d#Kv2)_jU0pVr9hX}6%K1ldg;QfSO2i{Bg z4d6Y53xVGzTm-yB!?6GRaPcPHco%pp;rD?fL|f}6YxsH zzXQKa_zLh+!hZn^EW)++E5pS?!U5~BFd!TZJeP1);1>wj1fEGa68KrdvB1*^CjooY zuMa$h_@=;55q7u6#RR&@1RhVgJ@6R9oq$IY?g~7NaChLLgnI!$Lbwm`LxlSQXA^!9 zcmUzS!2KB6|Dm|Jmu`#%?oD_sa4*770rw#62JS|925=X`bAUS%UI^?WybQQ4;a7n( z2ya{m``>~t3UC8nC#^Yl0XHK2E^s>G!@#M8j{_$YJ_(#a_%v`F;ctOs2>%RRoA95& z5fV%LUxtftx?x$5g#qDUU@PHjz*Px{1BVih2ChW7F0h4gDljA582GxP7pxU97T;PS z+XK7d57RF0z{T%`djVe}+!y#F;eo(E5`GN$d%~lE&l8>i{59dJz$JupfxjaBJn-i_ zc3bA-;xoD-fIlIe2Yj6HtH4JIZv;L}xB&P)!aITACA<%KAK^p5MT9>E-bJ_s_$`I( z|F^ix8H9%dPbWMI*h6?c@KnN+fhPlN_TPhxiF9KI z@Dqe*1CJ%F0*@lR40t%<)xeJtUJv{z;myE<2^RtnBwPgi0O5Bx!2aJ)7l&{I=MXey zJPzE4@JV1C=F#}mz;_b<4mgYOFTh<1Ujgn!_!@9~!j{*uE+AY5xV461|7+o*CEchE z+>CHtV0h5A2d4lxAlwi*jc^NK9Bt5KGJz8b-vJB{y2keg#&IAG_Xmz9JPMHmlUo$zGfFv8P-D-)gt987p2a3JA4VC?K_>Aa$jDoMprzNICv@pZ$+ z=Gm-$C0El#Z2Njtcbf!t%b7szQEWdmHvp{oa1@T)J$|+mb{z80HekQ1r_NsD#VP7X zU-#nIQ^n{XvBB*+7l`9tUCzbhXyLGPg-rrCmggu4*qftZU~i5>fxS7ZveBv@84;^K z`HjOpUY=VncjA8+$dum@lpv;5L2w|{MQDhil_m`7cx%WC?5&|1z}_0F1?;UM2e3Ck zwSm3)aRMVh!CInvhH9$~&sTNtde31~im?v_^UP*rr=eJ}Tm;8VT=4taHkO}U4{+Gh z^5d! zhpmc_bL%DE1G1`*)VVs?xC=9JQ>o=sxDK)ijZR zf~#fX8XR}nY$h%XT)2t551ie^<$`mVxSzpAfYYp^xB9IgIc$+8!9L)kOx#FtwN2bS zaM31iJvgU{I}9$SoO5dm_YKH8<)p?{`q*KMHF3Sb#hJKYz{Q)m>Yq4lbxmA0xC9fI z^NHJGOEi&(A(&+1z6Fx!=nYcON+G`v} zMQ`t^EC zfy**+N5OSBale7xR=4*ZQ{bea@cyCxI4i0 zF>z0VyGQ5TzUrR`@?MkRE^vKK+zD{^nYdDL{Y+fYDTnQT6E_@Oe?JcGKOf`(KT@&0 z3GM+C_c^!+O31#YB2 z=eB$ga+E)52{`MpjW%%&!HqF-S>VQ+xZ&W&nYdwJJ8a`k+#laKY)=%seFj9Ug<z7fI&4!- zTpMsXCT;{cgKlYs>yBr5OmglQKt5w4H-ejH;=Tem-NenrLvl^rL2%ESxO3oUn7A6> zIc(1v=6_la(?HHN362Bzyos9wZkCDL3GM|G_X)V!Ca%@@4%-|b=hn6V9*}c=q|QA9 zZk~x-25!EIdk@@;Chjb_1tu=&g2SeoxI5e+7n;bPKR9eJnYhK^7MZxu!3h($&G&HsJ?xy?YzL1)fy4%?e1?o)8vOkDp&i5mm%Efe?h@0kDX zG?70+uuA#7POF*rmmRjZO>!@S+hyY3{lj6~ZQ{;>+hgLcgDcWFeg3CCB=w5JR%{aN z3~sN98wYNmiCY5h9TQgsZoi591KhhtPR{@K{^_tCFp}UZU3J(Fnz%0D-ZOE7!M$(d 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

&d69XVe#$&akT9apYd1M&YFmRIuGxW_o~z^HuVh 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[iaddr++] = patword; diff --git a/slsDetectorServers/slsDetectorServer/src/loadPattern.c b/slsDetectorServers/slsDetectorServer/src/loadPattern.c index 154094b87..63ac6496a 100644 --- a/slsDetectorServers/slsDetectorServer/src/loadPattern.c +++ b/slsDetectorServers/slsDetectorServer/src/loadPattern.c @@ -149,10 +149,12 @@ int validate_writePatternWord(char *message, int addr, uint64_t word) { uint64_t retval = readPatternWord(addr); LOG(logDEBUG1, ("Pattern word (addr:0x%x) retval: 0x%llx\n", addr, (long long int)retval)); - char mode[128]; - memset(mode, 0, sizeof(mode)); - sprintf(mode, "set pattern word for addr 0x%x", addr); - validate64(&ret, message, word, retval, "set pattern word", HEX); + // runs for every pattern word: only build the message on a mismatch + if (retval != word) { + char mode[64]; + sprintf(mode, "set pattern word for addr 0x%x", addr); + validate64(&ret, message, word, retval, mode, HEX); + } #endif return ret; } @@ -700,7 +702,7 @@ int loadPattern(char *message, enum TLogLevel printLevel, int ret = OK; memset(clientPatternfile, 0, MAX_STR_LENGTH); memcpy(clientPatternfile, patfname, MAX_STR_LENGTH); - printf("Client Pattern File:%s\n", clientPatternfile); + LOG(logDEBUG1, ("Client Pattern File:%s\n", clientPatternfile)); #ifdef MYTHEN3D trimmingPrint = printLevel; #endif diff --git a/slsReceiverSoftware/src/FrameSynchronizerApp.cpp b/slsReceiverSoftware/src/FrameSynchronizerApp.cpp index d513c522a..d3b8c932f 100644 --- a/slsReceiverSoftware/src/FrameSynchronizerApp.cpp +++ b/slsReceiverSoftware/src/FrameSynchronizerApp.cpp @@ -542,30 +542,30 @@ int main(int argc, char *argv[]) { for (int i = 0; i != f.numReceivers; ++i) { uint16_t port = f.port + i; sem_t *semaphore = &semaphores[i]; - threads.emplace_back( - [i, semaphore, port, user_data, &threadException]() { - LOG(sls::logINFOBLUE) << "Thread " << i << " [ Tid: " - << sls::getThreadId() << ']'; - try { - sls::Receiver receiver(port); - receiver.registerCallBackStartAcquisition( - StartAcquisitionCallback, user_data); - receiver.registerCallBackAcquisitionFinished( - AcquisitionFinishedCallback, user_data); - receiver.registerCallBackRawDataReady(GetDataCallback, - user_data); + threads.emplace_back([i, semaphore, port, user_data, + &threadException]() { + LOG(sls::logINFOBLUE) + << "Thread " << i << " [ Tid: " << sls::getThreadId() << ']'; + try { + sls::Receiver receiver(port); + receiver.registerCallBackStartAcquisition( + StartAcquisitionCallback, user_data); + receiver.registerCallBackAcquisitionFinished( + AcquisitionFinishedCallback, user_data); + receiver.registerCallBackRawDataReady(GetDataCallback, + user_data); - /** - as long as no Ctrl+C */ - // each child shares the common semaphore - sem_wait(semaphore); - } catch (...) { - // capture exception and raise SIGINT to exit gracefully - threadException = std::current_exception(); - raise(SIGINT); - } - LOG(sls::logINFOBLUE) << "Exiting Thread " << i << " [ Tid: " - << sls::getThreadId() << " ]"; - }); + /** - as long as no Ctrl+C */ + // each child shares the common semaphore + sem_wait(semaphore); + } catch (...) { + // capture exception and raise SIGINT to exit gracefully + threadException = std::current_exception(); + raise(SIGINT); + } + LOG(sls::logINFOBLUE) << "Exiting Thread " << i + << " [ Tid: " << sls::getThreadId() << " ]"; + }); } for (auto &t : threads) { diff --git a/slsReceiverSoftware/src/MultiReceiverApp.cpp b/slsReceiverSoftware/src/MultiReceiverApp.cpp index 003b66c4f..180b8a084 100644 --- a/slsReceiverSoftware/src/MultiReceiverApp.cpp +++ b/slsReceiverSoftware/src/MultiReceiverApp.cpp @@ -177,9 +177,8 @@ int main(int argc, char *argv[]) { /** - if child process */ else if (pid == 0) { - LOG(sls::logINFOBLUE) - << "Child process " << i << " [ Tid: " << sls::getThreadId() - << ']'; + LOG(sls::logINFOBLUE) << "Child process " << i + << " [ Tid: " << sls::getThreadId() << ']'; try { uint16_t port = m.port + i; @@ -210,13 +209,15 @@ int main(int argc, char *argv[]) { // each child process gets a copy of the semaphore sem_wait(&semaphore); sem_destroy(&semaphore); - LOG(sls::logINFOBLUE) << "Exiting Child Process [ Tid: " - << sls::getThreadId() << ']'; + LOG(sls::logINFOBLUE) + << "Exiting Child Process [ Tid: " << sls::getThreadId() + << ']'; exit(EXIT_SUCCESS); } catch (...) { sem_destroy(&semaphore); - LOG(sls::logINFOBLUE) << "Exiting Child Process [ Tid: " - << sls::getThreadId() << " ]"; + LOG(sls::logINFOBLUE) + << "Exiting Child Process [ Tid: " << sls::getThreadId() + << " ]"; exit(EXIT_FAILURE); } } diff --git a/slsSupportLib/include/sls/ToString.h b/slsSupportLib/include/sls/ToString.h index 7c692badd..0b996cda2 100644 --- a/slsSupportLib/include/sls/ToString.h +++ b/slsSupportLib/include/sls/ToString.h @@ -352,8 +352,7 @@ T StringTo(const std::string &f, const std::string &unit) { } } -template ::value, int> = 0> +template ::value, int> = 0> T StringTo(const std::string &t) { std::string tmp{t}; auto unit = RemoveUnit(tmp); diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 7828cff07..fb05bbf0d 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -9,5 +9,5 @@ #define APIEIGER "0.0.0 0x260807" #define APIXILINXCTB "0.0.0 0x260813" #define APIJUNGFRAU "0.0.0 0x261002" -#define APIMYTHEN3 "0.0.0 0x260506" +#define APIMYTHEN3 "0.0.0 0x261022" #define APIMATTERHORN "0.0.0 0x260529" diff --git a/slsSupportLib/tests/test-ToString.cpp b/slsSupportLib/tests/test-ToString.cpp index 194f04442..5c8cc6dce 100644 --- a/slsSupportLib/tests/test-ToString.cpp +++ b/slsSupportLib/tests/test-ToString.cpp @@ -415,10 +415,10 @@ TEST_CASE("string to timingInfoDecoder") { defs::timingInfoDecoder::SHINE); } - TEST_CASE("Convert string to vector of ints") { REQUIRE(StringTo>("1, 2, 3") == std::vector{1, 2, 3}); - REQUIRE(StringTo>(" 4 ,5,6 ") == std::vector{4, 5, 6}); + REQUIRE(StringTo>(" 4 ,5,6 ") == + std::vector{4, 5, 6}); REQUIRE(StringTo>("[8]") == std::vector{8}); REQUIRE(StringTo>("9, ") == std::vector{9}); REQUIRE(StringTo>("") == std::vector{});