diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java index d194d58219e4d6e254e1bcf4bd625683cae1121f..13458cab6101bc8ffaf836f50d4fe4fb782b79e2 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java @@ -552,6 +552,7 @@ public class BasePackage extends RBuiltinPackage { add(RawFunctions.CharToRaw.class, RawFunctionsFactory.CharToRawNodeGen::create); add(RawFunctions.RawToChar.class, RawFunctionsFactory.RawToCharNodeGen::create); add(RawFunctions.RawShift.class, RawFunctionsFactory.RawShiftNodeGen::create); + add(RawToBits.class, RawToBitsNodeGen::create); add(NumericalFunctions.Re.class, NumericalFunctionsFactory.ReNodeGen::create); add(ReadDCF.class, ReadDCFNodeGen::create); add(ReadREnviron.class, ReadREnvironNodeGen::create); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RawToBits.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RawToBits.java new file mode 100644 index 0000000000000000000000000000000000000000..ec205c198a4bf9870dc143127a22bf4188ece51a --- /dev/null +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RawToBits.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.truffle.r.nodes.builtin.base; + +import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; +import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; + +import com.oracle.truffle.api.dsl.Specialization; +import com.oracle.truffle.r.nodes.builtin.CastBuilder; +import com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef; +import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; +import com.oracle.truffle.r.runtime.RError; +import com.oracle.truffle.r.runtime.builtins.RBuiltin; +import com.oracle.truffle.r.runtime.data.RDataFactory; +import com.oracle.truffle.r.runtime.data.model.RAbstractRawVector; + +@RBuiltin(name = "rawToBits", kind = INTERNAL, parameterNames = {"x"}, behavior = PURE) +public abstract class RawToBits extends RBuiltinNode { + + @Override + protected void createCasts(CastBuilder casts) { + casts.arg("x").mustNotBeNull(RError.SHOW_CALLER, RError.Message.ARGUMENT_MUST_BE_RAW_VECTOR, "x").mustBe(Predef.rawValue(), RError.SHOW_CALLER, + RError.Message.ARGUMENT_MUST_BE_RAW_VECTOR, "x"); + } + + @Specialization + protected RAbstractRawVector rawToBits(RAbstractRawVector x) { + byte[] result = new byte[8 * x.getLength()]; + int pos = 0; + for (int j = 0; j < x.getLength(); j++) { + byte temp = x.getRawDataAt(j); + for (int i = 0; i < 8; i++) { + result[pos++] = (byte) (temp & 1); + temp >>= 1; + } + } + return RDataFactory.createRawVector(result); + } +} diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test index 7de3eb01f6607e1aedcd5ff965a1b2573b5b5109..16c87fde481a0f8f4542f4f9f6f1e188b815b816 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test @@ -41162,6 +41162,186 @@ Error in rawShift(x = as.raw(c(0x00, 0x01, 0x20, 0x7f, 0x80, 0xff, 0x7b : Error in rawShift(x = as.raw(c(0x00, 0x01, 0x20, 0x7f, 0x80, 0xff, 0x7b : argument 'shift' must be a small integer +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits('a') +Error in rawToBits("a") : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(01) +Error in rawToBits(1) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(0:255) +Error in rawToBits(0:255) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(NA) +Error in rawToBits(NA) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(NULL) +Error in rawToBits(NULL) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(as.raw(0)) +[1] 00 00 00 00 00 00 00 00 + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(as.raw(0:255)) + [1] 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 + [25] 01 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 01 00 01 00 00 00 00 00 + [49] 00 01 01 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 01 00 00 00 00 + [73] 01 00 00 01 00 00 00 00 00 01 00 01 00 00 00 00 01 01 00 01 00 00 00 00 + [97] 00 00 01 01 00 00 00 00 01 00 01 01 00 00 00 00 00 01 01 01 00 00 00 00 + [121] 01 01 01 01 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 + [145] 00 01 00 00 01 00 00 00 01 01 00 00 01 00 00 00 00 00 01 00 01 00 00 00 + [169] 01 00 01 00 01 00 00 00 00 01 01 00 01 00 00 00 01 01 01 00 01 00 00 00 + [193] 00 00 00 01 01 00 00 00 01 00 00 01 01 00 00 00 00 01 00 01 01 00 00 00 + [217] 01 01 00 01 01 00 00 00 00 00 01 01 01 00 00 00 01 00 01 01 01 00 00 00 + [241] 00 01 01 01 01 00 00 00 01 01 01 01 01 00 00 00 00 00 00 00 00 01 00 00 + [265] 01 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 01 01 00 00 00 01 00 00 + [289] 00 00 01 00 00 01 00 00 01 00 01 00 00 01 00 00 00 01 01 00 00 01 00 00 + [313] 01 01 01 00 00 01 00 00 00 00 00 01 00 01 00 00 01 00 00 01 00 01 00 00 + [337] 00 01 00 01 00 01 00 00 01 01 00 01 00 01 00 00 00 00 01 01 00 01 00 00 + [361] 01 00 01 01 00 01 00 00 00 01 01 01 00 01 00 00 01 01 01 01 00 01 00 00 + [385] 00 00 00 00 01 01 00 00 01 00 00 00 01 01 00 00 00 01 00 00 01 01 00 00 + [409] 01 01 00 00 01 01 00 00 00 00 01 00 01 01 00 00 01 00 01 00 01 01 00 00 + [433] 00 01 01 00 01 01 00 00 01 01 01 00 01 01 00 00 00 00 00 01 01 01 00 00 + [457] 01 00 00 01 01 01 00 00 00 01 00 01 01 01 00 00 01 01 00 01 01 01 00 00 + [481] 00 00 01 01 01 01 00 00 01 00 01 01 01 01 00 00 00 01 01 01 01 01 00 00 + [505] 01 01 01 01 01 01 00 00 00 00 00 00 00 00 01 00 01 00 00 00 00 00 01 00 + [529] 00 01 00 00 00 00 01 00 01 01 00 00 00 00 01 00 00 00 01 00 00 00 01 00 + [553] 01 00 01 00 00 00 01 00 00 01 01 00 00 00 01 00 01 01 01 00 00 00 01 00 + [577] 00 00 00 01 00 00 01 00 01 00 00 01 00 00 01 00 00 01 00 01 00 00 01 00 + [601] 01 01 00 01 00 00 01 00 00 00 01 01 00 00 01 00 01 00 01 01 00 00 01 00 + [625] 00 01 01 01 00 00 01 00 01 01 01 01 00 00 01 00 00 00 00 00 01 00 01 00 + [649] 01 00 00 00 01 00 01 00 00 01 00 00 01 00 01 00 01 01 00 00 01 00 01 00 + [673] 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 00 01 01 00 01 00 01 00 + [697] 01 01 01 00 01 00 01 00 00 00 00 01 01 00 01 00 01 00 00 01 01 00 01 00 + [721] 00 01 00 01 01 00 01 00 01 01 00 01 01 00 01 00 00 00 01 01 01 00 01 00 + [745] 01 00 01 01 01 00 01 00 00 01 01 01 01 00 01 00 01 01 01 01 01 00 01 00 + [769] 00 00 00 00 00 01 01 00 01 00 00 00 00 01 01 00 00 01 00 00 00 01 01 00 + [793] 01 01 00 00 00 01 01 00 00 00 01 00 00 01 01 00 01 00 01 00 00 01 01 00 + [817] 00 01 01 00 00 01 01 00 01 01 01 00 00 01 01 00 00 00 00 01 00 01 01 00 + [841] 01 00 00 01 00 01 01 00 00 01 00 01 00 01 01 00 01 01 00 01 00 01 01 00 + [865] 00 00 01 01 00 01 01 00 01 00 01 01 00 01 01 00 00 01 01 01 00 01 01 00 + [889] 01 01 01 01 00 01 01 00 00 00 00 00 01 01 01 00 01 00 00 00 01 01 01 00 + [913] 00 01 00 00 01 01 01 00 01 01 00 00 01 01 01 00 00 00 01 00 01 01 01 00 + [937] 01 00 01 00 01 01 01 00 00 01 01 00 01 01 01 00 01 01 01 00 01 01 01 00 + [961] 00 00 00 01 01 01 01 00 01 00 00 01 01 01 01 00 00 01 00 01 01 01 01 00 + [985] 01 01 00 01 01 01 01 00 00 00 01 01 01 01 01 00 01 00 01 01 01 01 01 00 +[1009] 00 01 01 01 01 01 01 00 01 01 01 01 01 01 01 00 00 00 00 00 00 00 00 01 +[1033] 01 00 00 00 00 00 00 01 00 01 00 00 00 00 00 01 01 01 00 00 00 00 00 01 +[1057] 00 00 01 00 00 00 00 01 01 00 01 00 00 00 00 01 00 01 01 00 00 00 00 01 +[1081] 01 01 01 00 00 00 00 01 00 00 00 01 00 00 00 01 01 00 00 01 00 00 00 01 +[1105] 00 01 00 01 00 00 00 01 01 01 00 01 00 00 00 01 00 00 01 01 00 00 00 01 +[1129] 01 00 01 01 00 00 00 01 00 01 01 01 00 00 00 01 01 01 01 01 00 00 00 01 +[1153] 00 00 00 00 01 00 00 01 01 00 00 00 01 00 00 01 00 01 00 00 01 00 00 01 +[1177] 01 01 00 00 01 00 00 01 00 00 01 00 01 00 00 01 01 00 01 00 01 00 00 01 +[1201] 00 01 01 00 01 00 00 01 01 01 01 00 01 00 00 01 00 00 00 01 01 00 00 01 +[1225] 01 00 00 01 01 00 00 01 00 01 00 01 01 00 00 01 01 01 00 01 01 00 00 01 +[1249] 00 00 01 01 01 00 00 01 01 00 01 01 01 00 00 01 00 01 01 01 01 00 00 01 +[1273] 01 01 01 01 01 00 00 01 00 00 00 00 00 01 00 01 01 00 00 00 00 01 00 01 +[1297] 00 01 00 00 00 01 00 01 01 01 00 00 00 01 00 01 00 00 01 00 00 01 00 01 +[1321] 01 00 01 00 00 01 00 01 00 01 01 00 00 01 00 01 01 01 01 00 00 01 00 01 +[1345] 00 00 00 01 00 01 00 01 01 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 +[1369] 01 01 00 01 00 01 00 01 00 00 01 01 00 01 00 01 01 00 01 01 00 01 00 01 +[1393] 00 01 01 01 00 01 00 01 01 01 01 01 00 01 00 01 00 00 00 00 01 01 00 01 +[1417] 01 00 00 00 01 01 00 01 00 01 00 00 01 01 00 01 01 01 00 00 01 01 00 01 +[1441] 00 00 01 00 01 01 00 01 01 00 01 00 01 01 00 01 00 01 01 00 01 01 00 01 +[1465] 01 01 01 00 01 01 00 01 00 00 00 01 01 01 00 01 01 00 00 01 01 01 00 01 +[1489] 00 01 00 01 01 01 00 01 01 01 00 01 01 01 00 01 00 00 01 01 01 01 00 01 +[1513] 01 00 01 01 01 01 00 01 00 01 01 01 01 01 00 01 01 01 01 01 01 01 00 01 +[1537] 00 00 00 00 00 00 01 01 01 00 00 00 00 00 01 01 00 01 00 00 00 00 01 01 +[1561] 01 01 00 00 00 00 01 01 00 00 01 00 00 00 01 01 01 00 01 00 00 00 01 01 +[1585] 00 01 01 00 00 00 01 01 01 01 01 00 00 00 01 01 00 00 00 01 00 00 01 01 +[1609] 01 00 00 01 00 00 01 01 00 01 00 01 00 00 01 01 01 01 00 01 00 00 01 01 +[1633] 00 00 01 01 00 00 01 01 01 00 01 01 00 00 01 01 00 01 01 01 00 00 01 01 +[1657] 01 01 01 01 00 00 01 01 00 00 00 00 01 00 01 01 01 00 00 00 01 00 01 01 +[1681] 00 01 00 00 01 00 01 01 01 01 00 00 01 00 01 01 00 00 01 00 01 00 01 01 +[1705] 01 00 01 00 01 00 01 01 00 01 01 00 01 00 01 01 01 01 01 00 01 00 01 01 +[1729] 00 00 00 01 01 00 01 01 01 00 00 01 01 00 01 01 00 01 00 01 01 00 01 01 +[1753] 01 01 00 01 01 00 01 01 00 00 01 01 01 00 01 01 01 00 01 01 01 00 01 01 +[1777] 00 01 01 01 01 00 01 01 01 01 01 01 01 00 01 01 00 00 00 00 00 01 01 01 +[1801] 01 00 00 00 00 01 01 01 00 01 00 00 00 01 01 01 01 01 00 00 00 01 01 01 +[1825] 00 00 01 00 00 01 01 01 01 00 01 00 00 01 01 01 00 01 01 00 00 01 01 01 +[1849] 01 01 01 00 00 01 01 01 00 00 00 01 00 01 01 01 01 00 00 01 00 01 01 01 +[1873] 00 01 00 01 00 01 01 01 01 01 00 01 00 01 01 01 00 00 01 01 00 01 01 01 +[1897] 01 00 01 01 00 01 01 01 00 01 01 01 00 01 01 01 01 01 01 01 00 01 01 01 +[1921] 00 00 00 00 01 01 01 01 01 00 00 00 01 01 01 01 00 01 00 00 01 01 01 01 +[1945] 01 01 00 00 01 01 01 01 00 00 01 00 01 01 01 01 01 00 01 00 01 01 01 01 +[1969] 00 01 01 00 01 01 01 01 01 01 01 00 01 01 01 01 00 00 00 01 01 01 01 01 +[1993] 01 00 00 01 01 01 01 01 00 01 00 01 01 01 01 01 01 01 00 01 01 01 01 01 +[2017] 00 00 01 01 01 01 01 01 01 00 01 01 01 01 01 01 00 01 01 01 01 01 01 01 +[2041] 01 01 01 01 01 01 01 01 + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(as.raw(1)) +[1] 01 00 00 00 00 00 00 00 + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(as.raw(1)[1]) +[1] 01 00 00 00 00 00 00 00 + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(as.raw(255)) +[1] 01 01 01 01 01 01 01 01 + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(as.raw(c(0,1,255))) + [1] 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 01 01 01 01 01 01 01 + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(c(NULL)) +Error in rawToBits(c(NULL)) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(c(as.raw(1), as.raw(255))) + [1] 01 00 00 00 00 00 00 00 01 01 01 01 01 01 01 01 + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(double(0)) +Error in rawToBits(double(0)) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(environment) +Error in rawToBits(environment) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(integer(0)) +Error in rawToBits(integer(0)) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(list(NULL)) +Error in rawToBits(list(NULL)) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(list(list())) +Error in rawToBits(list(list())) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(new.env()) +Error in rawToBits(new.env()) : argument 'x' must be a raw vector + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(raw(0)) +raw(0) + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(raw(0), raw(1)) +Error in rawToBits(raw(0), raw(1)) : unused argument (raw(1)) + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(raw(10)) + [1] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +[26] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +[51] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +[76] 00 00 00 00 00 + +##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToBits.testRawToBits# +#rawToBits(stdout()) +Error in rawToBits(stdout()) : argument 'x' must be a raw vector + ##com.oracle.truffle.r.test.builtins.TestBuiltin_rawToChar.testrawToChar1# #argv <- structure(list(x = as.raw(c(115, 116, 114, 105, 110, 103))), .Names = 'x');do.call('rawToChar', argv) [1] "string" diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rawToBits.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rawToBits.java new file mode 100644 index 0000000000000000000000000000000000000000..c8f0a4c56f73c0e74f542fcc942964bbbe25d610 --- /dev/null +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rawToBits.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.truffle.r.test.builtins; + +import org.junit.Test; + +import com.oracle.truffle.r.test.TestBase; + +// Checkstyle: stop line length check +public class TestBuiltin_rawToBits extends TestBase { + + @Test + public void testRawToBits() { + assertEval("rawToBits(raw(0))"); + assertEval("rawToBits(raw(10))"); + assertEval("rawToBits(as.raw(0))"); + assertEval("rawToBits(as.raw(1))"); + assertEval("rawToBits(as.raw(255))"); + assertEval("rawToBits(c(as.raw(1), as.raw(255)))"); + assertEval("rawToBits(raw(0), raw(1))"); + assertEval("rawToBits(as.raw(0:255))"); + assertEval("rawToBits(as.raw(c(0,1,255)))"); + + assertEval("rawToBits(as.raw(1)[1])"); + + assertEval("rawToBits(0:255)"); + assertEval("rawToBits(NA)"); + assertEval("rawToBits(NULL)"); + assertEval("rawToBits(list(list()))"); + assertEval("rawToBits(list(NULL))"); + assertEval("rawToBits(c(NULL))"); + + assertEval("rawToBits(integer(0))"); + assertEval("rawToBits(double(0))"); + + assertEval("rawToBits(01)"); + assertEval("rawToBits('a')"); + + assertEval("rawToBits(new.env())"); + assertEval("rawToBits(environment)"); + assertEval("rawToBits(stdout())"); + } +}