Dmitry Timoshkov : rpcrt4/tests: Add some tests for marshalling embedded conformant arrays.
Alexandre Julliard
julliard at winehq.org
Mon Jun 8 15:19:55 CDT 2020
Module: wine
Branch: master
Commit: 59c0dbb642e788a8d28c2b653545566db6346cdb
URL: https://source.winehq.org/git/wine.git/?a=commit;h=59c0dbb642e788a8d28c2b653545566db6346cdb
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Mon Jun 8 16:54:05 2020 +0800
rpcrt4/tests: Add some tests for marshalling embedded conformant arrays.
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/rpcrt4/tests/server.c | 54 ++++++++++++++++++++++++++++++++++++++++++++
dlls/rpcrt4/tests/server.idl | 27 ++++++++++++++++++++++
2 files changed, 81 insertions(+)
diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c
index 6ac2f74227..d665568831 100644
--- a/dlls/rpcrt4/tests/server.c
+++ b/dlls/rpcrt4/tests/server.c
@@ -94,6 +94,9 @@ static int (__cdecl *sum_cps)(cps_t *cps);
static int (__cdecl *sum_cpsc)(cpsc_t *cpsc);
static int (__cdecl *get_cpsc)(int n, cpsc_t *cpsc);
static int (__cdecl *sum_complex_array)(int n, refpint_t pi[]);
+static int (__cdecl *sum_blob)(cs_blob_t *blob);
+static int (__cdecl *sum_data)(cs_data_t *data);
+static int (__cdecl *sum_container)(cs_container_t *container);
static int (__cdecl *square_puint)(puint_t p);
static int (__cdecl *sum_puints)(puints_t *p);
static int (__cdecl *sum_cpuints)(cpuints_t *p);
@@ -185,6 +188,9 @@ static void (__cdecl *test_handle)(ctx_handle_t ctx_handle);
X(sum_cpsc) \
X(get_cpsc) \
X(sum_complex_array) \
+ X(sum_blob) \
+ X(sum_data) \
+ X(sum_container) \
X(square_puint) \
X(sum_puints) \
X(sum_cpuints) \
@@ -507,6 +513,36 @@ int __cdecl s_sum_complex_array(int n, refpint_t pi[])
return total;
}
+int __cdecl s_sum_blob(cs_blob_t *blob)
+{
+ int i, total = 0;
+
+ for (i = 0; i < blob->n; i++)
+ total += blob->ca[i];
+
+ return total;
+}
+
+int __cdecl s_sum_data(cs_data_t *data)
+{
+ int i, total = 0;
+
+ for (i = 0; i < data->blob.n; i++)
+ total += data->blob.ca[i];
+
+ return total;
+}
+
+int __cdecl s_sum_container(cs_container_t *container)
+{
+ int i, total = 0;
+
+ for (i = 0; i < container->data.blob.n; i++)
+ total += container->data.blob.ca[i];
+
+ return total;
+}
+
int __cdecl s_dot_two_vectors(vector_t vs[2])
{
return vs[0].x * vs[1].x + vs[0].y * vs[1].y + vs[0].z * vs[1].z;
@@ -1618,6 +1654,9 @@ array_tests(void)
vector_t vs[2] = {{1, -2, 3}, {4, -5, -6}};
cps_t cps;
cpsc_t cpsc;
+ cs_blob_t blob;
+ cs_data_t data;
+ cs_container_t container;
cs_t *cs;
int n;
int ca[5] = {1, -2, 3, -4, 5};
@@ -1761,6 +1800,21 @@ array_tests(void)
ok(sum_ptr_array(ptr_array) == 3, "RPC sum_ptr_array\n");
ok(sum_array_ptr(&array) == 7, "RPC sum_array_ptr\n");
+
+ blob.n = ARRAY_SIZE(c);
+ blob.ca = c;
+ n = sum_blob(&blob);
+ ok(n == 45, "RPC sum_blob = %d\n", n);
+
+ data.blob.n = ARRAY_SIZE(c);
+ data.blob.ca = c;
+ n = sum_data(&data);
+ ok(n == 45, "RPC sum_data = %d\n", n);
+
+ container.data.blob.n = ARRAY_SIZE(c);
+ container.data.blob.ca = c;
+ n = sum_container(&container);
+ ok(n == 45, "RPC sum_container = %d\n", n);
}
void __cdecl s_authinfo_test(unsigned int protseq, int secure)
diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl
index afda2eddd0..4d945dcca3 100644
--- a/dlls/rpcrt4/tests/server.idl
+++ b/dlls/rpcrt4/tests/server.idl
@@ -169,6 +169,30 @@ cpp_quote("#ifndef SKIP_TYPE_DECLS")
[size_is(n)] int ca[];
} cs_t;
+ typedef struct
+ {
+ int n;
+ [size_is(n)] int *ca;
+ } cs_blob_t;
+
+ typedef struct
+ {
+/* FIXME: widl generates incorrect correlation descriptor and the tests crash */
+#if 0
+ int dummy[1]; /* to make offset to conformant array unique */
+#endif
+ cs_blob_t blob;
+ } cs_data_t;
+
+ typedef struct
+ {
+/* FIXME: widl generates incorrect correlation descriptor and the tests crash */
+#if 0
+ int dummy[2]; /* to make offset to conformant array unique */
+#endif
+ cs_data_t data;
+ } cs_container_t;
+
typedef struct
{
int *pn;
@@ -191,6 +215,9 @@ cpp_quote("#endif")
int sum_cpsc(cpsc_t *cpsc);
int get_cpsc(int n, [out] cpsc_t *cpsc );
int sum_complex_array(int n, [size_is(n)] refpint_t pi[]);
+ int sum_blob([in] cs_blob_t *blob);
+ int sum_data([in] cs_data_t *data);
+ int sum_container([in] cs_container_t *container);
cpp_quote("#ifndef SKIP_TYPE_DECLS")
typedef [wire_marshal(int)] void *puint_t;
More information about the wine-cvs
mailing list