Path: blob/main/test/embind/test_val_read_pointer.cpp
4150 views
#include <emscripten/bind.h>1#include <emscripten.h>23using namespace emscripten;45struct ValueObject {6ValueObject(): value(43) {};7int value;8};910struct ValueArray {11ValueArray(): x(44) {};12int x;13};1415struct Foo {16Foo(): value(45) {};17int value;18};1920enum Enum { ONE, TWO };2122EMSCRIPTEN_BINDINGS(xxx) {23value_object<ValueObject>("ValueObject")24.field("value", &ValueObject::value);2526value_array<ValueArray>("ValueArray")27.element(&ValueArray::x);2829class_<Foo>("Foo")30.property("value", &Foo::value);3132enum_<Enum>("Enum")33.value("ONE", ONE)34.value("TWO", TWO);35}363738int main() {39EM_ASM(40globalThis["passthrough"] = (arg) => {41return arg;42};43globalThis["passthroughValueObject"] = (arg) => {44return arg.value;45};46globalThis["passthroughValueArray"] = (arg) => {47return arg[0];48};49globalThis["passthroughClass"] = (arg) => {50const value = arg.value;51arg.delete();52return value;53};54globalThis["passthroughMemoryView"] = (arg) => {55return arg[2];56};57);5859// These tests execute all the various readValueFromPointer functions for each60// of the different binding types.61assert(val::global().call<bool>("passthrough", true));62assert(val::global().call<int>("passthrough", 42) == 42);63assert(val::global().call<double>("passthrough", 42.2) == 42.2);64ValueObject vo;65assert(val::global().call<int>("passthroughValueObject", vo) == 43);66ValueArray va;67assert(val::global().call<int>("passthroughValueArray", va) == 44);68Foo foo;69assert(val::global().call<int>("passthroughClass", foo) == 45);70assert(val::global().call<std::string>("passthrough", val("abc")) == "abc");71std::string str = "hello";72assert(val::global().call<std::string>("passthrough", str) == "hello");73std::wstring wstr = L"abc";74assert(val::global().call<std::wstring>("passthrough", wstr) == L"abc");75static const int data[] = {0, 1, 2};76assert(val::global().call<int>("passthroughMemoryView", typed_memory_view(3, data)) == 2);77assert(val::global().call<Enum>("passthrough", ONE) == ONE);7879return 0;80}818283