```ts
/**
 * Returns every cell standing exactly radius steps from the center, laid out as one closed walk.
 * @param center - The center address [q, r] of a hexagonal board.
 * @param radius - The radius of the ring to walk.
 * @returns An array of axial addresses representing the walk.
 */
export function hexRingWalk(center: number[], radius: number): number[][] {
    if (!Array.isArray(center) || center.length !== 2 || !center.every(Number.isInteger)) {
        throw new Error('Center must be a two-element array of whole numbers.');
    }
    if (!Number.isInteger(radius) || radius < 0) {
        throw new Error('Radius must be a non-negative whole number.');
    }

    const steps = ['southwest', 'east', 'northeast', 'northwest', 'west', 'southeast'];
    const walk: number[][] = [];
    let [q, r] = center;

    for (let i = 0; i < radius * steps.length; i++) {
        if (i % steps.length === 0) {
            q += step[0];
            r += step[1];
        }
        walk.push([q, r]);
        step = steps[(steps.indexOf(step) + 1) % steps.length];
    }

    return walk;
}
```