You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
2.9 KiB

/*===
*** test_1 (duk_safe_call)
0: 123
1: 234
2: 123
3: foo
==> rc=0, result='undefined'
*** test_2 (duk_safe_call)
0: 123
1: 234
2: 345
3: foo
==> rc=0, result='undefined'
*** test_3a (duk_safe_call)
==> rc=1, result='Error: invalid stack index -5'
*** test_3b (duk_safe_call)
==> rc=1, result='Error: invalid stack index 5'
*** test_3c (duk_safe_call)
==> rc=1, result='Error: invalid stack index -2147483648'
*** test_3d (duk_safe_call)
==> rc=1, result='Error: invalid stack index -5'
*** test_3e (duk_safe_call)
==> rc=1, result='Error: invalid stack index 5'
*** test_3f (duk_safe_call)
==> rc=1, result='Error: invalid stack index -2147483648'
*** test_3g (duk_safe_call)
==> rc=1, result='Error: invalid stack index 10'
===*/
static void prep(duk_context *ctx) {
duk_set_top(ctx, 0);
duk_push_int(ctx, 123);
duk_push_int(ctx, 234);
duk_push_int(ctx, 345); /* -> [ 123 234 345 ] */
duk_push_string(ctx, "foo"); /* -> [ 123 234 345 "foo" ] */
}
static duk_ret_t test_1(duk_context *ctx, void *udata) {
duk_idx_t i, n;
(void) udata;
prep(ctx);
duk_copy(ctx, -4, 2); /* -> [ 123 234 123 "foo" ] */
n = duk_get_top(ctx);
for (i = 0; i < n; i++) {
printf("%ld: %s\n", (long) i, duk_to_string(ctx, i));
}
return 0;
}
static duk_ret_t test_2(duk_context *ctx, void *udata) {
duk_idx_t i, n;
(void) udata;
prep(ctx);
duk_copy(ctx, -3, -3); /* nop */
n = duk_get_top(ctx);
for (i = 0; i < n; i++) {
printf("%ld: %s\n", (long) i, duk_to_string(ctx, i));
}
return 0;
}
static duk_ret_t test_3a(duk_context *ctx, void *udata) {
(void) udata;
prep(ctx);
duk_copy(ctx, -5, 2); /* source index too low */
return 0;
}
static duk_ret_t test_3b(duk_context *ctx, void *udata) {
(void) udata;
prep(ctx);
duk_copy(ctx, 5, 2); /* source index too high */
return 0;
}
static duk_ret_t test_3c(duk_context *ctx, void *udata) {
(void) udata;
prep(ctx);
duk_copy(ctx, DUK_INVALID_INDEX, 2); /* source index invalid */
return 0;
}
static duk_ret_t test_3d(duk_context *ctx, void *udata) {
(void) udata;
prep(ctx);
duk_copy(ctx, 2, -5); /* source index too low */
return 0;
}
static duk_ret_t test_3e(duk_context *ctx, void *udata) {
(void) udata;
prep(ctx);
duk_copy(ctx, 2, 5); /* source index too high */
return 0;
}
static duk_ret_t test_3f(duk_context *ctx, void *udata) {
(void) udata;
prep(ctx);
duk_copy(ctx, 2, DUK_INVALID_INDEX); /* source index invalid */
return 0;
}
static duk_ret_t test_3g(duk_context *ctx, void *udata) {
(void) udata;
prep(ctx);
/* indices both invalid and equal: would be nop, but still not allowed for invalid indices */
duk_copy(ctx, 10, 10);
return 0;
}
void test(duk_context *ctx) {
TEST_SAFE_CALL(test_1);
TEST_SAFE_CALL(test_2);
TEST_SAFE_CALL(test_3a);
TEST_SAFE_CALL(test_3b);
TEST_SAFE_CALL(test_3c);
TEST_SAFE_CALL(test_3d);
TEST_SAFE_CALL(test_3e);
TEST_SAFE_CALL(test_3f);
TEST_SAFE_CALL(test_3g);
}