+
+ /* LLONG_MIN - 1 */
+ {
+ SCM n = scm_difference (scm_long_long2num (LLONG_MIN), SCM_MAKINUM(1));
+ SCM caught = scm_internal_catch (SCM_BOOL_T, call_num2long_long_body, &n,
+ out_of_range_handler, NULL);
+ assert (! SCM_FALSEP (caught));
+ }
+
+ /* LLONG_MIN + LLONG_MIN/2 */
+ {
+ SCM n = scm_sum (scm_long_long2num (LLONG_MIN),
+ scm_long_long2num (LLONG_MIN / 2));
+ SCM caught = scm_internal_catch (SCM_BOOL_T, call_num2long_long_body, &n,
+ out_of_range_handler, NULL);
+ assert (! SCM_FALSEP (caught));
+ }
+
+ /* LLONG_MAX + 1 */
+ {
+ SCM n = scm_sum (scm_long_long2num (LLONG_MAX), SCM_MAKINUM(1));
+ SCM caught = scm_internal_catch (SCM_BOOL_T, call_num2long_long_body, &n,
+ out_of_range_handler, NULL);
+ assert (! SCM_FALSEP (caught));
+ }
+
+ /* 2^1024 */
+ {
+ SCM n = scm_ash (SCM_MAKINUM (1), SCM_MAKINUM (1024));
+ SCM caught = scm_internal_catch (SCM_BOOL_T, call_num2long_long_body, &n,
+ out_of_range_handler, NULL);
+ assert (! SCM_FALSEP (caught));
+ }
+
+ /* -2^1024 */
+ {
+ SCM n = scm_difference (SCM_MAKINUM (0),
+ scm_ash (SCM_MAKINUM (1), SCM_MAKINUM (1024)));
+ SCM caught = scm_internal_catch (SCM_BOOL_T, call_num2long_long_body, &n,
+ out_of_range_handler, NULL);
+ assert (! SCM_FALSEP (caught));
+ }
+
+#endif /* SCM_SIZEOF_LONG_LONG != 0 */
+}
+
+static void
+test_ulong_long ()
+{
+#if SCM_SIZEOF_LONG_LONG != 0
+