import { assertObjectMatch } from "jsr:@std/assert"
// aliasing our functions and constants for brevity
const
fn = parseOperator,
eq = assertObjectMatch
eq(fn("1.2.3"), { operator: "=", major: 1, minor: 2, patch: 3 })
eq(fn(""), { operator: "=", })
eq(fn("x"), { operator: "=", })
eq(fn(" 1.x "), { operator: "=", major: 1 })
eq(fn(" = 1.x"), { operator: "=", major: 1 })
eq(fn("1.x.*"), { operator: "=", major: 1 })
eq(fn("1"), { operator: "=", major: 1 })
eq(fn("> 1.2 "), { operator: ">", major: 1, minor: 2 })
eq(fn(">1.2.0"), { operator: ">", major: 1, minor: 2, patch: 0 })
eq(fn(">=1.2"), { operator: ">=", major: 1, minor: 2 })
eq(fn("<1.2"), { operator: "<", major: 1, minor: 2 })
eq(fn("<=1.2"), { operator: "<=", major: 1, minor: 2 })
eq(fn("<1.0.0"), { operator: "<", major: 1, minor: 0, patch: 0 })
eq(fn("<1-pre"), { operator: "<", major: 1, prerelease: "pre" })
eq(fn("<1+abc"), { operator: "<", major: 1, build: "abc" })
eq(fn("!=1.x"), { operator: "!=", major: 1 })
parses a single range operator string (">=1.x.*", etc...), and returns a Operator object.