mirror of
https://github.com/janet-lang/janet
synced 2024-12-26 08:20:27 +00:00
Add some soft test cases for #1037.
This commit is contained in:
parent
f33c381043
commit
1cebe64664
@ -8,6 +8,41 @@
|
|||||||
#define EXPORTER
|
#define EXPORTER
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Structs */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int a, b;
|
||||||
|
float c, d;
|
||||||
|
} Split;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
float c, d;
|
||||||
|
int a, b;
|
||||||
|
} SplitFlip;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int u, v, w, x, y, z;
|
||||||
|
} SixInts;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
} intint;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
int c;
|
||||||
|
} intintint;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int64_t a;
|
||||||
|
int64_t b;
|
||||||
|
int64_t c;
|
||||||
|
} big;
|
||||||
|
|
||||||
|
/* Functions */
|
||||||
|
|
||||||
EXPORTER
|
EXPORTER
|
||||||
int int_fn(int a, int b) {
|
int int_fn(int a, int b) {
|
||||||
return (a << 2) + b;
|
return (a << 2) + b;
|
||||||
@ -73,17 +108,6 @@ double float_fn(float x, float y, float z) {
|
|||||||
return (x + y) * z;
|
return (x + y) * z;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int a;
|
|
||||||
int b;
|
|
||||||
} intint;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int a;
|
|
||||||
int b;
|
|
||||||
int c;
|
|
||||||
} intintint;
|
|
||||||
|
|
||||||
EXPORTER
|
EXPORTER
|
||||||
int intint_fn(double x, intint ii) {
|
int intint_fn(double x, intint ii) {
|
||||||
printf("double: %g\n", x);
|
printf("double: %g\n", x);
|
||||||
@ -104,12 +128,6 @@ intint return_struct(int i) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int64_t a;
|
|
||||||
int64_t b;
|
|
||||||
int64_t c;
|
|
||||||
} big;
|
|
||||||
|
|
||||||
EXPORTER
|
EXPORTER
|
||||||
big struct_big(int i, double d) {
|
big struct_big(int i, double d) {
|
||||||
big ret;
|
big ret;
|
||||||
@ -139,16 +157,6 @@ int intintint_fn_2(intintint iii, int i) {
|
|||||||
return i * (iii.a + iii.b + iii.c);
|
return i * (iii.a + iii.b + iii.c);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int a, b;
|
|
||||||
float c, d;
|
|
||||||
} Split;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
float c, d;
|
|
||||||
int a, b;
|
|
||||||
} SplitFlip;
|
|
||||||
|
|
||||||
EXPORTER
|
EXPORTER
|
||||||
float split_fn(Split s) {
|
float split_fn(Split s) {
|
||||||
return s.a * s.c + s.b * s.d;
|
return s.a * s.c + s.b * s.d;
|
||||||
@ -178,3 +186,22 @@ SplitFlip split_flip_ret_fn(int x, float y) {
|
|||||||
ret.d = y;
|
ret.d = y;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORTER
|
||||||
|
SixInts sixints_fn(void) {
|
||||||
|
return (SixInts) {
|
||||||
|
6666, 1111, 2222, 3333, 4444, 5555
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORTER
|
||||||
|
int sixints_fn_2(int x, SixInts s) {
|
||||||
|
return x + s.u + s.v + s.w + s.x + s.y + s.z;
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORTER
|
||||||
|
int sixints_fn_3(SixInts s, int x) {
|
||||||
|
return x + s.u + s.v + s.w + s.x + s.y + s.z;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
|
|
||||||
(def intintint (ffi/struct :int :int :int))
|
(def intintint (ffi/struct :int :int :int))
|
||||||
(def big (ffi/struct :s64 :s64 :s64))
|
(def big (ffi/struct :s64 :s64 :s64))
|
||||||
|
(def split (ffi/struct :int :int :float :float))
|
||||||
|
(def split-flip (ffi/struct :float :float :int :int))
|
||||||
|
(def six-ints (ffi/struct :int :int :int :int :int :int))
|
||||||
|
|
||||||
(ffi/defbind int-fn :int [a :int b :int])
|
(ffi/defbind int-fn :int [a :int b :int])
|
||||||
(ffi/defbind double-fn :double [a :double b :double c :double])
|
(ffi/defbind double-fn :double [a :double b :double c :double])
|
||||||
@ -45,13 +48,13 @@
|
|||||||
j :double])
|
j :double])
|
||||||
(ffi/defbind void-fn-2 :void [y :double])
|
(ffi/defbind void-fn-2 :void [y :double])
|
||||||
(ffi/defbind intintint-fn-2 :int [iii intintint i :int])
|
(ffi/defbind intintint-fn-2 :int [iii intintint i :int])
|
||||||
|
|
||||||
(def split (ffi/struct :int :int :float :float))
|
|
||||||
(def split-flip (ffi/struct :float :float :int :int))
|
|
||||||
(ffi/defbind split-fn :float [s split])
|
(ffi/defbind split-fn :float [s split])
|
||||||
(ffi/defbind split-flip-fn :float [s split-flip])
|
(ffi/defbind split-flip-fn :float [s split-flip])
|
||||||
(ffi/defbind split-ret-fn split [x :int y :float])
|
(ffi/defbind split-ret-fn split [x :int y :float])
|
||||||
(ffi/defbind split-flip-ret-fn split-flip [x :int y :float])
|
(ffi/defbind split-flip-ret-fn split-flip [x :int y :float])
|
||||||
|
(ffi/defbind sixints-fn six-ints [])
|
||||||
|
(ffi/defbind sixints-fn-2 :int [x :int s six-ints])
|
||||||
|
(ffi/defbind sixints-fn-3 :int [s six-ints x :int])
|
||||||
|
|
||||||
#
|
#
|
||||||
# Struct reading and writing
|
# Struct reading and writing
|
||||||
@ -93,6 +96,9 @@
|
|||||||
# Call functions
|
# Call functions
|
||||||
#
|
#
|
||||||
|
|
||||||
|
(tracev (sixints-fn))
|
||||||
|
(tracev (sixints-fn-2 100 [1 2 3 4 5 6]))
|
||||||
|
(tracev (sixints-fn-3 [1 2 3 4 5 6] 200))
|
||||||
(tracev (split-ret-fn 10 12))
|
(tracev (split-ret-fn 10 12))
|
||||||
(tracev (split-flip-ret-fn 10 12))
|
(tracev (split-flip-ret-fn 10 12))
|
||||||
(tracev (split-flip-ret-fn 12 10))
|
(tracev (split-flip-ret-fn 12 10))
|
||||||
|
Loading…
Reference in New Issue
Block a user