--
-- macaddr8
--
-- test various cases of valid and invalid input
-- valid
SELECT
    '08:00:2b:01:02:03     '::macaddr8;

SELECT
    '    08:00:2b:01:02:03     '::macaddr8;

SELECT
    '    08:00:2b:01:02:03'::macaddr8;

SELECT
    '08:00:2b:01:02:03:04:05     '::macaddr8;

SELECT
    '    08:00:2b:01:02:03:04:05     '::macaddr8;

SELECT
    '    08:00:2b:01:02:03:04:05'::macaddr8;

SELECT
    '123    08:00:2b:01:02:03'::macaddr8;

-- invalid
SELECT
    '08:00:2b:01:02:03  123'::macaddr8;

-- invalid
SELECT
    '123    08:00:2b:01:02:03:04:05'::macaddr8;

-- invalid
SELECT
    '08:00:2b:01:02:03:04:05  123'::macaddr8;

-- invalid
SELECT
    '08:00:2b:01:02:03:04:05:06:07'::macaddr8;

-- invalid
SELECT
    '08-00-2b-01-02-03-04-05-06-07'::macaddr8;

-- invalid
SELECT
    '08002b:01020304050607'::macaddr8;

-- invalid
SELECT
    '08002b01020304050607'::macaddr8;

-- invalid
SELECT
    '0z002b0102030405'::macaddr8;

-- invalid
SELECT
    '08002b010203xyza'::macaddr8;

-- invalid
SELECT
    '08:00-2b:01:02:03:04:05'::macaddr8;

-- invalid
SELECT
    '08:00-2b:01:02:03:04:05'::macaddr8;

-- invalid
SELECT
    '08:00:2b:01.02:03:04:05'::macaddr8;

-- invalid
SELECT
    '08:00:2b:01.02:03:04:05'::macaddr8;

-- invalid
-- test converting a MAC address to modified EUI-64 for inclusion
-- in an ipv6 address
SELECT
    macaddr8_set7bit ('00:08:2b:01:02:03'::macaddr8);

CREATE TABLE macaddr8_data (
    a int,
    b macaddr8
);

INSERT INTO macaddr8_data
    VALUES (1, '08:00:2b:01:02:03');

INSERT INTO macaddr8_data
    VALUES (2, '08-00-2b-01-02-03');

INSERT INTO macaddr8_data
    VALUES (3, '08002b:010203');

INSERT INTO macaddr8_data
    VALUES (4, '08002b-010203');

INSERT INTO macaddr8_data
    VALUES (5, '0800.2b01.0203');

INSERT INTO macaddr8_data
    VALUES (6, '0800-2b01-0203');

INSERT INTO macaddr8_data
    VALUES (7, '08002b010203');

INSERT INTO macaddr8_data
    VALUES (8, '0800:2b01:0203');

INSERT INTO macaddr8_data
    VALUES (9, 'not even close');

-- invalid
INSERT INTO macaddr8_data
    VALUES (10, '08:00:2b:01:02:04');

INSERT INTO macaddr8_data
    VALUES (11, '08:00:2b:01:02:02');

INSERT INTO macaddr8_data
    VALUES (12, '08:00:2a:01:02:03');

INSERT INTO macaddr8_data
    VALUES (13, '08:00:2c:01:02:03');

INSERT INTO macaddr8_data
    VALUES (14, '08:00:2a:01:02:04');

INSERT INTO macaddr8_data
    VALUES (15, '08:00:2b:01:02:03:04:05');

INSERT INTO macaddr8_data
    VALUES (16, '08-00-2b-01-02-03-04-05');

INSERT INTO macaddr8_data
    VALUES (17, '08002b:0102030405');

INSERT INTO macaddr8_data
    VALUES (18, '08002b-0102030405');

INSERT INTO macaddr8_data
    VALUES (19, '0800.2b01.0203.0405');

INSERT INTO macaddr8_data
    VALUES (20, '08002b01:02030405');

INSERT INTO macaddr8_data
    VALUES (21, '08002b0102030405');

SELECT
    *
FROM
    macaddr8_data
ORDER BY
    1;

CREATE INDEX macaddr8_data_btree ON macaddr8_data USING btree (b);

CREATE INDEX macaddr8_data_hash ON macaddr8_data USING HASH (b);

SELECT
    a,
    b,
    trunc(b)
FROM
    macaddr8_data
ORDER BY
    2,
    1;

SELECT
    b < '08:00:2b:01:02:04'
FROM
    macaddr8_data
WHERE
    a = 1;

-- true
SELECT
    b > '08:00:2b:ff:fe:01:02:04'
FROM
    macaddr8_data
WHERE
    a = 1;

-- false
SELECT
    b > '08:00:2b:ff:fe:01:02:03'
FROM
    macaddr8_data
WHERE
    a = 1;

-- false
SELECT
    b::macaddr <= '08:00:2b:01:02:04'
FROM
    macaddr8_data
WHERE
    a = 1;

-- true
SELECT
    b::macaddr >= '08:00:2b:01:02:04'
FROM
    macaddr8_data
WHERE
    a = 1;

-- false
SELECT
    b = '08:00:2b:ff:fe:01:02:03'
FROM
    macaddr8_data
WHERE
    a = 1;

-- true
SELECT
    b::macaddr <> '08:00:2b:01:02:04'::macaddr
FROM
    macaddr8_data
WHERE
    a = 1;

-- true
SELECT
    b::macaddr <> '08:00:2b:01:02:03'::macaddr
FROM
    macaddr8_data
WHERE
    a = 1;

-- false
SELECT
    b < '08:00:2b:01:02:03:04:06'
FROM
    macaddr8_data
WHERE
    a = 15;

-- true
SELECT
    b > '08:00:2b:01:02:03:04:06'
FROM
    macaddr8_data
WHERE
    a = 15;

-- false
SELECT
    b > '08:00:2b:01:02:03:04:05'
FROM
    macaddr8_data
WHERE
    a = 15;

-- false
SELECT
    b <= '08:00:2b:01:02:03:04:06'
FROM
    macaddr8_data
WHERE
    a = 15;

-- true
SELECT
    b >= '08:00:2b:01:02:03:04:06'
FROM
    macaddr8_data
WHERE
    a = 15;

-- false
SELECT
    b = '08:00:2b:01:02:03:04:05'
FROM
    macaddr8_data
WHERE
    a = 15;

-- true
SELECT
    b <> '08:00:2b:01:02:03:04:06'
FROM
    macaddr8_data
WHERE
    a = 15;

-- true
SELECT
    b <> '08:00:2b:01:02:03:04:05'
FROM
    macaddr8_data
WHERE
    a = 15;

-- false
SELECT
    ~ b
FROM
    macaddr8_data;

SELECT
    b & '00:00:00:ff:ff:ff'
FROM
    macaddr8_data;

SELECT
    b | '01:02:03:04:05:06'
FROM
    macaddr8_data;

DROP TABLE macaddr8_data;

