TEST_F(FFITest, CStackWithString) { CStack cstack; cstack.push(Object::makeFixnum(3), CStack::SIGNATURE_INT); cstack.push("hige", CStack::SIGNATURE_POINTER); intptr_t* p = cstack.reg(); EXPECT_EQ(2, cstack.regCount()); EXPECT_EQ(3, p[0]); EXPECT_STREQ("hige", (char*)p[1]); }
TEST_F(FFITest, CStackWithByteVector) { CStack cstack; Object b = Object::makeByteVector(2); ByteVector* const bv = b.toByteVector(); bv->u8Set(0, 1); bv->u8Set(1, 2); cstack.push(b, CStack::SIGNATURE_POINTER); cstack.push("hige", CStack::SIGNATURE_POINTER); intptr_t* p = cstack.reg(); EXPECT_EQ(2, cstack.regCount()); EXPECT_EQ(1, ((uint8_t*)(p[0]))[0]); EXPECT_EQ(2, ((uint8_t*)(p[0]))[1]); EXPECT_STREQ("hige", (char*)p[1]); }
TEST_F(FFITest, CStackWithFixnum) { CStack cstack; EXPECT_TRUE(cstack.push(Object::makeFixnum(3), CStack::SIGNATURE_INT)); EXPECT_TRUE(cstack.push(Object::makeFixnum(4), CStack::SIGNATURE_INT)); EXPECT_TRUE(cstack.push(Object::makeFixnum(-5), CStack::SIGNATURE_INT)); EXPECT_TRUE(cstack.push(Bignum::makeIntegerFromU32(0xffffffff), CStack::SIGNATURE_INT64)); intptr_t* p = cstack.reg(); EXPECT_EQ(4, cstack.regCount()); EXPECT_EQ(3, p[0]); EXPECT_EQ(4, p[1]); EXPECT_EQ(-5, p[2]); const uint32_t x = 0xffffffff; const uint32_t y = p[3]; EXPECT_EQ(x, y); }