1 #include <js_native_api.h>
2 #include "../common.h"
3 #include "../entry_point.h"
4 #include "test_null.h"
5 
Test(napi_env env, napi_callback_info info)6 static napi_value Test(napi_env env, napi_callback_info info) {
7   size_t argc = 1;
8   napi_value args[1];
9   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
10 
11   NODE_API_ASSERT(env, argc >= 1, "Wrong number of arguments");
12 
13   napi_valuetype valuetype0;
14   NODE_API_CALL(env, napi_typeof(env, args[0], &valuetype0));
15 
16   NODE_API_ASSERT(env, valuetype0 == napi_number,
17       "Wrong type of arguments. Expects a number as first argument.");
18 
19   double input;
20   NODE_API_CALL(env, napi_get_value_double(env, args[0], &input));
21 
22   napi_value output;
23   NODE_API_CALL(env, napi_create_double(env, input, &output));
24 
25   return output;
26 }
27 
TestUint32Truncation(napi_env env, napi_callback_info info)28 static napi_value TestUint32Truncation(napi_env env, napi_callback_info info) {
29   size_t argc = 1;
30   napi_value args[1];
31   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
32 
33   NODE_API_ASSERT(env, argc >= 1, "Wrong number of arguments");
34 
35   napi_valuetype valuetype0;
36   NODE_API_CALL(env, napi_typeof(env, args[0], &valuetype0));
37 
38   NODE_API_ASSERT(env, valuetype0 == napi_number,
39       "Wrong type of arguments. Expects a number as first argument.");
40 
41   uint32_t input;
42   NODE_API_CALL(env, napi_get_value_uint32(env, args[0], &input));
43 
44   napi_value output;
45   NODE_API_CALL(env, napi_create_uint32(env, input, &output));
46 
47   return output;
48 }
49 
TestInt32Truncation(napi_env env, napi_callback_info info)50 static napi_value TestInt32Truncation(napi_env env, napi_callback_info info) {
51   size_t argc = 1;
52   napi_value args[1];
53   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
54 
55   NODE_API_ASSERT(env, argc >= 1, "Wrong number of arguments");
56 
57   napi_valuetype valuetype0;
58   NODE_API_CALL(env, napi_typeof(env, args[0], &valuetype0));
59 
60   NODE_API_ASSERT(env, valuetype0 == napi_number,
61       "Wrong type of arguments. Expects a number as first argument.");
62 
63   int32_t input;
64   NODE_API_CALL(env, napi_get_value_int32(env, args[0], &input));
65 
66   napi_value output;
67   NODE_API_CALL(env, napi_create_int32(env, input, &output));
68 
69   return output;
70 }
71 
TestInt64Truncation(napi_env env, napi_callback_info info)72 static napi_value TestInt64Truncation(napi_env env, napi_callback_info info) {
73   size_t argc = 1;
74   napi_value args[1];
75   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
76 
77   NODE_API_ASSERT(env, argc >= 1, "Wrong number of arguments");
78 
79   napi_valuetype valuetype0;
80   NODE_API_CALL(env, napi_typeof(env, args[0], &valuetype0));
81 
82   NODE_API_ASSERT(env, valuetype0 == napi_number,
83       "Wrong type of arguments. Expects a number as first argument.");
84 
85   int64_t input;
86   NODE_API_CALL(env, napi_get_value_int64(env, args[0], &input));
87 
88   napi_value output;
89   NODE_API_CALL(env, napi_create_int64(env, input, &output));
90 
91   return output;
92 }
93 
94 EXTERN_C_START
Init(napi_env env, napi_value exports)95 napi_value Init(napi_env env, napi_value exports) {
96   napi_property_descriptor descriptors[] = {
97     DECLARE_NODE_API_PROPERTY("Test", Test),
98     DECLARE_NODE_API_PROPERTY("TestInt32Truncation", TestInt32Truncation),
99     DECLARE_NODE_API_PROPERTY("TestUint32Truncation", TestUint32Truncation),
100     DECLARE_NODE_API_PROPERTY("TestInt64Truncation", TestInt64Truncation),
101   };
102 
103   NODE_API_CALL(env, napi_define_properties(
104       env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors));
105 
106   init_test_null(env, exports);
107 
108   return exports;
109 }
110 EXTERN_C_END
111