Files
c3c/test/unit/stdlib/mem/temp_mem.c3
Christoffer Lerno c40198b016 - new_* functions in general moved to version without new_ prefix.
- `string::new_from_*` changed to `string::from_*`.
- `String.to_utf16_copy` and related changed to `String.to_utf16`.
- `String.to_utf16_tcopy` and related changed to `String.to_temp_utf16`
- `mem::temp_new` changed to `mem::tnew`.
- `mem::temp_alloc` and related changed to `mem::talloc`.
- `mem::temp_new_array` changed to `mem::temp_array`.
2025-03-03 00:32:20 +01:00

69 lines
1.4 KiB
Plaintext

module test;
fn String add(String s, Allocator a, int x)
{
if (x < 0) return s.copy(a);
String tmp;
@pool(a)
{
tmp = "foo".tconcat(s);
tmp = add(tmp, a, x - 1);
};
ulong* y = mem::talloc(ulong);
*y = 0xAAAA_AAAA_AAAA_AAAA;
return tmp.concat(a, "a");
}
fn String breakit(String s, Allocator a)
{
@pool(a)
{
return inner2("foo".concat(tmem(), s), a);
};
}
fn String inner2(String s, Allocator a)
{
@pool(a)
{
ulong* z1 = mem::talloc(ulong);
*z1 = 0xAAAA_AAAA_AAAA_AAAA;
String y = inner3(s, a);
ulong* z = mem::talloc(ulong);
*z = 0xAAAA_AAAA_AAAA_AAAA;
return y;
};
}
fn String inner3(String s, Allocator a)
{
@pool(a)
{
ulong* z1 = mem::talloc(ulong);
*z1 = 0xAAAA_AAAA_AAAA_AAAA;
String y = inner4(s, a);
ulong* z = mem::talloc(ulong);
*z = 0xAAAA_AAAA_AAAA_AAAA;
return y;
};
}
fn String inner4(String s, Allocator a)
{
@pool(a)
{
String y = s.concat(tmem(), "xy**********").copy(a);
return y;
};
}
fn void test_temp_allocator() @test
{
assert("foofoofoofoofoofooabcaaaaaa" == add("abc", allocator::temp(), 5), "was %s", add("abc", allocator::temp(), 5));
}
fn void test_temp_allocator2() @test
{
assert("fooxyz0123456789xy**********" == breakit("xyz0123456789", allocator::temp()));
}