sig
  type t = { test_id : Id.t; name : string; f : unit -> unit; }
  val f : Test.Basic_test.t -> unit -> unit
  val name : Test.Basic_test.t -> string
  val test_id : Test.Basic_test.t -> Id.t
  module Fields :
    sig
      val names : string list
      val f :
        ([< `Read | `Set_and_create ], Test.Basic_test.t, unit -> unit)
        Fieldslib.Field.t_with_perm
      val name :
        ([< `Read | `Set_and_create ], Test.Basic_test.t, string)
        Fieldslib.Field.t_with_perm
      val test_id :
        ([< `Read | `Set_and_create ], Test.Basic_test.t, Id.t)
        Fieldslib.Field.t_with_perm
      val make_creator :
        test_id:(([< `Read | `Set_and_create ], Test.Basic_test.t, Id.t)
                 Fieldslib.Field.t_with_perm -> '-> ('-> Id.t) * 'c) ->
        name:(([< `Read | `Set_and_create ], Test.Basic_test.t, string)
              Fieldslib.Field.t_with_perm -> '-> ('-> string) * 'd) ->
        f:(([< `Read | `Set_and_create ], Test.Basic_test.t, unit -> unit)
           Fieldslib.Field.t_with_perm -> '-> ('-> unit -> unit) * 'e) ->
        '-> ('-> Test.Basic_test.t) * 'e
      val create :
        test_id:Id.t -> name:string -> f:(unit -> unit) -> Test.Basic_test.t
      val map :
        test_id:(([< `Read | `Set_and_create ], Test.Basic_test.t, Id.t)
                 Fieldslib.Field.t_with_perm -> Id.t) ->
        name:(([< `Read | `Set_and_create ], Test.Basic_test.t, string)
              Fieldslib.Field.t_with_perm -> string) ->
        f:(([< `Read | `Set_and_create ], Test.Basic_test.t, unit -> unit)
           Fieldslib.Field.t_with_perm -> unit -> unit) ->
        Test.Basic_test.t
      val iter :
        test_id:(([< `Read | `Set_and_create ], Test.Basic_test.t, Id.t)
                 Fieldslib.Field.t_with_perm -> 'a) ->
        name:(([< `Read | `Set_and_create ], Test.Basic_test.t, string)
              Fieldslib.Field.t_with_perm -> 'b) ->
        f:(([< `Read | `Set_and_create ], Test.Basic_test.t, unit -> unit)
           Fieldslib.Field.t_with_perm -> 'c) ->
        'c
      val fold :
        init:'->
        test_id:('->
                 ([< `Read | `Set_and_create ], Test.Basic_test.t, Id.t)
                 Fieldslib.Field.t_with_perm -> 'b) ->
        name:('->
              ([< `Read | `Set_and_create ], Test.Basic_test.t, string)
              Fieldslib.Field.t_with_perm -> 'c) ->
        f:('->
           ([< `Read | `Set_and_create ], Test.Basic_test.t, unit -> unit)
           Fieldslib.Field.t_with_perm -> 'd) ->
        'd
      val map_poly :
        ([< `Read | `Set_and_create ], Test.Basic_test.t, 'a)
        Fieldslib.Field.user -> 'a list
      val for_all :
        test_id:(([< `Read | `Set_and_create ], Test.Basic_test.t, Id.t)
                 Fieldslib.Field.t_with_perm -> bool) ->
        name:(([< `Read | `Set_and_create ], Test.Basic_test.t, string)
              Fieldslib.Field.t_with_perm -> bool) ->
        f:(([< `Read | `Set_and_create ], Test.Basic_test.t, unit -> unit)
           Fieldslib.Field.t_with_perm -> bool) ->
        bool
      val exists :
        test_id:(([< `Read | `Set_and_create ], Test.Basic_test.t, Id.t)
                 Fieldslib.Field.t_with_perm -> bool) ->
        name:(([< `Read | `Set_and_create ], Test.Basic_test.t, string)
              Fieldslib.Field.t_with_perm -> bool) ->
        f:(([< `Read | `Set_and_create ], Test.Basic_test.t, unit -> unit)
           Fieldslib.Field.t_with_perm -> bool) ->
        bool
      val to_list :
        test_id:(([< `Read | `Set_and_create ], Test.Basic_test.t, Id.t)
                 Fieldslib.Field.t_with_perm -> 'a) ->
        name:(([< `Read | `Set_and_create ], Test.Basic_test.t, string)
              Fieldslib.Field.t_with_perm -> 'a) ->
        f:(([< `Read | `Set_and_create ], Test.Basic_test.t, unit -> unit)
           Fieldslib.Field.t_with_perm -> 'a) ->
        'a list
      module Direct :
        sig
          val iter :
            Test.Basic_test.t ->
            test_id:(([< `Read | `Set_and_create ], Test.Basic_test.t, Id.t)
                     Fieldslib.Field.t_with_perm ->
                     Test.Basic_test.t -> Id.t -> 'a) ->
            name:(([< `Read | `Set_and_create ], Test.Basic_test.t, string)
                  Fieldslib.Field.t_with_perm ->
                  Test.Basic_test.t -> string -> 'b) ->
            f:(([< `Read | `Set_and_create ], Test.Basic_test.t,
                unit -> unit)
               Fieldslib.Field.t_with_perm ->
               Test.Basic_test.t -> (unit -> unit) -> 'c) ->
            'c
          val fold :
            Test.Basic_test.t ->
            init:'->
            test_id:('->
                     ([< `Read | `Set_and_create ], Test.Basic_test.t, Id.t)
                     Fieldslib.Field.t_with_perm ->
                     Test.Basic_test.t -> Id.t -> 'b) ->
            name:('->
                  ([< `Read | `Set_and_create ], Test.Basic_test.t, string)
                  Fieldslib.Field.t_with_perm ->
                  Test.Basic_test.t -> string -> 'c) ->
            f:('->
               ([< `Read | `Set_and_create ], Test.Basic_test.t,
                unit -> unit)
               Fieldslib.Field.t_with_perm ->
               Test.Basic_test.t -> (unit -> unit) -> 'd) ->
            'd
        end
    end
end