diff --git a/src/metadata.jl b/src/metadata.jl index 30c76551..8ebd783c 100644 --- a/src/metadata.jl +++ b/src/metadata.jl @@ -87,9 +87,9 @@ macro meta_type(name, mainfield, supertype, params...) GeometryBasics.MetaFree(::Type{<: $MetaName{Typ}}) where Typ = Typ GeometryBasics.MetaFree(::Type{<: $MetaName}) = $name - GeometryBasics.metafree(x::$MetaName) = x.main + GeometryBasics.metafree(x::$MetaName) = getfield(x, :main) GeometryBasics.metafree(x::AbstractVector{<: $MetaName}) = getcolumns(x, $field)[1] - GeometryBasics.meta(x::$MetaName) = x.meta + GeometryBasics.meta(x::$MetaName) = getfield(x, :meta) GeometryBasics.meta(x::AbstractVector{<: $MetaName}) = getcolumns(x, :meta)[1] function (MT::Type{<: $MetaName})(args...; meta...) nt = values(meta) diff --git a/test/runtests.jl b/test/runtests.jl index f8d78925..a4aec747 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -6,7 +6,7 @@ using GeometryBasics: TupleView, TriangleFace, SimplexFace, LineString, Mesh, me using Test, Random, Query, StructArrays, Tables using StaticArrays - +@testset "GeometryBasics" begin @testset "embedding metadata" begin @testset "Meshes" begin @@ -83,6 +83,14 @@ using StaticArrays @test length(filtered) == 7 end end + + @testset "point with metadata" begin + p = Point(1.1, 2.2) + @test p isa AbstractVector{Float64} + pm = GeometryBasics.PointMeta(1.1, 2.2; a=1, b=2) + @test meta(pm) === (a=1, b=2) + @test metafree(pm) === p + end end @testset "view" begin @@ -146,6 +154,14 @@ end @test triangles == [Tetrahedron(points...)] end + @testset "reinterpret" begin + numbers = collect(reshape(1:6, 2, 3)) + points = reinterpret(Point{2, Int}, numbers) + @test points[1] === Point(1, 2) + @test points[2] === Point(3, 4) + numbers[4] = 0 + @test points[2] === Point(3, 0) + end end @@ -220,3 +236,4 @@ end end end +end