Changeset 36
- Timestamp:
- 02/10/08 17:49:05 (1 year ago)
- Files:
-
- trunk/examples/util/serializer/util_serializer.cbp (modified) (4 diffs)
- trunk/std2/conv.d (modified) (31 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/examples/util/serializer/util_serializer.cbp
r32 r36 8 8 <Build> 9 9 <Target title="FunctionTest"> 10 <Option output="$(#doost) \bin\$(PROJECT_NAME)_$(TARGET_NAME)" prefix_auto="1" extension_auto="1" />11 <Option working_dir="$(#doost) \bin\" />12 <Option object_output="$(#doost) \bin\obj\util\serializer\" />10 <Option output="$(#doost)/bin/$(PROJECT_NAME)_$(TARGET_NAME)" prefix_auto="1" extension_auto="1" /> 11 <Option working_dir="$(#doost)/bin/" /> 12 <Option object_output="$(#doost)/bin/obj/util/serializer/" /> 13 13 <Option type="1" /> 14 14 <Option compiler="dmd" /> … … 19 19 </Target> 20 20 <Target title="FunctionTest1"> 21 <Option output="$(#doost) \bin\$(PROJECT_NAME)_$(TARGET_NAME)" prefix_auto="1" extension_auto="1" />22 <Option working_dir="$(#doost) \bin\" />23 <Option object_output="$(#doost) \bin\obj\util\serializer\" />21 <Option output="$(#doost)/bin/$(PROJECT_NAME)_$(TARGET_NAME)" prefix_auto="1" extension_auto="1" /> 22 <Option working_dir="$(#doost)/bin/" /> 23 <Option object_output="$(#doost)/bin/obj/util/serializer/" /> 24 24 <Option type="1" /> 25 25 <Option compiler="dmd" /> … … 49 49 <Add library="phobos" /> 50 50 <Add library="m" /> 51 <Add directory="C: \DLang\lib" />52 <Add directory="C: \DLang\bin" />51 <Add directory="C:/DLang/lib" /> 52 <Add directory="C:/DLang/bin" /> 53 53 </Linker> 54 <Unit filename=".. \..\..\doc\util\serializer\changelog.txt">54 <Unit filename="../../../doc/util/serializer/changelog.txt"> 55 55 <Option target="<{~None~}>" /> 56 56 </Unit> 57 <Unit filename=".. \..\..\doc\util\serializer\todo.txt">57 <Unit filename="../../../doc/util/serializer/todo.txt"> 58 58 <Option target="<{~None~}>" /> 59 59 </Unit> 60 <Unit filename=".. \..\..\doost\api\Common.d" />61 <Unit filename=".. \..\..\doost\core\Traits.d" />62 <Unit filename=".. \..\..\doost\text\Escaper.d" />63 <Unit filename=".. \..\..\doost\text\Tokenizer.d" />64 <Unit filename=".. \..\..\doost\util\DUnit.d" />65 <Unit filename=".. \..\..\doost\util\serializer\Registry.d" />66 <Unit filename=".. \..\..\doost\util\serializer\Serializer.d" />67 <Unit filename=".. \..\..\doost\util\serializer\archive\JsonArchive.d" />68 <Unit filename=".. \..\..\doost\util\serializer\archive\TextArchive.d" />60 <Unit filename="../../../doost/api/Common.d" /> 61 <Unit filename="../../../doost/core/Traits.d" /> 62 <Unit filename="../../../doost/text/Escaper.d" /> 63 <Unit filename="../../../doost/text/Tokenizer.d" /> 64 <Unit filename="../../../doost/util/DUnit.d" /> 65 <Unit filename="../../../doost/util/serializer/Registry.d" /> 66 <Unit filename="../../../doost/util/serializer/Serializer.d" /> 67 <Unit filename="../../../doost/util/serializer/archive/JsonArchive.d" /> 68 <Unit filename="../../../doost/util/serializer/archive/TextArchive.d" /> 69 69 <Unit filename="FunctionTest.d"> 70 70 <Option target="FunctionTest" /> … … 73 73 <Option target="FunctionTest1" /> 74 74 </Unit> 75 <Unit filename="..\..\..\std2\conv.d" /> 75 <Unit filename="../../../std2/conv.d" /> 76 <Unit filename="../../../std2/traits.d" /> 76 77 <Extensions> 77 78 <envvars /> trunk/std2/conv.d
r32 r36 349 349 private T parseString(T)(char[] v) 350 350 { 351 scope(exit) 352 { 353 if (v.length) 351 scope(exit) 352 { 353 if (v.length) 354 354 { 355 conv_error!(char[], T)(v); 355 conv_error!(char[], T)(v); 356 356 } 357 357 } … … 674 674 auto v = parseIntegral!(S, N1)(s); 675 675 auto result = cast(N) v; 676 if (result != v) 676 if (result != v) 677 677 { 678 conv_error!(S, N)(s); 678 conv_error!(S, N)(s); 679 679 } 680 680 return result; … … 1383 1383 assert(0); 1384 1384 } 1385 1385 1386 1386 unittest 1387 1387 { 1388 1388 debug( conv ) writefln( "conv.toFloat.unittest" ); 1389 1389 float f; 1390 1390 1391 1391 f = toFloat( "nAn" ); 1392 1392 assert(isnan(f)); … … 1406 1406 f = toFloat( ".456" ); 1407 1407 assert( f == .456f ); 1408 1408 1409 1409 // min and max 1410 1410 f = toFloat("1.17549e-38"); … … 1569 1569 debug(conv) writefln("conv.toIfloat.unittest"); 1570 1570 ifloat ift; 1571 1571 1572 1572 ift = toIfloat(toString(123.45)); 1573 1573 assert(toString(ift) == toString(123.45i)); … … 1584 1584 assert(toString(ift) == toString(ifloat.max)); 1585 1585 assert(feq(cast(ireal)ift, cast(ireal)ifloat.max)); 1586 1586 1587 1587 // nan 1588 1588 ift = toIfloat("nani"); … … 1619 1619 assert(feq(cast(ireal)id.re, cast(ireal)idouble.min.re)); 1620 1620 assert(feq(cast(ireal)id.im, cast(ireal)idouble.min.im)); 1621 1621 1622 1622 id = toIdouble(toString(idouble.max)); 1623 1623 assert(toString(id) == toString(idouble.max)); 1624 1624 assert(feq(cast(ireal)id.re, cast(ireal)idouble.max.re)); 1625 1625 assert(feq(cast(ireal)id.im, cast(ireal)idouble.max.im)); 1626 1626 1627 1627 // nan 1628 1628 id = toIdouble("nani"); … … 1648 1648 1649 1649 ir = toIreal(toString("123.45")); 1650 assert(feq(cast(real)ir.re, cast(real)123.45i)); 1650 assert(feq(cast(real)ir.re, cast(real)123.45i)); 1651 1651 1652 1652 ir = toIreal(toString("123.45e+82i")); … … 1689 1689 if (!s.length) 1690 1690 goto Lerr; 1691 1691 1692 1692 b = getComplexStrings(s, s1, s2); 1693 1693 1694 1694 if (!b) 1695 1695 goto Lerr; 1696 1696 1697 1697 // atof(s1); 1698 1698 endptr = &s1[s1.length - 1]; 1699 r1 = strtold(s1, &endptr); 1699 r1 = strtold(s1, &endptr); 1700 1700 1701 1701 // atof(s2); 1702 1702 endptr = &s2[s2.length - 1]; 1703 r2 = strtold(s2, &endptr); 1703 r2 = strtold(s2, &endptr); 1704 1704 1705 1705 cf = cast(cfloat)(r1 + (r2 * 1.0i)); 1706 1706 1707 //writefln( "toCfloat() r1=%g, r2=%g, cf=%g, max=%g", 1707 //writefln( "toCfloat() r1=%g, r2=%g, cf=%g, max=%g", 1708 1708 // r1, r2, cf, cfloat.max); 1709 // Currently disabled due to a posted bug where a 1710 // complex float greater-than compare to .max compares 1709 // Currently disabled due to a posted bug where a 1710 // complex float greater-than compare to .max compares 1711 1711 // incorrectly. 1712 1712 //if (cf > cfloat.max) … … 1717 1717 Loverflow: 1718 1718 conv_overflow(s); 1719 1719 1720 1720 Lerr: 1721 1721 conv_error(s); 1722 return cast(cfloat)0.0e-0+0i; 1722 return cast(cfloat)0.0e-0+0i; 1723 1723 } 1724 1724 … … 1738 1738 cf = toCfloat(toString(cfloat.max)); 1739 1739 assert(toString(cf) == toString(cfloat.max)); 1740 1740 1741 1741 // nan ( nan+nani ) 1742 1742 cf = toCfloat("nani"); 1743 //writefln("toCfloat() cf=%g, cf=\"%s\", nan=%s", 1743 //writefln("toCfloat() cf=%g, cf=\"%s\", nan=%s", 1744 1744 // cf, toString(cf), toString(cfloat.nan)); 1745 1745 assert(toString(cf) == toString(cfloat.nan)); … … 1768 1768 if (!s.length) 1769 1769 goto Lerr; 1770 1770 1771 1771 b = getComplexStrings(s, s1, s2); 1772 1772 … … 1776 1776 // atof(s1); 1777 1777 endptr = &s1[s1.length - 1]; 1778 r1 = strtold(s1, &endptr); 1778 r1 = strtold(s1, &endptr); 1779 1779 1780 1780 // atof(s2); … … 1783 1783 1784 1784 cd = cast(cdouble)(r1 + (r2 * 1.0i)); 1785 1785 1786 1786 //Disabled, waiting on a bug fix. 1787 1787 //if (cd > cdouble.max) //same problem the toCfloat() having … … 1792 1792 Loverflow: 1793 1793 conv_overflow(s); 1794 1794 1795 1795 Lerr: 1796 1796 conv_error(s); 1797 return cast(cdouble)0.0e-0+0i; 1797 return cast(cdouble)0.0e-0+0i; 1798 1798 } 1799 1799 … … 1848 1848 if (!b) 1849 1849 goto Lerr; 1850 1850 1851 1851 // atof(s1); 1852 1852 endptr = &s1[s1.length - 1]; 1853 r1 = strtold(s1, &endptr); 1853 r1 = strtold(s1, &endptr); 1854 1854 1855 1855 // atof(s2); … … 1857 1857 r2 = strtold(s2, &endptr); //atof(s2); 1858 1858 1859 //writefln("toCreal() r1=%g, r2=%g, s1=\"%s\", s2=\"%s\", nan=%g", 1859 //writefln("toCreal() r1=%g, r2=%g, s1=\"%s\", s2=\"%s\", nan=%g", 1860 1860 // r1, r2, s1, s2, creal.nan); 1861 1861 1862 1862 if (s1 =="nan" && s2 == "nani") 1863 1863 cr = creal.nan; … … 1865 1865 cr = cast(creal)(r1 + (r2 * 1.0i)); 1866 1866 else 1867 cr = cast(creal)(r1 + 0.0i); 1868 1867 cr = cast(creal)(r1 + 0.0i); 1868 1869 1869 return cr; 1870 1870 1871 1871 Lerr: 1872 1872 conv_error(s); 1873 return cast(creal)0.0e-0+0i; 1873 return cast(creal)0.0e-0+0i; 1874 1874 } 1875 1875 … … 1887 1887 assert(cr == 0.0e-0+0i); 1888 1888 assert(feq(cr, 0.0e-0+0i)); 1889 1889 1890 1890 cr = toCreal("123"); 1891 1891 assert(cr == 123); … … 1893 1893 cr = toCreal("+5"); 1894 1894 assert(cr == 5); 1895 1895 1896 1896 cr = toCreal("-78"); 1897 1897 assert(cr == -78); … … 1901 1901 assert(toString(cr) == toString(creal.min)); 1902 1902 assert(feq(cr, creal.min)); 1903 1903 1904 1904 cr = toCreal(toString(creal.max)); 1905 1905 assert(toString(cr) == toString(creal.max)); … … 1929 1929 int len = s.length; 1930 1930 1931 if (!len) 1931 if (!len) 1932 1932 goto Lerr; 1933 1933 … … 1939 1939 return 1; 1940 1940 } 1941 1941 1942 1942 // Split the original string out into two strings. 1943 1943 for (int i = 1; i < len; i++) … … 1948 1948 if (i + 1 < len - 1) 1949 1949 s2 = s[i + 1..len - 1]; 1950 else 1950 else 1951 1951 s2 = "0e+0i"; 1952 1952 1953 1953 break; 1954 } 1955 1956 // Handle the case when there's only a single value 1954 } 1955 1956 // Handle the case when there's only a single value 1957 1957 // to work with, and set the other string to zero. 1958 1958 if (!s1.length) … … 1961 1961 s2 = "0e+0i"; 1962 1962 } 1963 1964 //writefln( "getComplexStrings() s=\"%s\", s1=\"%s\", s2=\"%s\", len=%d", 1963 1964 //writefln( "getComplexStrings() s=\"%s\", s1=\"%s\", s2=\"%s\", len=%d", 1965 1965 // s, s1, s2, len ); 1966 1966 1967 1967 return 1; 1968 1968 … … 1983 1983 if (rx == ry) 1984 1984 return 1; 1985 1985 1986 1986 if (isnan(rx)) 1987 1987 return cast(bool)isnan(ry); … … 1989 1989 if (isnan(ry)) 1990 1990 return 0; 1991 1991 1992 1992 return cast(bool)(fabs(rx - ry) <= precision); 1993 1993 } … … 2005 2005 if (r1 == r2) 2006 2006 return 1; 2007 2007 2008 2008 if (isnan(r1)) 2009 2009 return cast(bool)isnan(r2); … … 2011 2011 if (isnan(r2)) 2012 2012 return 0; 2013 2013 2014 2014 return cast(bool)(feq(r1, r2, 0.000001L)); 2015 } 2016 2015 } 2016 2017 2017 /* *************************************** 2018 2018 * compare ireals with given precision … … 2025 2025 if (rx == ry) 2026 2026 return 1; 2027 2028 if (isnan(rx)) 2027 2028 if (isnan(rx)) 2029 2029 return cast(bool)isnan(ry); 2030 2030 2031 2031 if (isnan(ry)) 2032 2032 return 0; 2033 2033 2034 2034 return feq(rx, ry, 0.000001L); 2035 } 2035 } 2036 2036 2037 2037 /* *************************************** … … 2046 2046 (cast(real)r1.im == cast(real)r2.im)) 2047 2047 return 1; 2048 2048 2049 2049 if (isnan(r1a)) 2050 2050 return cast(bool)isnan(r2b);
