dope2/compare/primitives.js

29 lines
858 B
JavaScript

import { Char, Double, Int } from "../primitives/types.js";
export const compareNumbers = x => y => {
if (typeof(x) !== 'number' || typeof(y) !== 'number') {
throw new Error(`was only meant to compare numbers! got ${x} and ${y}`);
}
return (x < y) ? -1 : (x > y) ? 1 : 0;
}
export const compareStrings = x => y => {
if (typeof(x) !== 'string' || typeof(y) !== 'string') {
throw new Error(`was only meant to compare strings! got ${x} and ${y}`);
}
return (x < y) ? -1 : (x > y) ? 1 : 0;
}
export const compareBools = x => y => {
if (typeof(x) !== 'boolean' || typeof(y) !== 'boolean') {
throw new Error(`was only meant to compare booleans! got ${x} and ${y}`);
}
return x - y;
};
export const typeToCmp = new Map([
[Int, compareNumbers],
[Char, compareStrings],
[Double, compareNumbers],
[Boolean, compareBools],
]);