Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion quest/m3/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ generic std gap is planned here even when moq never calls it.
- [Waiting: a slice object for a mutable part of other values](/quest/m3/ts-slice-object.md) - waits on a moq profile showing the `Proxy` view's traps matter, then decides on an `rt.ByteSlice`-like form
- [Port the workflow guard to kixelated/quest](/quest/m3/quest-workflow-guard.md) - quest's environment guard parses YAML as this repository's does
- [Folds from the back, and a crate's own folds](/quest/m3/ts-iter-back-folds.md) - `rfold` and `try_rfold` translate, and so does a crate's iterator that overrides `fold` or `nth_back`
- [A comparison of two constants](/quest/m3/ts-constant-compares.md) - `size_of::<T>() == 1` in a generic function translates to TypeScript `tsc` accepts
- [A vector's exact capacity as it shrinks](/quest/m3/ts-vec-exact-capacity.md) - a deque made from a `Vec` splits its slices where std's does
- [A B-tree's searches call Ord as std's do](/quest/m3/ts-btree-search-order.md) - a B-tree's lookups and inserts call a key's own `Ord` in std's order and number
- [Rc and Arc of a slice](/quest/m3/ts-shared-slices.md) - `Rc<[T]>` and `Arc<[T]>` from a `Vec`, a slice, or an iterator translate
Expand Down
18 changes: 0 additions & 18 deletions quest/m3/ts-constant-compares.md

This file was deleted.

4 changes: 4 additions & 0 deletions ts/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions ts/fixtures/lang/constants/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[package]
name = "lang-constants-fixture"
description = "A part of the language rust2-ts translates, exercised against native Rust"
version = "0.0.0"
edition.workspace = true
license.workspace = true
publish = false

[lib]
# The cdylib is the native side of the differential test, built for wasm32.
crate-type = ["lib", "cdylib"]

[lints]
workspace = true
253 changes: 253 additions & 0 deletions ts/fixtures/lang/constants/expected/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
// Generated by rust2-ts. Do not edit.

import * as rt from "./rt.ts";

/** `T`'s constants compared with [`Mid`]'s. */
export function against$u16(out: rt.ByteVec): void {
let _255!: rt.u8;
let _259!: rt.u8;
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a0: boolean): rt.u8 => {
return a0 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a02: boolean): rt.u8 => {
return a02 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a03: boolean): rt.u8 => {
return a03 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a04: boolean): rt.u8 => {
return a04 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, rt.u64Lt(2, 2), rt.u64Le(2, 2), rt.u64Gt(2, 2), rt.u64Ge(2, 2)], (a05: boolean): rt.u8 => {
return a05 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, rt.i128Lt(0, 0), rt.i128Le(0, 0), rt.i128Gt(0, 0), rt.i128Ge(0, 0)], (a06: boolean): rt.u8 => {
return a06 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a07: boolean): rt.u8 => {
return a07 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a08: boolean): rt.u8 => {
return a08 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a09: boolean): rt.u8 => {
return a09 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a010: boolean): rt.u8 => {
return a010 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([rt.i128Eq(-2, -2), rt.i128Ne(-2, -2), rt.i128Lt(-2, -2), rt.i128Le(-2, -2), rt.i128Gt(-2, -2), rt.i128Ge(-2, -2)], (a011: boolean): rt.u8 => {
return a011 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([(2 as rt.char) === 2 as rt.char, (2 as rt.char) !== 2 as rt.char, (2 as rt.char) < (2 as rt.char), (2 as rt.char) <= (2 as rt.char), (2 as rt.char) > (2 as rt.char), (2 as rt.char) >= (2 as rt.char)], (a012: boolean): rt.u8 => {
return a012 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a013: boolean): rt.u8 => {
return a013 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a014: boolean): rt.u8 => {
return a014 ? 1 : 0;
})), undefined, true);
if (false) {
_255 = 0;
} else {
_255 = 1;
}
rt.byteVecPush(out, _255);
if (true) {
_259 = 4;
} else {
_259 = 3;
}
rt.byteVecPush(out, _259);
}

/** `T`'s constants compared with [`Mid`]'s. */
export function against$u64(out: rt.ByteVec): void {
let _255!: rt.u8;
let _259!: rt.u8;
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, true, true], (a0: boolean): rt.u8 => {
return a0 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, true, true], (a02: boolean): rt.u8 => {
return a02 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, true, true], (a03: boolean): rt.u8 => {
return a03 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, true, true], (a04: boolean): rt.u8 => {
return a04 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, rt.u64Lt(3, 2), rt.u64Le(3, 2), rt.u64Gt(3, 2), rt.u64Ge(3, 2)], (a05: boolean): rt.u8 => {
return a05 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, rt.i128Lt(1, 0), rt.i128Le(1, 0), rt.i128Gt(1, 0), rt.i128Ge(1, 0)], (a06: boolean): rt.u8 => {
return a06 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a07: boolean): rt.u8 => {
return a07 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, true, true], (a08: boolean): rt.u8 => {
return a08 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, true, true], (a09: boolean): rt.u8 => {
return a09 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, true, true], (a010: boolean): rt.u8 => {
return a010 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([rt.i128Eq(-1, -2), rt.i128Ne(-1, -2), rt.i128Lt(-1, -2), rt.i128Le(-1, -2), rt.i128Gt(-1, -2), rt.i128Ge(-1, -2)], (a011: boolean): rt.u8 => {
return a011 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([(3 as rt.char) === 2 as rt.char, (3 as rt.char) !== 2 as rt.char, (3 as rt.char) < (2 as rt.char), (3 as rt.char) <= (2 as rt.char), (3 as rt.char) > (2 as rt.char), (3 as rt.char) >= (2 as rt.char)], (a012: boolean): rt.u8 => {
return a012 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a013: boolean): rt.u8 => {
return a013 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a014: boolean): rt.u8 => {
return a014 ? 1 : 0;
})), undefined, true);
if (true) {
_255 = 0;
} else {
_255 = 1;
}
rt.byteVecPush(out, _255);
if (true) {
_259 = 4;
} else {
_259 = 3;
}
rt.byteVecPush(out, _259);
}

/** `T`'s constants compared with [`Mid`]'s. */
export function against$u8(out: rt.ByteVec): void {
let _255!: rt.u8;
let _259!: rt.u8;
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a0: boolean): rt.u8 => {
return a0 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a02: boolean): rt.u8 => {
return a02 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a03: boolean): rt.u8 => {
return a03 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a04: boolean): rt.u8 => {
return a04 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, rt.u64Lt(1, 2), rt.u64Le(1, 2), rt.u64Gt(1, 2), rt.u64Ge(1, 2)], (a05: boolean): rt.u8 => {
return a05 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, rt.i128Lt(-1, 0), rt.i128Le(-1, 0), rt.i128Gt(-1, 0), rt.i128Ge(-1, 0)], (a06: boolean): rt.u8 => {
return a06 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a07: boolean): rt.u8 => {
return a07 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a08: boolean): rt.u8 => {
return a08 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a09: boolean): rt.u8 => {
return a09 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a010: boolean): rt.u8 => {
return a010 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([rt.i128Eq(-3, -2), rt.i128Ne(-3, -2), rt.i128Lt(-3, -2), rt.i128Le(-3, -2), rt.i128Gt(-3, -2), rt.i128Ge(-3, -2)], (a011: boolean): rt.u8 => {
return a011 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([(1 as rt.char) === 2 as rt.char, (1 as rt.char) !== 2 as rt.char, (1 as rt.char) < (2 as rt.char), (1 as rt.char) <= (2 as rt.char), (1 as rt.char) > (2 as rt.char), (1 as rt.char) >= (2 as rt.char)], (a012: boolean): rt.u8 => {
return a012 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a013: boolean): rt.u8 => {
return a013 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a014: boolean): rt.u8 => {
return a014 ? 1 : 0;
})), undefined, true);
if (true) {
_255 = 0;
} else {
_255 = 1;
}
rt.byteVecPush(out, _255);
if (false) {
_259 = 4;
} else {
_259 = 3;
}
rt.byteVecPush(out, _259);
}

/** `T`'s constants compared with [`Mid`]'s. */
export function against$unit(out: rt.ByteVec): void {
let _255!: rt.u8;
let _259!: rt.u8;
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a0: boolean): rt.u8 => {
return a0 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a02: boolean): rt.u8 => {
return a02 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, true, true], (a03: boolean): rt.u8 => {
return a03 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a04: boolean): rt.u8 => {
return a04 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([({ hi: 0xffffffff, lo: 0xffffffff } as rt.u64) === 2, ({ hi: 0xffffffff, lo: 0xffffffff } as rt.u64) !== 2, rt.u64Lt({ hi: 0xffffffff, lo: 0xffffffff } as rt.u64, 2), rt.u64Le({ hi: 0xffffffff, lo: 0xffffffff } as rt.u64, 2), rt.u64Gt({ hi: 0xffffffff, lo: 0xffffffff } as rt.u64, 2), rt.u64Ge({ hi: 0xffffffff, lo: 0xffffffff } as rt.u64, 2)], (a05: boolean): rt.u8 => {
return a05 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([({ hi: 0x7fffffff, w2: 0xffffffff, w1: 0xffffffff, lo: 0xffffffff } as rt.i128) === 0, ({ hi: 0x7fffffff, w2: 0xffffffff, w1: 0xffffffff, lo: 0xffffffff } as rt.i128) !== 0, rt.i128Lt({ hi: 0x7fffffff, w2: 0xffffffff, w1: 0xffffffff, lo: 0xffffffff } as rt.i128, 0), rt.i128Le({ hi: 0x7fffffff, w2: 0xffffffff, w1: 0xffffffff, lo: 0xffffffff } as rt.i128, 0), rt.i128Gt({ hi: 0x7fffffff, w2: 0xffffffff, w1: 0xffffffff, lo: 0xffffffff } as rt.i128, 0), rt.i128Ge({ hi: 0x7fffffff, w2: 0xffffffff, w1: 0xffffffff, lo: 0xffffffff } as rt.i128, 0)], (a06: boolean): rt.u8 => {
return a06 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, true, true, false, false], (a07: boolean): rt.u8 => {
return a07 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, true, true], (a08: boolean): rt.u8 => {
return a08 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a09: boolean): rt.u8 => {
return a09 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, false, false], (a010: boolean): rt.u8 => {
return a010 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([rt.i128Eq(-2147483648, -2), rt.i128Ne(-2147483648, -2), rt.i128Lt(-2147483648, -2), rt.i128Le(-2147483648, -2), rt.i128Gt(-2147483648, -2), rt.i128Ge(-2147483648, -2)], (a011: boolean): rt.u8 => {
return a011 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([(255 as rt.char) === 2 as rt.char, (255 as rt.char) !== 2 as rt.char, (255 as rt.char) < (2 as rt.char), (255 as rt.char) <= (2 as rt.char), (255 as rt.char) > (2 as rt.char), (255 as rt.char) >= (2 as rt.char)], (a012: boolean): rt.u8 => {
return a012 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([false, true, false, false, true, true], (a013: boolean): rt.u8 => {
return a013 ? 1 : 0;
})), undefined, true);
rt.iterExtendBytes(out, rt.iterSlice(rt.bytesMap([true, false, false, true, false, true], (a014: boolean): rt.u8 => {
return a014 ? 1 : 0;
})), undefined, true);
if (true) {
_255 = 0;
} else {
_255 = 1;
}
rt.byteVecPush(out, _255);
if (true) {
_259 = 4;
} else {
_259 = 3;
}
rt.byteVecPush(out, _259);
}

/** The constants of each type compared with [`Mid`]'s. */
export function compares(out: rt.ByteVec): void {
against$u8(out);
against$u16(out);
against$u64(out);
against$unit(out);
}

//# sourceMappingURL=constants.ts.map
40 changes: 40 additions & 0 deletions ts/fixtures/lang/constants/expected/harness.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Generated by rust2-ts. Do not edit.

import * as rt from "./rt.ts";
import { cases } from "./lib.ts";

/** Run one case. */
export function run(input: rt.ByteSlice): rt.ByteVec {
const out: rt.ByteVec = new rt.ByteVec();
if (!(input.length >= 3)) {
return out;
}
const cases_: [string, (a0: rt.u8, a1: rt.ByteSlice, a2: rt.ByteVec) => undefined][] = cases();
cases_[rt.idx(cases_, rt.usizeRem(((input.data[input.start] << 8) | input.data[input.start + 1]) as rt.usize, cases_.length))][1](input.data[input.start + 2], new rt.ByteSlice(input.data, input.start + 3, input.length - 3), out);
return out;
}

/**
* The first two bytes, as one big-endian number, that pick the case named `name`, which
* `lang.ts` targets by.
*/
export function op(name: string): rt.u16 {
const _11: rt.usize | undefined = rt.iterPosition(rt.iterSlice(cases()), (_2: [string, (a0: rt.u8, a1: rt.ByteSlice, a2: rt.ByteVec) => undefined]): boolean => {
return _2[0] === name;
});
if (_11 !== undefined) {
const _20: rt.Result<rt.u16, rt.TryFromIntError> = rt.u16TryFrom(_11);
if (_20.ok) {
if ((_20.value >> 8) !== 255) {
return _20.value;
}
}
const args4: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtPad(f, name)];
rt.panicFmt(["case ", args4[0], " is past what two bytes pick"]);
} else {
const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtPad(f, name)];
rt.panicFmt(["no case ", args2[0]]);
}
}

//# sourceMappingURL=harness.ts.map
16 changes: 16 additions & 0 deletions ts/fixtures/lang/constants/expected/lib.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Generated by rust2-ts. Do not edit.

import * as rt from "./rt.ts";
import { compares } from "./constants.ts";

/**
* Each case's name and what it runs. The first two bytes, big-endian, pick one modulo
* their count, so a case added at the end moves no other.
*/
export function cases(): [string, (a0: rt.u8, a1: rt.ByteSlice, a2: rt.ByteVec) => undefined][] {
return [["constants::compares", (_22: rt.u8, _32: rt.ByteSlice, out: rt.ByteVec): undefined => {
compares(out);
}] as [string, (a0: rt.u8, a1: rt.ByteSlice, a2: rt.ByteVec) => undefined]];
}

//# sourceMappingURL=lib.ts.map
Loading