use of org.eclipse.wst.xml.xpath2.processor.internal.types.XSFloat in project webtools.sourceediting by eclipse.
the class TestBugs method testNegativeZeroFloat.
public void testNegativeZeroFloat() throws Exception {
// Bug 279406
bundle = Platform.getBundle("org.w3c.xqts.testsuite");
URL fileURL = bundle.getEntry("/TestSources/emptydoc.xml");
loadDOMDocument(fileURL);
// Get XML Schema Information for the Document
XSModel schema = getGrammar();
setupDynamicContext(schema);
String xpath = "-(xs:float('0'))";
compileXPath(xpath);
ResultSequence rs = evaluate(domDoc);
XSFloat result = (XSFloat) rs.first();
String actual = result.getStringValue();
assertEquals("-0", actual);
}
use of org.eclipse.wst.xml.xpath2.processor.internal.types.XSFloat in project webtools.sourceediting by eclipse.
the class FsPlus method convert_args.
/**
* Convert and promote arguments for operation.
*
* @param args
* input arguments.
* @param sc
* @throws DynamicError
* Dynamic error.
* @return Result of conversion.
*/
private static Collection convert_args(Collection args) throws DynamicError {
Collection result = new ArrayList();
// Keep track of numeric types for promotion
boolean has_float = false;
boolean has_double = false;
// atomize arguments
for (Iterator i = args.iterator(); i.hasNext(); ) {
org.eclipse.wst.xml.xpath2.api.ResultSequence rs = FnData.atomize((org.eclipse.wst.xml.xpath2.api.ResultSequence) i.next());
if (rs.empty())
return new ArrayList();
if (rs.size() > 1)
throw new DynamicError(TypeError.invalid_type(null));
AnyType arg = (AnyType) rs.item(0);
if (arg instanceof XSUntypedAtomic) {
arg = new XSDouble(arg.getStringValue());
}
if (arg instanceof XSDouble)
has_double = true;
if (arg instanceof XSFloat)
has_float = true;
result.add(ResultBuffer.wrap(arg));
}
if (has_double)
has_float = false;
if (has_double || has_float) {
Collection result2 = new ArrayList();
// promote arguments
for (Iterator i = result.iterator(); i.hasNext(); ) {
org.eclipse.wst.xml.xpath2.api.ResultSequence rs = (org.eclipse.wst.xml.xpath2.api.ResultSequence) i.next();
Item arg = rs.item(0);
if (has_double && (arg instanceof XSFloat)) {
arg = new XSDouble(((XSFloat) arg).float_value());
} else if (has_double && (arg instanceof XSDecimal)) {
arg = new XSDouble(((XSDecimal) arg).getValue().doubleValue());
} else if (has_float && (arg instanceof XSDecimal)) {
arg = new XSFloat(((XSDecimal) arg).getValue().floatValue());
}
result2.add(arg);
}
return result2;
}
return result;
}
use of org.eclipse.wst.xml.xpath2.processor.internal.types.XSFloat in project webtools.sourceediting by eclipse.
the class XSFloat method minus.
/**
* Mathematical subtraction operator between this XSFloat and the supplied
* ResultSequence.
*
* @param arg
* The ResultSequence to perform a subtraction with
* @return A XSFloat consisting of the result of the mathematical
* subtraction.
*/
public ResultSequence minus(ResultSequence arg) throws DynamicError {
ResultSequence carg = constructor(arg);
Item at = get_single_arg(carg);
if (!(at instanceof XSFloat))
DynamicError.throw_type_error();
XSFloat val = (XSFloat) at;
return ResultSequenceFactory.create_new(new XSFloat(float_value() - val.float_value()));
}
use of org.eclipse.wst.xml.xpath2.processor.internal.types.XSFloat in project webtools.sourceediting by eclipse.
the class XSFloat method idiv.
/**
* Mathematical integer division operator between this XSFloat and the
* supplied ResultSequence.
*
* @param arg
* The ResultSequence to perform an integer division with
* @return A XSInteger consisting of the result of the mathematical integer
* division.
*/
public ResultSequence idiv(ResultSequence arg) throws DynamicError {
ResultSequence carg = convertResultSequence(arg);
XSFloat val = (XSFloat) get_single_type(carg, XSFloat.class);
if (this.nan() || val.nan())
throw DynamicError.numeric_overflow("Dividend or divisor is NaN");
if (this.infinite())
throw DynamicError.numeric_overflow("Dividend is infinite");
if (val.zero())
throw DynamicError.div_zero(null);
BigDecimal result = BigDecimal.valueOf((new Float((float_value() / val.float_value()))).longValue());
return ResultSequenceFactory.create_new(new XSInteger(result.toBigInteger()));
}
use of org.eclipse.wst.xml.xpath2.processor.internal.types.XSFloat in project webtools.sourceediting by eclipse.
the class XSFloat method gt.
/**
* Comparison between this number and the supplied representation.
*
* @param arg
* The datatype to compare with
* @return True if the supplied representation is a smaller number than the
* one stored. False otherwise
* @throws DynamicError
*/
public boolean gt(AnyType arg, DynamicContext context) throws DynamicError {
Item carg = convertArg(arg);
XSFloat val = (XSFloat) get_single_type(carg, XSFloat.class);
return float_value() > val.float_value();
}
Aggregations