Revision: 4115 http://vexi.svn.sourceforge.net/vexi/?rev=4115&view=rev Author: mkpg2 Date: 2011-05-09 17:17:58 +0000 (Mon, 09 May 2011)
Log Message: ----------- Fix Decimal. - implement equals - cast method Modified Paths: -------------- trunk/org.vexi-library.js/src/main/jpp/org/ibex/js/JSDecimal.jpp trunk/org.vexi-library.js/src/test/java/test/js/exec/decimal/methods.js Modified: trunk/org.vexi-library.js/src/main/jpp/org/ibex/js/JSDecimal.jpp =================================================================== --- trunk/org.vexi-library.js/src/main/jpp/org/ibex/js/JSDecimal.jpp 2011-05-09 02:44:41 UTC (rev 4114) +++ trunk/org.vexi-library.js/src/main/jpp/org/ibex/js/JSDecimal.jpp 2011-05-09 17:17:58 UTC (rev 4115) @@ -54,22 +54,25 @@ return null; } } - private BigDecimal cast(JS[] args, int index) throws JSExn{ - JS arg = (args.length<=index)?null:args[index]; + + private BigDecimal cast(JS arg) throws JSExn{ if(arg instanceof JSDecimal) { return ((JSDecimal)arg).decimal; - }else if(arg instanceof JSNumber) { + }else if(arg instanceof JSNumber){ if(JSU.isInt(arg)){ return new BigDecimal(JSU.toLong(arg)); }else{ return new BigDecimal(JSU.toDouble(arg)); } }else{ - BigDecimal r = tryParseString(arg); - if(r!=null) return r; + return tryParseString(arg); } + } + private BigDecimal cast(JS[] args, int index) throws JSExn{ + JS arg = (args.length<=index)?null:args[index]; + BigDecimal r = cast(arg); + if(r!=null) return r; throw new JSExn("Expected argument "+index+" to be valid decimal, got: "+JSU.toString(arg)); - } public JS new_(JS[] args) throws JSExn { @@ -90,6 +93,7 @@ case "remainder": return METHOD; case "subtract": return METHOD; + case "cast": return METHOD; case "tryParseString": return METHOD; //#end return super.get(key); @@ -98,11 +102,18 @@ public JS callMethod(JS this_, JS method, JS[] args) throws JSExn { String methodStr = JSU.toString(method); if(args.length==1){ - if("tryParseString".equals(methodStr)){ + JS arg = args[0]; + //#switch(methodStr) + case "cast": + if(arg instanceof JSDecimal) return arg; + BigDecimal r = cast(arg); + if(r==null) return null; + return new JSDecimal(r); + case "tryParseString": BigDecimal r = tryParseString(args[0]); if(r==null) return null; return new JSDecimal(r); - } + //#end } if(args.length>=2){ @@ -172,6 +183,14 @@ return super.callMethod(this_, method, args); } + public int hashCode(){ return decimal.hashCode(); } + + public boolean equals(Object obj) { + if(!(obj instanceof JSDecimal)) return false; + JSDecimal b = (JSDecimal)obj; + return decimal.equals(b.decimal); + } + // REMARK may implement JSNumber // int toInt() { return decimal.intValue(); } // long toLong(){ return decimal.longValue(); } Modified: trunk/org.vexi-library.js/src/test/java/test/js/exec/decimal/methods.js =================================================================== --- trunk/org.vexi-library.js/src/test/java/test/js/exec/decimal/methods.js 2011-05-09 02:44:41 UTC (rev 4114) +++ trunk/org.vexi-library.js/src/test/java/test/js/exec/decimal/methods.js 2011-05-09 17:17:58 UTC (rev 4115) @@ -22,6 +22,12 @@ assertEquals(null, Decimal.tryParseString("abc")); assertEquals("-0.1", Decimal.tryParseString("-.1")+""); + + + +assertEquals(d123, Decimal.cast("123")); +assertEquals(d123, Decimal.cast(123)); +assertEquals(d123, Decimal.cast(d123)); //assertEquals("-0.1", Decimal.tryParseString("-.")+""); //assertEquals("102.5000", Decimal.remainder(d123.round(4),d1_23.round(1))+""); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ WhatsUp Gold - Download Free Network Management Software The most intuitive, comprehensive, and cost-effective network management toolset available today. Delivers lowest initial acquisition cost and overall TCO of any competing solution. http://p.sf.net/sfu/whatsupgold-sd _______________________________________________ Vexi-svn mailing list Vexi-svn@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/vexi-svn