#include <stdio.h>
#include <string.h>
unsigned parseAndCompareDouble(const char* inSTR, const char* inF, const char * expect, const char * outF){
unsigned e = 0;
char buffer[2000];
double a = 0;
if( 1 != sscanf( inSTR
, inF
, &a
) ) e
+= 1; if( 0 != strcmp(expect
, buffer
) ) e
+= 1; return e;
}
int main( void )
{
unsigned e = 0;
const char * universalFormat = "%*[^/]/%lf";
e += parseAndCompareDouble("X/100", universalFormat, "X/100", "X/%3.0lf");
e += parseAndCompareDouble(" X/100\r\n", universalFormat, "X/100", "X/%3.0lf");
e += parseAndCompareDouble(" X/99\r\n", universalFormat, "X/99", "X/%2.0lf");
e += parseAndCompareDouble(" X / 99 ", universalFormat, "X/99", "X/%2.0lf");
e += parseAndCompareDouble("X/99", universalFormat, "X/99", "X/%2.0lf");
e += parseAndCompareDouble(" \"X/100\"\r\n", universalFormat, "X/100", "X/%3.0lf");
if( 0 != e
){ printf( "%2u errors occured\n", e
); } else{ printf( "all pass\n"); } return e;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KIAp1bnNpZ25lZCBwYXJzZUFuZENvbXBhcmVEb3VibGUoY29uc3QgY2hhciogaW5TVFIsIGNvbnN0IGNoYXIqIGluRiwgY29uc3QgY2hhciAqIGV4cGVjdCwgY29uc3QgY2hhciAqIG91dEYpewogICAgdW5zaWduZWQgZSA9IDA7CiAgICBjaGFyIGJ1ZmZlclsyMDAwXTsKICAgIGRvdWJsZSBhID0gMDsKICAgIGlmKCAxICE9IHNzY2FuZiggaW5TVFIsIGluRiwgJmEgKSApIGUgKz0gMTsKICAgIGlmKCAoaW50KSBzdHJsZW4oZXhwZWN0KSAhPSBzbnByaW50ZihidWZmZXIsIDIwMDAsIG91dEYsIGEpICkgZSArPSAxOwogICAgaWYoIDAgIT0gc3RyY21wKGV4cGVjdCwgYnVmZmVyKSApIGUgKz0gMTsKICAgIHJldHVybiBlOwp9CiAKaW50IG1haW4oIHZvaWQgKQp7CiAgICB1bnNpZ25lZCBlID0gMDsKICAgIGNvbnN0IGNoYXIgKiB1bml2ZXJzYWxGb3JtYXQgPSAiJSpbXi9dLyVsZiI7CiAKICAgIGUgKz0gcGFyc2VBbmRDb21wYXJlRG91YmxlKCJYLzEwMCIsIHVuaXZlcnNhbEZvcm1hdCwgIlgvMTAwIiwgIlgvJTMuMGxmIik7CiAgICBlICs9IHBhcnNlQW5kQ29tcGFyZURvdWJsZSgiICAgICBYLzEwMFxyXG4iLCB1bml2ZXJzYWxGb3JtYXQsICJYLzEwMCIsICJYLyUzLjBsZiIpOwogICAgZSArPSBwYXJzZUFuZENvbXBhcmVEb3VibGUoIiAgICAgWC85OVxyXG4iLCB1bml2ZXJzYWxGb3JtYXQsICJYLzk5IiwgIlgvJTIuMGxmIik7CiAgICBlICs9IHBhcnNlQW5kQ29tcGFyZURvdWJsZSgiICAgICBYIC8gOTkgIiwgdW5pdmVyc2FsRm9ybWF0LCAiWC85OSIsICJYLyUyLjBsZiIpOwogICAgZSArPSBwYXJzZUFuZENvbXBhcmVEb3VibGUoIlgvOTkiLCB1bml2ZXJzYWxGb3JtYXQsICJYLzk5IiwgIlgvJTIuMGxmIik7CiAgICBlICs9IHBhcnNlQW5kQ29tcGFyZURvdWJsZSgiICAgICBcIlgvMTAwXCJcclxuIiwgdW5pdmVyc2FsRm9ybWF0LCAiWC8xMDAiLCAiWC8lMy4wbGYiKTsgIAogCiAgICBpZiggMCAhPSBlICl7IHByaW50ZiggIiUydSBlcnJvcnMgb2NjdXJlZFxuIiwgZSApOyB9CiAgICBlbHNleyBwcmludGYoICJhbGwgcGFzc1xuIik7IH0KICAgIHJldHVybiBlOwp9