mirror of
https://github.com/nunuhara/xsystem4.git
synced 2026-09-27 09:28:10 +03:00
The 3rd argument to the instruction indicates the type of the second argument. If there are multiple specifiers in the format string, the first specifier matching the given type is substituted (NOT the first specifier encountered when processing the format string).
115 lines
5.7 KiB
C
Executable File
115 lines
5.7 KiB
C
Executable File
// -*-mode: C; coding: sjis; -*-
|
||
|
||
void test_strings(void)
|
||
{
|
||
int i;
|
||
float f;
|
||
string s;
|
||
test_bool("\"a\" == \"a\"", "a" == "a", true);
|
||
test_bool("\"a\" != \"b\"", "a" == "b", false);
|
||
test_bool("\"a\" < \"b\"", "a" < "b", true);
|
||
test_bool("\"a\" < \"a\"", "a" < "a", false);
|
||
test_bool("\"b\" < \"a\"", "b" < "a", false);
|
||
test_bool("\"a\" > \"b\"", "a" > "b", false);
|
||
test_bool("\"a\" > \"a\"", "a" > "a", false);
|
||
test_bool("\"b\" > \"a\"", "b" > "a", true);
|
||
test_bool("\"a\" <= \"b\"", "a" <= "b", true);
|
||
test_bool("\"a\" <= \"a\"", "a" <= "a", true);
|
||
test_bool("\"b\" <= \"a\"", "b" <= "a", false);
|
||
test_bool("\"a\" >= \"b\"", "a" >= "b", false);
|
||
test_bool("\"a\" >= \"a\"", "a" >= "a", true);
|
||
test_bool("\"b\" >= \"a\"", "b" >= "a", true);
|
||
test_bool("var = \"str\"", (s = "str", s == "str"), true);
|
||
test_string("foo += \"bar\"", (s = "foo", s += "bar"), "foobar");
|
||
// S_ADD
|
||
test_string("\"a\" + \"b\"", "a" + "b", "ab");
|
||
// S_LENGTH
|
||
test_equal("\"\".Length()", (s = "", s.Length()), 0);
|
||
test_equal("\"abc\".Length()", (s = "abc", s.Length()), 3);
|
||
test_equal("\"あbc\".Length()", (s = "あbc", s.Length()), 3);
|
||
// S_LENGTHBYTE
|
||
test_equal("\"\".LengthByte()", (s = "", s.LengthByte()), 0);
|
||
test_equal("\"abc\".LengthByte()", (s = "abc", s.LengthByte()), 3);
|
||
test_equal("\"あbc\".LengthByte()", (s = "あbc", s.LengthByte()), 4);
|
||
// S_EMPTY
|
||
test_bool("\"\".Empty()", (s = "", s.Empty()), true);
|
||
test_bool("\"a\".Empty()", (s = "a", s.Empty()), false);
|
||
// S_FIND
|
||
test_equal("\"abあいう\".Find(\"bあ\")", (s = "abあいう", s.Find("bあ")), 1);
|
||
test_equal("\"abあいう\".Find(\"bあ\")", (s = "abあいう", s.Find("い")), 3);
|
||
test_equal("\"abあいう\".Find(\"うえお\")", (s = "abあいう", s.Find("うえお")), -1);
|
||
// S_GETPART
|
||
test_string("\"abあいう\".GetPart(0, 0)", (s = "abあいう", s.GetPart(0, 0)), "");
|
||
test_string("\"abあいう\".GetPart(16, 2)", (s = "abあいう", s.GetPart(16, 2)), "");
|
||
test_string("\"abあいう\".GetPart(1, 3)", (s = "abあいう", s.GetPart(1, 3)), "bあい");
|
||
test_string("\"abあいう\".GetPart(-1, 3)", (s = "abあいう", s.GetPart(-1, 3)), "abあ");
|
||
test_string("\"abあいう\".GetPart(2, 16)", (s = "abあいう", s.GetPart(2, 16)), "あいう");
|
||
// S_PUSHBACK2
|
||
test_string("\"\".PushBack('a')", (s = "", s.PushBack('a'), s), "a");
|
||
test_string("\"あ\".PushBack('a')", (s = "あ", s.PushBack('a'), s), "あa");
|
||
// S_POPBACK2
|
||
test_string("\"あa\".PopBack()", (s = "あa", s.PopBack(), s), "あ");
|
||
test_string("\"あ\".PopBack()", (s = "あ", s.PopBack(), s), "");
|
||
// S_ERASE2
|
||
test_string("\"\".Erase(-1)", (s = "", s.Erase(-1), s), "");
|
||
test_string("\"\".Erase(0)", (s = "", s.Erase(0), s), "");
|
||
test_string("\"\".Erase(1)", (s = "", s.Erase(1), s), "");
|
||
test_string("\"a\".Erase(-1)", (s = "a", s.Erase(-1), s), "");
|
||
test_string("\"a\".Erase(0)", (s = "a", s.Erase(0), s), "");
|
||
test_string("\"a\".Erase(1)", (s = "a", s.Erase(1), s), "a");
|
||
test_string("\"あ\".Erase(-1)", (s = "あ", s.Erase(-1), s), "");
|
||
test_string("\"あ\".Erase(0)", (s = "あ", s.Erase(0), s), "");
|
||
test_string("\"あ\".Erase(1)", (s = "あ", s.Erase(1), s), "あ");
|
||
test_string("\"あbc\".Erase(1)", (s = "あbc", s.Erase(1), s), "あc");
|
||
// S_MOD
|
||
// int
|
||
test_string("%d % 42", "%d" % 42, "42");
|
||
test_string("abc%d % 42", "abc%d" % 42, "abc42");
|
||
test_string("%dabc % 42", "%dabc" % 42, "42abc");
|
||
test_string("abc%ddef % 42", "abc%ddef" % 42, "abc42def");
|
||
test_string("abc%4ddef % 42", "abc%4ddef" % 42, "abc 42def");
|
||
test_string("abc%04ddef % 42", "abc%04ddef" % 42, "abc0042def");
|
||
test_string("abc%Ddef % 42", "abc%Ddef" % 42, "abc42def");
|
||
test_string("abc%4Ddef % 42", "abc%4Ddef" % 42, "abc 42def");
|
||
test_string("abc%04Ddef % 42", "abc%04Ddef" % 42, "abc0042def");
|
||
test_string("\"%d %d\" % 42 % 43", "%d %d" % 42 % 43, "42 43");
|
||
test_string("%s %d % 42", "%s %d" % 42, "%s 42");
|
||
// float
|
||
test_string("abc%fdef % 12.3", "abc%fdef" % 12.3, "abc12.300000def");
|
||
test_string("abc%.2fdef % 12.3", "abc%.2fdef" % 12.3, "abc12.30def");
|
||
test_string("abc%8.2fdef % 12.3", "abc%8.2fdef" % 12.3, "abc 12.30def");
|
||
test_string("abc%Fdef % 12.3", "abc%Fdef" % 12.3, "abc12.300000Fdef");
|
||
test_string("abc%.2Fdef % 12.3", "abc%.2Fdef" % 12.3, "abc12.30Fdef");
|
||
test_string("abc%8.2Fdef % 12.3", "abc%8.2Fdef" % 12.3, "abc 12.30Fdef");
|
||
// string
|
||
test_string("abc%sdef % \"あいう\"", "abc%sdef" % "あいう", "abcあいうdef");
|
||
// char
|
||
test_string("abc%cdef % 'あ'", "abc%cdef" % 'あ', "abcあdef");
|
||
// bool
|
||
test_string("abc%bdef % 1", "abc%bdef" % 1, "abctruedef");
|
||
test_string("abc%bdef % 0", "abc%bdef" % 0, "abcfalsedef");
|
||
|
||
// I_STRING
|
||
test_bool("(42).String()", (i = 42, i.String() == "42"), true);
|
||
// FTOS
|
||
test_bool("(4.2).String()", (f = 4.2, f.String() == "4.200000"), true);
|
||
test_bool("(4.222).String(2)", (f = 4.222, f.String(2) == "4.22"), true);
|
||
// C_REF
|
||
test_equal("abあいう[3]", (s = "abあいう", s[3]), 'い');
|
||
test_equal("abc[3]", (s = "abc", s[3]), 0);
|
||
test_equal("abあいう[5]", (s = "abあいう", s[5]), 0);
|
||
test_equal("abあいう[8]", (s = "abあいう", s[8]), 0);
|
||
// This throws
|
||
// test_equal("abあいう[9]", (s = "abあいう", s[9]), 0);
|
||
|
||
// C_ASSIGN
|
||
test_string("abあいう[1] = 'c'", (s = "abあいう", s[1] = 'c', s), "acあいう");
|
||
test_string("abあいう[3] = 'あ'", (s = "abあいう", s[3] = 'あ', s), "abああう");
|
||
test_string("abあいう[1] = 'あ'", (s = "abあいう", s[1] = 'あ', s), "aああいう");
|
||
test_string("abあいう[3] = 'c'", (s = "abあいう", s[3] = 'c', s), "abあcう");
|
||
test_string("abあいう[5] = 'c'", (s = "abあいう", s[5] = 'c', s), "abあいう");
|
||
test_string("abあいう[7] = 'c'", (s = "abあいう", s[7] = 'c', s), "abあいう");
|
||
// This throws
|
||
// test_string("abあいう[8] = 'c'", (s = "abあいう", s[8] = 'c', s), "abあいう");
|
||
}
|