blob: 9bf43bfc21fb4e76d924f170c324ea8bd7b544d2 [file] [log] [blame] [edit]
// Copyright 2016 The Emscripten Authors. All rights reserved.
// Emscripten is available under two separate licenses, the MIT license and the
// University of Illinois/NCSA Open Source License. Both these licenses can be
// found in the LICENSE file.
#include <vector>
#include <set>
#include <map>
#include <assert.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <emscripten.h>
union TestBase {
char c;
int i;
float f;
};
// Keep in mind that it is undefined behavior to read from the non active member of a union in C++
// Don't add tests that assign to 1 member but check another
void test_1() {
TestBase tb;
tb.c = 11;
EM_ASM_INT({
var decoded = Module['cyberdwarf'].decode_from_stack($0, "tb", 100)["union TestBase"];
test_assert("char == 11", decoded["char : c"] == 11);
}, &tb);
tb.i = 1337;
EM_ASM_INT({
var decoded = Module['cyberdwarf'].decode_from_stack($0, "tb", 100)["union TestBase"];
test_assert("int == 1337", decoded["int : i"] == 1337);
}, &tb);
tb.f = 10000;
EM_ASM_INT({
var decoded = Module['cyberdwarf'].decode_from_stack($0, "tb", 100)["union TestBase"];
test_assert("float == 10000", decoded["float : f"] == 10000);
}, &tb);
}
int main(int argc, char *argv[]) {
EM_ASM(init_cd_test("test_union"));
test_1();
}