1// ============================================================================= 2// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab 3// Copyright (C) ????-2008 - INRIA 4// Copyright (C) ????-2008 - ENPC 5// 6// This file is distributed under the same license as the Scilab package. 7// ============================================================================= 8// <-- CLI SHELL MODE --> 9//--------------test format %i 10[n,a]=msscanf('123','%i'); 11if n<>1|a<>123 then bugmes();quit;end 12[n,a]=msscanf(' 123','%i'); 13if n<>1|a<>123 then bugmes();quit;end 14[n,a]=msscanf('123','%2i'); 15if n<>1|a<>12 then bugmes();quit;end 16[n,a]=msscanf('123','%5i'); 17//--------------test format %li 18[n,a]=msscanf('123','%li'); 19if n<>1|a<>123 then bugmes();quit;end 20[n,a]=msscanf(' 123','%li'); 21if n<>1|a<>123 then bugmes();quit;end 22[n,a]=msscanf('123','%2li'); 23if n<>1|a<>12 then bugmes();quit;end 24[n,a]=msscanf('123','%5li'); 25//--------------test format %hi 26[n,a]=msscanf('123','%hi'); 27if n<>1|a<>123 then bugmes();quit;end 28[n,a]=msscanf(' 123','%hi'); 29if n<>1|a<>123 then bugmes();quit;end 30[n,a]=msscanf('123','%2hi'); 31if n<>1|a<>12 then bugmes();quit;end 32[n,a]=msscanf('123','%5hi'); 33//--------------test format %d 34[n,a]=msscanf('123','%d'); 35if n<>1|a<>123 then bugmes();quit;end 36[n,a]=msscanf(' 123','%d'); 37if n<>1|a<>123 then bugmes();quit;end 38[n,a]=msscanf('123','%2d'); 39if n<>1|a<>12 then bugmes();quit;end 40[n,a]=msscanf('123','%5d'); 41//--------------test format %ld 42[n,a]=msscanf('123','%ld'); 43if n<>1|a<>123 then bugmes();quit;end 44[n,a]=msscanf(' 123','%ld'); 45if n<>1|a<>123 then bugmes();quit;end 46[n,a]=msscanf('123','%2ld'); 47if n<>1|a<>12 then bugmes();quit;end 48[n,a]=msscanf('123','%5ld'); 49//--------------test format %hd 50[n,a]=msscanf('123','%hd'); 51if n<>1|a<>123 then bugmes();quit;end 52[n,a]=msscanf(' 123','%hd'); 53if n<>1|a<>123 then bugmes();quit;end 54[n,a]=msscanf('123','%2hd'); 55if n<>1|a<>12 then bugmes();quit;end 56[n,a]=msscanf('123','%5hd'); 57//------------- test format %n 58// Note that %n returned values are not counted in n 59s1='123 45.67 pipo';s2=' foo'; 60[n,a,b,c,d,e]=msscanf(s1+s2,'%d%lf%s%n%s'); 61if n<>4|a<>123|b<>45.67|c<>'pipo'|d<>length(s1)|e<>'foo' then bugmes();quit;end 62//------------- test format %u 63[n,a]=msscanf('+123','%u'); 64if n<>1|a<>123 then bugmes();quit;end 65[n,a]=msscanf(' 123','%2u'); 66if n<>1|a<>12 then bugmes();quit;end 67[n,a]=msscanf('+123','%5u'); 68if n<>1|a<>123 then bugmes();quit;end 69//------------- test format %lu 70[n,a]=msscanf('+123','%lu'); 71if n<>1|a<>123 then bugmes();quit;end 72[n,a]=msscanf(' 123','%2lu'); 73if n<>1|a<>12 then bugmes();quit;end 74[n,a]=msscanf('+123','%5lu'); 75if n<>1|a<>123 then bugmes();quit;end 76//------------- test format %hu 77[n,a]=msscanf('+123','%hu'); 78if n<>1|a<>123 then bugmes();quit;end 79[n,a]=msscanf(' 123','%2hu'); 80if n<>1|a<>12 then bugmes();quit;end 81[n,a]=msscanf('+123','%5hu'); 82if n<>1|a<>123 then bugmes();quit;end 83//------------- test format %o 84[n,a]=msscanf('123','%o'); 85if n<>1|a<>83 then bugmes();quit;end 86[n,a]=msscanf(' 123','%o'); 87if n<>1|a<>83 then bugmes();quit;end 88[n,a]=msscanf('123','%2o'); 89if n<>1|a<>10 then bugmes();quit;end 90[n,a]=msscanf('123','%5o'); 91if n<>1|a<>83 then bugmes();quit;end 92//------------- test format %x 93rep=10*16^2+11*16+12; 94[n,a]=msscanf('0xabc','%x'); 95if n<>1|a<>rep then bugmes();quit;end 96[n,a]=msscanf(' 0xabc','%x'); 97if n<>1|a<>rep then bugmes();quit;end 98[n,a]=msscanf('abc','%2x'); 99if n<>1|a<>10*16+11 then bugmes();quit;end 100[n,a]=msscanf('0xabc','%5x'); 101if n<>1|a<>rep then bugmes();quit;end 102//------------- test format %e 103[n,a]=msscanf('123.45','%e'); 104if n<>1|norm(a-123.45)>1.e-2 then bugmes();quit;end 105[n,a]=msscanf(' 123.45','%e'); 106if n<>1|norm(a-123.45)>1.e-2 then bugmes();quit;end 107[n,a]=msscanf('123.45','%2e'); 108if n<>1| norm(a-12)>0.1 then bugmes();quit;end 109[n,a]=msscanf('123.45','%5e'); 110if n<>1|norm(a-123.4)>1.e-1 then bugmes();quit;end 111//------------- test format %le 112[n,a]=msscanf('123.45','%le'); 113if n<>1|a<>123.45 then bugmes();quit;end 114[n,a]=msscanf(' 123.45','%le'); 115if n<>1|a<>123.45 then bugmes();quit;end 116[n,a]=msscanf('123.45','%2le'); 117if n<>1|a<>12 then bugmes();quit;end 118[n,a]=msscanf('123.45','%5le'); 119if n<>1|a<>123.4 then bugmes();quit;end 120//------------- test format %f 121[n,a]=msscanf('123.45','%f'); 122if n<>1|norm(a-123.45)>1.e-2 then bugmes();quit;end 123[n,a]=msscanf(' 123.45','%f'); 124if n<>1|norm(a-123.45)>1.e-2 then bugmes();quit;end 125[n,a]=msscanf('123.45','%2f'); 126if n<>1| norm(a-12)>0.1 then bugmes();quit;end 127[n,a]=msscanf('123.45','%5f'); 128if n<>1|norm(a-123.4)>1.e-1 then bugmes();quit;end 129//------------- test format %lf 130[n,a]=msscanf('123.45','%lf'); 131if n<>1|a<>123.45 then bugmes();quit;end 132[n,a]=msscanf(' 123.45','%lf'); 133if n<>1|a<>123.45 then bugmes();quit;end 134[n,a]=msscanf('123.45','%2lf'); 135if n<>1|a<>12 then bugmes();quit;end 136[n,a]=msscanf('123.45','%5lf'); 137if n<>1|a<>123.4 then bugmes();quit;end 138//------------- test format %s 139[n,a]=msscanf('123','%s'); 140if n<>1|a<>'123' then bugmes();quit;end 141[n,a]=msscanf(' 123','%s'); 142if n<>1|a<>'123' then bugmes();quit;end 143[n,a]=msscanf('123','%2s'); 144if n<>1|a<>'12' then bugmes();quit;end 145[n,a]=msscanf('123','%5s'); 146if n<>1|a<>'123' then bugmes();quit;end 147//------------- test format %c 148//note that \n is scaned into \ and n 149[n,a,b,c,d]=msscanf(' 12\n','%c%c%c%c'); 150if n<>4|a<>' '|b<>'1'|c<>'2'|d<>'\' then bugmes();quit;end 151//------------- test format [ 152[n,a,b]=msscanf('012345abczoo','%[0-9abc]%s'); 153if n<>2|a<>'012345abc'|b<>'zoo' then bugmes();quit;end 154//------------- test format [ 155[n,a,b]=msscanf('012345abczoo','%[^c]c%s'); 156if n<>2|a<>'012345ab'|b<>'zoo' then bugmes();quit;end 157//------------- test ignoring arguments 158[n,a,b]=msscanf('123 4 pipo poo','%*s%s%*s%s'); 159if n<>2|a<>'4'|b<>'poo' then bugmes();quit;end 160//------------- test [ * ^ 161[n,a]=msscanf('123 4 pipo Xpoo','%*[^X]X%s'); 162if n<>1|a<>'poo' then bugmes();quit;end 163//------------- test ignoring arguments 164[n,a,b]=msscanf('123 4 pipo poo','%*s%s%*s%s'); 165if n<>2|a<>'4'|b<>'poo' then bugmes();quit;end 166//------------- test composed directives 167[n,a]=msscanf('123 4','123%le'); 168if n<>1|a<>4 then bugmes();quit;end 169[n,a,b,c]=msscanf('xxxxx 4 test 23.45','xxxxx%d%s%le'); 170if n<>3|a<>4|b<>'test'|c<>23.45 then bugmes();quit;end 171[n,a,b]=msscanf('123 456','%le%le'); 172if n<>2|a<>123|b<>456 then bugmes();quit;end 173//------------- test mismatch 174[n,a]=msscanf('123 poo','123%le'); 175if n<>0 then bugmes();quit;end 176//------------- test end-of-line 177[n,a]=msscanf('123','123%le'); 178if n<>-1 then bugmes();quit;end 179//------------- test with matrix scan 180n=5; 181A=int(10*rand(n,n)); 182A1=strcat(string(A),' ','c'); 183F='%d';F=strcat(F(ones(1,n)),' '); 184// all lines read as int we scan a 5x5 matrix 185A2=msscanf(-1,A1,F); 186if norm(A2-A) > %eps then bugmes();quit;end 187// read just 2 lines 188A2=msscanf(2,A1,F); 189if norm(A2-A(1:2,:)) > %eps then bugmes();quit;end 190// explicit columns we scan five columns 191[n,a,b,c,d,e]=msscanf(-1,A1,F); 192if n<>5 then bugmes();quit;end 193if norm([a,b,c,d,e]-A) > %eps then bugmes();quit;end 194// all lines read as int but we scan only 2 columns 195A2=msscanf(-1,A1,'%d%d'); 196if norm(A2-A(:,1:2)) > %eps then bugmes();quit;end 197// all lines read as string 198F='%s';F=strcat(F(ones(1,n)),' '); 199A2=msscanf(-1,A1,F); 200if A2<>string(A) then bugmes();quit;end 201// read just 2 lines 202A2=msscanf(2,A1,F); 203if A2<>string(A(1:2,:)) then bugmes();quit;end 204// mixed types read column 1 and 2 as string and others as int 205Fs='%s';Fs=strcat(Fs(ones(1,2)),' '); 206Fd='%d';Fd=strcat(Fd(ones(1,n-2)),' '); 207[n,a,b,c,d,e]=msscanf(-1,A1,Fs+' '+Fd); 208if n<>5 then bugmes();quit;end 209if norm([evstr(a),evstr(b),c,d,e]-A) > %eps then bugmes();quit;end 210// same example but returned values are compacted in L 211L=msscanf(-1,A1,Fs+' '+Fd); 212if length(L)<>3 then bugmes();quit;end 213if norm(getfield(3,L)-A(:,3:n)) > %eps then bugmes();quit;end 214if getfield(2,L)<>string(A(:,1:2)) then bugmes();quit;end 215