var b: bool; // types assert(isInteger(1)); assert(!isInteger(1)); assert(isFloat(1)); assert(!isFloat(1)); assert(isReference(changetype(null))); assert(!isReference(changetype(null))); assert(isString("1")); assert(!isString(1)); assert(isArray(changetype(null))); assert(!isArray(changetype(null))); // integers var i: i32; clz(1); ctz(1); popcnt(1); rotl(1, 1); rotr(1, 1); abs(-42); max(1, 2); min(1, 2); i = clz(1); i = ctz(1); i = popcnt(1); i = rotl(1, 1); i = rotr(1, 1); i = abs(-42); assert(i == 42); i = max(1, 2); assert(i == 2); i = min(1, 2); assert(i == 1); var I: i64; clz(1); ctz(1); popcnt(1); rotl(1, 1); rotr(1, 1); abs(-42); I = clz(1); I = ctz(1); I = popcnt(1); I = rotl(1, 1); I = rotr(1, 1); I = abs(-42); assert(I == 42); I = max(1, 2); assert(I == 2); I = min(1, 2); assert(i == 1); // floats var f: f32; NaN; Infinity; abs(1.25); ceil(1.25); copysign(1.25, 2.5); floor(1.25); max(1.25, 2.5); min(1.25, 2.5); nearest(1.25); sqrt(1.25); trunc(1.25); isNaN(1.25); isFinite(1.25); f = NaN; f = Infinity; f = abs(1.25); f = ceil(1.25); f = copysign(1.25, 2.5); f = floor(1.25); f = max(1.25, 2.5); f = min(1.25, 2.5); f = nearest(1.25); f = sqrt(1.25); f = trunc(1.25); b = isNaN(1.25); b = isFinite(1.25); var F: f64; NaN; Infinity; NaN; Infinity; abs(1.25); ceil(1.25); copysign(1.25, 2.5); floor(1.25); max(1.25, 2.5); min(1.25, 2.5); nearest(1.25); sqrt(1.25); trunc(1.25); isNaN(1.25); isFinite(1.25); F = NaN; F = Infinity; F = abs(1.25); F = ceil(1.25); F = copysign(1.25, 2.5); F = floor(1.25); F = max(1.25, 2.5); F = min(1.25, 2.5); F = nearest(1.25); F = sqrt(1.25); F = trunc(1.25); b = isNaN(1.25); b = isFinite(1.25); // load and store i = load(8); store(8, i); store(8, load(8)); I = load(8); store(8, I); store(8, load(8)); f = load(8); store(8, f); store(8, load(8)); F = load(8); store(8, F); store(8, load(8)); const constantOffset: usize = 8; i = load(0, constantOffset); store(0, i, constantOffset); store(0, load(0, constantOffset), constantOffset); I = load(0, constantOffset); store(0, I, constantOffset); store(0, load(0, constantOffset), constantOffset); f = load(0, constantOffset); store(0, f, constantOffset); store(0, load(0, constantOffset), constantOffset); F = load(0, constantOffset); store(0, F, constantOffset); store(0, load(0, constantOffset), constantOffset); // load and store smaller types i = load(8); i = load(8); i = load(8); i = load(8); i = load(8); i = load(8); var u: u32; u = load(8); u = load(8); u = load(8); u = load(8); u = load(8); u = load(8); I = load(8); I = load(8); I = load(8); I = load(8); var U: u64; U = load(8); U = load(8); U = load(8); U = load(8); store(8, 1); store(8, 1); store(8, 1); store(8, 1); store(8, 1); store(8, 1); store(8, 1); store(8, 1); // must extend // reinterpretation reinterpret(1.25); reinterpret(25); reinterpret(1.25); reinterpret(25); i = reinterpret(1.25); f = reinterpret(25); I = reinterpret(1.25); F = reinterpret(25); // host var s: usize; current_memory(); grow_memory(1); s = current_memory(); s = grow_memory(1); // other select(10, 20, true); select(100, 200, false); select(1.25, 2.5, true); select(12.5, 25.0, false); i = select(10, 20, true); I = select(100, 200, false); f = select(1.25, 2.5, true); F = select(12.5, 25.0, false); if (!i) unreachable(); // AS specific assert(sizeof() == 1); assert(sizeof() == 2); assert(sizeof() == 4); assert(sizeof() == 8); sizeof(); assert(sizeof() == 1); assert(sizeof() == 1); assert(sizeof() == 2); assert(sizeof() == 4); assert(sizeof() == 8); sizeof(); assert(sizeof() == 4); assert(sizeof() == 8); class Foo { a: T; b: T; } assert(offsetof>("a") == 0); assert(offsetof>("b") == 4); assert(offsetof>("a") == 0); assert(offsetof>("b") == 2); class Bar extends Foo {} assert(offsetof("a") == 0); assert(offsetof("b") == 8); assert(NaN != NaN); assert(isNaN(NaN)); assert(isNaN(NaN)); assert(!isFinite(NaN)); assert(!isFinite(Infinity)); assert(!isFinite(NaN)); assert(!isFinite(Infinity)); assert(isFinite(0)); assert(isFinite(0)); // imported export function test(): void { // cannot be interpreted // parseInt("01"); // parseInt("1", 10); // parseFloat("1.0"); } // limits assert(i8.MIN_VALUE == 0x80); assert(i8.MAX_VALUE == 0x7f); assert(i16.MIN_VALUE == 0x8000); assert(i16.MAX_VALUE == 0x7fff); assert(i32.MIN_VALUE == 0x80000000); assert(i32.MAX_VALUE == 0x7fffffff); assert(i64.MIN_VALUE == 0x8000000000000000); assert(i64.MAX_VALUE == 0x7fffffffffffffff); assert(u8.MIN_VALUE == 0); assert(u8.MAX_VALUE == 0xff); assert(u16.MIN_VALUE == 0); assert(u16.MAX_VALUE == 0xffff); assert(u32.MIN_VALUE == 0); assert(u32.MAX_VALUE == 0xffffffff); assert(u64.MIN_VALUE == 0); assert(u64.MAX_VALUE == 0xffffffffffffffff); assert(bool.MIN_VALUE == 0); assert(bool.MIN_VALUE == false); assert(bool.MAX_VALUE == 1); assert(bool.MAX_VALUE == true); assert(f32.MIN_VALUE == -3.40282347e+38); assert(f32.MAX_VALUE == 3.40282347e+38); assert(f32.MIN_SAFE_INTEGER == -16777215); assert(f32.MAX_SAFE_INTEGER == 16777215); assert(f32.EPSILON == 1.19209290e-07); assert(f64.MIN_VALUE == -1.7976931348623157e+308); assert(f64.MAX_VALUE == 1.7976931348623157e+308); assert(f64.MIN_SAFE_INTEGER == -9007199254740991); assert(f64.MAX_SAFE_INTEGER == 9007199254740991); assert(f64.EPSILON == 2.2204460492503131e-16); // should be importable import { isNaN as isItNaN } from "builtins"; isItNaN(1);