Updated MSpec source to 46e80081.
[rbx.git] / spec / subtend / ext / subtend_string.c
blob6579c1376b86cbfb7cc62bb9b3281a5f653d1085
1 #include <ruby.h>
2 #include <string.h>
4 VALUE ss_say_hello(VALUE self) {
5 const char *str = "hello";
6 return rb_str_new(str, strlen(str));
9 VALUE ss_say_hello2(VALUE self) {
10 return rb_str_new2("hello\0invisible");
13 VALUE ss_dup_string(VALUE self, VALUE str) {
14 return rb_str_dup(str);
17 VALUE ss_str_append(VALUE self, VALUE str, VALUE str2) {
18 return rb_str_append(str, str2);
21 VALUE ss_cat_as_question(VALUE self, VALUE str) {
22 return rb_str_cat(str, "?", 1);
25 VALUE ss_cat2_as_question(VALUE self, VALUE str) {
26 return rb_str_cat2(str, "?");
29 VALUE ss_str_plus(VALUE self, VALUE str1, VALUE str2) {
30 return rb_str_plus(str1, str2);
33 VALUE ss_phrase_as_question(VALUE self, VALUE str) {
34 const char *question_mark = "?";
35 rb_str_buf_cat(str, question_mark, strlen(question_mark));
36 return str;
39 VALUE ss_rb_str_new2_with_null(VALUE self) {
40 return rb_str_new2(NULL);
43 VALUE ss_str_cmp(VALUE self, VALUE str1, VALUE str2) {
44 return INT2NUM(rb_str_cmp(str1, str2));
47 VALUE ss_str_split(VALUE self, VALUE str) {
48 return rb_str_split(str, ",");
51 VALUE ss_str2inum(VALUE self, VALUE str, VALUE inum) {
52 int num = FIX2INT(inum);
53 return rb_str2inum(str, num);
56 VALUE ss_cstr2inum(VALUE self, VALUE inum) {
57 int num = FIX2INT(inum);
58 return rb_cstr2inum("10", num);
61 VALUE ss_str_substr(VALUE self, VALUE str, VALUE beg, VALUE len) {
62 return rb_str_substr(str, FIX2INT(beg), FIX2INT(len));
65 VALUE ss_rstring_see(VALUE self, VALUE str) {
66 return rb_str_new2(RSTRING(str)->ptr);
69 VALUE ss_rstring_assign_foo(VALUE self, VALUE str) {
70 RSTRING(str)->len = 3;
71 RSTRING(str)->ptr = ALLOC_N(char, 4);
72 memcpy(RSTRING(str)->ptr, "foo", 4);
73 return Qnil;
76 VALUE ss_rstring_assign_global_foobar(VALUE self) {
77 VALUE var = rb_gv_get("$global_rstring_test");
78 RSTRING(var)->len = 6;
79 RSTRING(var)->ptr = ALLOC_N(char, 7);
80 memcpy(RSTRING(var)->ptr, "foobar", 7);
81 return Qnil;
84 VALUE ss_rstring_set_len(VALUE self, VALUE str, VALUE len) {
85 RSTRING(str)->len = NUM2INT(len);
86 return Qnil;
89 VALUE ss_rstring_assign_foo_and_upcase(VALUE self, VALUE str) {
90 RSTRING(str)->len = 3;
91 RSTRING(str)->ptr = ALLOC_N(char, 4);
92 memcpy(RSTRING(str)->ptr, "foo", 4);
93 rb_funcall(str, rb_intern("upcase!"), 0, 0);
94 return Qnil;
97 VALUE ss_str_to_str(VALUE self, VALUE arg) {
98 return rb_str_to_str(arg);
101 void Init_subtend_string() {
102 VALUE cls;
103 cls = rb_define_class("SubtendString", rb_cObject);
104 rb_define_method(cls, "say_hello", ss_say_hello, 0);
105 rb_define_method(cls, "say_hello2", ss_say_hello2, 0);
106 rb_define_method(cls, "rb_str_new2_with_null", ss_rb_str_new2_with_null, 0);
107 rb_define_method(cls, "dup_string", ss_dup_string, 1);
108 rb_define_method(cls, "rb_str_append", ss_str_append, 2);
109 rb_define_method(cls, "rb_str_plus", ss_str_plus, 2);
110 rb_define_method(cls, "cat_as_question", ss_cat_as_question, 1);
111 rb_define_method(cls, "cat2_as_question", ss_cat2_as_question, 1);
112 rb_define_method(cls, "phrase_as_question", ss_phrase_as_question, 1);
113 rb_define_method(cls, "rb_str_cmp", ss_str_cmp, 2);
114 rb_define_method(cls, "rb_str_split", ss_str_split, 1);
115 rb_define_method(cls, "rb_str2inum", ss_str2inum, 2);
116 rb_define_method(cls, "rb_cstr2inum", ss_cstr2inum, 1);
117 rb_define_method(cls, "rb_str_substr", ss_str_substr, 3);
118 rb_define_method(cls, "rb_rstring_see", ss_rstring_see, 1);
119 rb_define_method(cls, "rb_rstring_assign_foo", ss_rstring_assign_foo, 1);
120 rb_define_method(cls, "rb_rstring_assign_global_foobar", ss_rstring_assign_global_foobar, 0);
121 rb_define_method(cls, "rb_rstring_set_len", ss_rstring_set_len, 2);
122 rb_define_method(cls, "rb_rstring_assign_foo_and_upcase", ss_rstring_assign_foo_and_upcase, 1);
123 rb_define_method(cls, "rb_str_to_str", ss_str_to_str, 1);