... This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
... If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.

(.using
 [library
  [lux (.except)
   [abstract
    ["[0]" monad]]
   [data
    ["[0]" text]
    [collection
     ["[0]" list]
     ["[0]" set]]]
   [math
    ["[0]" random (.only Random)]
    [number
     [/64
      ["n" natural]]]]
   [macro
    ["[0]" expansion]
    ["[0]" template]]
   [test
    ["_" property (.only Test)]]]]
 [\\library
  ["[0]" /]])

(expansion.let [<tags> (template.with [<name>]
                         [<name>]

                         [[/.alternate]
                          [/.author]
                          [/.bookmark]
                          [/.canonical]
                          [/.dns_prefetch]
                          [/.external]
                          [/.help]
                          [/.icon]
                          [/.license]
                          [/.manifest]
                          [/.me]
                          [/.module_pre_load]
                          [/.next]
                          [/.no_follow]
                          [/.no_opener]
                          [/.no_referrer]
                          [/.opener]
                          [/.pingback]
                          [/.pre_connect]
                          [/.pre_fetch]
                          [/.pre_load]
                          [/.pre_render]
                          [/.prev]
                          [/.search]
                          [/.stylesheet]
                          [/.tag]])]
  (the .public test
    Test
    (<| (_.covering /._)
        (monad.let [! random.monad]
          [])
        (_.for [/.Relationship])
        (all _.and
             (_.coverage [<tags>]
               (let [all (is (List /.Relationship)
                             (list <tags>))
                     uniques (set.of_list text.hash all)]
                 (n.= (list.size all)
                      (set.size uniques))))
             ))))
