Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
diff --git a/vm/builtin_bytearray.cpp b/vm/builtin_bytearray.cpp index 90b3ba6..cd6b17b 100644 --- a/vm/builtin_bytearray.cpp +++ b/vm/builtin_bytearray.cpp @@ -1,5 +1,14 @@ #include "builtin.hpp" namespace rubinius { + ByteArray* ByteArray::create(STATE, size_t bytes) { + return (ByteArray*)state->om->new_object_bytes(G(bytearray), bytes); + } + void ByteArray::Info::mark(OBJECT t, ObjectMark& mark) { } + + // Ruby.primitive :bytearray_size + INTEGER ByteArray::size(STATE) { + return Object::i2n(SIZE_OF_BODY(this)); + } } diff --git a/vm/builtin_bytearray.hpp b/vm/builtin_bytearray.hpp index 393a979..2636bc4 100644 --- a/vm/builtin_bytearray.hpp +++ b/vm/builtin_bytearray.hpp @@ -8,6 +8,7 @@ namespace rubinius { const static object_type type = ByteArrayType; static ByteArray* create(STATE, size_t bytes); + INTEGER size(STATE); class Info : public TypeInfo { public: diff --git a/vm/builtin_string.cpp b/vm/builtin_string.cpp index 0fdff1c..bb8164f 100644 --- a/vm/builtin_string.cpp +++ b/vm/builtin_string.cpp @@ -3,16 +3,13 @@ #include "objects.hpp" #include "vm.hpp" #include "objectmemory.hpp" +#include "builtin_bytearray.hpp" #define HashPrime 16777619 #define MASK_28 (((unsigned int)1<<28)-1) namespace rubinius { - ByteArray* ByteArray::create(STATE, size_t bytes) { - return (ByteArray*)state->om->new_object_bytes(G(bytearray), bytes); - } - String* String::create(STATE, const char* str, size_t bytes) { String *so; diff --git a/vm/test/test_bytearray.hpp b/vm/test/test_bytearray.hpp new file mode 100644 index 0000000..bd3c744 --- /dev/null +++ b/vm/test/test_bytearray.hpp @@ -0,0 +1,42 @@ +#include "objects.hpp" +#include "vm.hpp" +#include "builtin_bytearray.hpp" + +#include <cxxtest/TestSuite.h> + +using namespace rubinius; + +class TestByteArray : public CxxTest::TestSuite { + public: + + VM * state; + + void setUp() { + state = new VM(); + } + + void tearDown() { + delete state; + } + + void test_size() { + ByteArray* b; + + b = ByteArray::create(state, 0); + TS_ASSERT_EQUALS(b->size(state)->n2i(), 4); + + b = ByteArray::create(state, 54); + TS_ASSERT_EQUALS(b->size(state)->n2i(), 56); + + b = ByteArray::create(state, 55); + TS_ASSERT_EQUALS(b->size(state)->n2i(), 60); + + b = ByteArray::create(state, 58); + TS_ASSERT_EQUALS(b->size(state)->n2i(), 60); + + b = ByteArray::create(state, 59); + TS_ASSERT_EQUALS(b->size(state)->n2i(), 64); + } + +}; +
This paste will be private.
From the Design Piracy series on my blog: