diff --git a/.gitignore b/.gitignore index d36afc99..125d9e10 100644 --- a/.gitignore +++ b/.gitignore @@ -4,10 +4,6 @@ build venv* **/.vscode/** **/.idea/** -**/*_generated.go -**/coverage.out -**/flatdata-fuzz.zip -**/corpus/** **/dist/** *.egg-info .DS_Store diff --git a/README.md b/README.md index cf2dc804..9994de15 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,6 @@ The following languages are supported: * Read-only implementations: * **[Python](./flatdata-py)** - used mostly for inspecting the data * **[Dot](./flatdata-dot)** - used to generate diagrams of the schema - * **[Go](./flatdata-go)** - beta implementation ### Generate code diff --git a/flatdata-generator/README.md b/flatdata-generator/README.md index 3c07ec40..75ea43e6 100644 --- a/flatdata-generator/README.md +++ b/flatdata-generator/README.md @@ -21,7 +21,6 @@ Currently supported target languages: * C++ * Rust * Python -* Go * Dot (graph of the schema) * Flatdata (normalized stable schema) diff --git a/flatdata-generator/flatdata/generator/engine.py b/flatdata-generator/flatdata/generator/engine.py index bf6a6d9e..a5d274c7 100644 --- a/flatdata-generator/flatdata/generator/engine.py +++ b/flatdata-generator/flatdata/generator/engine.py @@ -11,7 +11,6 @@ from .generators.cpp import CppGenerator from .generators.dot import DotGenerator -from .generators.go import GoGenerator from .generators.python import PythonGenerator from .generators.rust import RustGenerator from .generators.flatdata import FlatdataGenerator @@ -26,7 +25,6 @@ class Engine: _GENERATORS = { "cpp": CppGenerator, "dot": DotGenerator, - "go": GoGenerator, "py": PythonGenerator, "rust": RustGenerator, "flatdata" : FlatdataGenerator diff --git a/flatdata-generator/flatdata/generator/generators/go.py b/flatdata-generator/flatdata/generator/generators/go.py deleted file mode 100644 index e4e5a0c4..00000000 --- a/flatdata-generator/flatdata/generator/generators/go.py +++ /dev/null @@ -1,95 +0,0 @@ -''' - Copyright (c) 2017 HERE Europe B.V. - See the LICENSE file in the root of this project for license details. -''' -from flatdata.generator.tree.nodes.archive import Archive -from flatdata.generator.tree.nodes.node import Node -from flatdata.generator.tree.nodes.resources import Instance, Vector, Multivector, RawData -from flatdata.generator.tree.nodes.resources.archive import Archive as ArchiveResource -from flatdata.generator.tree.nodes.trivial import Structure, Constant - -from . import BaseGenerator - - -class GoGenerator(BaseGenerator): - """Flatdata to Go generator""" - - def __init__(self): - BaseGenerator.__init__(self, "go/go.jinja2") - - def supported_nodes(self): - return [Structure, Archive, Constant] - - def _populate_environment(self, env): - def _decorate_archive_type(value): - assert isinstance(value, Node) - return value.name - - def to_go_doc(value): - lines = value.doc.splitlines() - return '\n'.join(["// " + s for s in lines if len(s) != 0]) - - def type_mapping(flatdata_type, _struct): - if is_bool(flatdata_type): - return "uint8" - return go_mapping(flatdata_type) - - def type_mapping_with_bool(flatdata_type): - if is_bool(flatdata_type): - return "bool" - return go_mapping(flatdata_type) - - def go_mapping(flatdata_type): - return { - "i8": "int8", - "u8": "uint8", - "u16": "uint16", - "i16": "int16", - "u32": "uint32", - "i32": "int32", - "u64": "uint64", - "i64": "int64" - }[flatdata_type] - - def is_bool(flatdata_type): - return flatdata_type == "bool" - - def to_go_case(name, exported=True): - if "_" in name: - name = "".join(part.title() for part in name.split("_")) - return (str.upper if exported else str.lower)(str(name[0])) + str(name[1:]) - - def to_initializer(resource, tree): - if isinstance(resource, Instance): - return _decorate_archive_type(resource.referenced_structures[0].node) - if isinstance(resource, Vector): - return _decorate_archive_type(resource.referenced_structures[0].node) - if isinstance(resource, Multivector): - return "[{}]".format(','.join( - [_decorate_archive_type(t.node) - for t in resource.referenced_structures] - )) - if isinstance(resource, ArchiveResource): - return _decorate_archive_type(resource.children[0].node) - if isinstance(resource, RawData): - return "None" - raise ValueError("Unknown resource type: %s" % (resource.__class__)) - - def get_types_for_multivector(resource, _tree): - return [_decorate_archive_type(t.node) for t in resource.referenced_structures] - - def contains_archive_resource(tree): - for child in tree.root.children[0].children: - for res in child.children: - if isinstance(res, ArchiveResource): - return True - return False - - env.filters['to_go_doc'] = to_go_doc - env.filters['to_initializer'] = to_initializer - env.filters['type_mapping'] = type_mapping - env.filters['type_mapping_with_bool'] = type_mapping_with_bool - env.filters['to_go_case'] = to_go_case - env.filters['is_bool'] = is_bool - env.filters['get_types_for_multivector'] = get_types_for_multivector - env.filters['contains_archive_resource'] = contains_archive_resource diff --git a/flatdata-generator/flatdata/generator/templates/go/__init__.py b/flatdata-generator/flatdata/generator/templates/go/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/flatdata-generator/flatdata/generator/templates/go/archive.jinja2 b/flatdata-generator/flatdata/generator/templates/go/archive.jinja2 deleted file mode 100644 index e51d98db..00000000 --- a/flatdata-generator/flatdata/generator/templates/go/archive.jinja2 +++ /dev/null @@ -1,176 +0,0 @@ -{% macro generate(tree, archive) %} -type {{ archive.name|to_go_case }}Archive struct { - IsOptional bool - IsOpen bool - {% for resource in archive.resources if not resource|is_bound_resource %} - {% if resource|is_vector %} - {{ resource.name|to_go_case }}Vector *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector - {% elif resource|is_archive_resource %} - {{ resource.name|to_go_case }}Archive *{{ resource.name|to_go_case }}Archive - {% elif resource|is_raw_data %} - {{ resource.name|to_go_case }}RawData *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}RawData - {% elif resource|is_multivector %} - {{ resource.name|to_go_case }}Multivector *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Multivector - {% elif resource|is_instance %} - {{ resource.name|to_go_case }}Instance *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Instance - {% endif %} - {% endfor %} -} - -func (v *{{ archive.name|to_go_case }}Archive) Close() { - {% for resource in archive.resources if not resource|is_bound_resource %} - {% if resource|is_vector %} - if v.{{ resource.name|to_go_case }}Vector.IsOpen { - v.{{ resource.name|to_go_case }}Vector.Close() - } - {% elif resource|is_archive_resource %} - if v.{{ resource.name|to_go_case }}Archive.IsOpen { - v.{{ resource.name|to_go_case }}Archive.Close() - } - {% elif resource|is_raw_data %} - if v.{{ resource.name|to_go_case }}RawData.IsOpen { - v.{{ resource.name|to_go_case }}RawData.Close() - } - {% elif resource|is_multivector %} - if v.{{ resource.name|to_go_case }}Multivector.IsOpen { - v.{{ resource.name|to_go_case }}Multivector.Close() - } - {% elif resource|is_instance %} - if v.{{ resource.name|to_go_case }}Instance.IsOpen { - v.{{ resource.name|to_go_case }}Instance.Close() - } - {% endif %} - {% endfor %} -} - -func (v *{{ archive.name|to_go_case }}Archive) GetSizeInBytes() int { - var size int - {% for resource in archive.resources if not resource|is_bound_resource %} - {% if resource|is_vector %} - if v.{{ resource.name|to_go_case }}Vector.IsOpen { - size += v.{{ resource.name|to_go_case }}Vector.GetSizeInBytes() - } - {% elif resource|is_archive_resource %} - if v.{{ resource.name|to_go_case }}Archive.IsOpen { - size += v.{{ resource.name|to_go_case }}Archive.GetSizeInBytes() - } - {% elif resource|is_raw_data %} - if v.{{ resource.name|to_go_case }}RawData.IsOpen { - size += v.{{ resource.name|to_go_case }}RawData.GetSizeInBytes() - } - {% elif resource|is_multivector %} - if v.{{ resource.name|to_go_case }}Multivector.IsOpen { - size += v.{{ resource.name|to_go_case }}Multivector.GetSizeInBytes() - } - {% elif resource|is_instance %} - if v.{{ resource.name|to_go_case }}Instance.IsOpen { - size += v.{{ resource.name|to_go_case }}Instance.GetSizeInBytes() - } - {% endif %} - {% endfor %} - return size -} - -func (v *{{ archive.name|to_go_case }}Archive) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "{{ archive.name|to_go_case }}", "container_type": "Archive", "size_in_bytes": %d, "resources": [`, v.GetSizeInBytes())) - {% for resource in archive.resources if not resource|is_bound_resource %} - {% if resource|is_vector %} - buffer.WriteString(v.{{ resource.name|to_go_case }}Vector.ToString()) - {% elif resource|is_archive_resource %} - buffer.WriteString(v.{{ resource.name|to_go_case }}Archive.ToString()) - {% elif resource|is_raw_data %} - buffer.WriteString(v.{{ resource.name|to_go_case }}RawData.ToString()) - {% elif resource|is_multivector %} - buffer.WriteString(v.{{ resource.name|to_go_case }}Multivector.ToString()) - {% elif resource|is_instance %} - buffer.WriteString(v.{{ resource.name|to_go_case }}Instance.ToString()) - {% endif %} - {% if not loop.last %} - buffer.WriteString(",") - {% endif %} - {% endfor %} - buffer.WriteString("]}") - return buffer.String() -} - -func Open{{ archive.name|to_go_case }}Archive(resource flatdata.ResourceStorage) (*{{ archive.name|to_go_case }}Archive, error) { - v := &{{ archive.name|to_go_case }}Archive{} - // Initialize resources - {% for resource in archive.resources if not resource|is_bound_resource%} - {% if resource|is_archive_resource %} - {{ resource.name|lower|to_go_case(false) }}Archive, err := Open{{ resource.name|to_go_case }}Archive(flatdata.NewFileResourceStorage(filepath.Join(resource.GetBasePath(), "{{ resource.name|lower }}/{{ resource|to_initializer(tree) }}.archive"))) - {{ resource.name|lower|to_go_case(false)}}Archive.IsOptional = {{ resource.optional|lower }} - {{ resource.name|lower|to_go_case(false) }}Archive.IsOpen = true - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - {{ resource.name|lower|to_go_case(false) }}Archive.IsOpen = false - } else { - return v, err - } - } - {% else %} - {{ resource.name|lower|to_go_case(false) }}IsOpen := true - {{ resource.name|lower|to_go_case(false) }}MemoryDescriptor, schema, err := resource.GetMemoryDescriptor("{{ resource.name }}") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - {{ resource.name|lower|to_go_case(false) }}IsOpen = false - } else { - return v, err - } - } - {% if resource|is_multivector %} - {{ resource.name|lower|to_go_case(false) }}IndexMemoryDescriptor, _, err := resource.GetMemoryDescriptor("{{ resource.name }}_index") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - {{ resource.name|lower|to_go_case(false) }}IsOpen = false - } else { - return v, err - } - } - {% endif %} - if {{ resource.name|lower|to_go_case(false) }}IsOpen { - {{ resource.name|lower|to_go_case(false) }}Schema := `{{ tree.schema(resource) }}` - if {{ resource.name|lower|to_go_case(false) }}Schema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", {{ resource.name|lower|to_go_case(false) }}Schema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - {% endif %} - {% endfor %} - // Add resources to archive - {% for resource in archive.resources if not resource|is_bound_resource %} - {% if resource|is_archive_resource %} - v.{{ resource.name|to_go_case }}Archive = {{ resource.name|lower|to_go_case(false) }}Archive - {% else %} - {% if resource|is_vector %} - v.{{ resource.name|to_go_case }}Vector = &{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector{ - {% elif resource|is_raw_data %} - v.{{ resource.name|to_go_case }}RawData = &{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}RawData{ - {% elif resource|is_multivector %} - v.{{ resource.name|to_go_case }}Multivector = &{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Multivector{ - {% elif resource|is_instance %} - v.{{ resource.name|to_go_case }}Instance = &{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Instance { - {% endif %} - descriptor: {{ resource.name|lower|to_go_case(false) }}MemoryDescriptor, - {% if resource|is_multivector %} - index: &{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector{descriptor: {{ resource.name|lower|to_go_case(false) }}IndexMemoryDescriptor}, - types: map[int]interface{}{ - {% for entry in resource|get_types_for_multivector(tree) %} - {% if loop.index0 >= 1%} - {{ loop.index0 - 1 }}: &{{ entry|to_go_case }}{descriptor: {{ resource.name|lower|to_go_case(false) }}MemoryDescriptor}, - {% endif %} - {% endfor %} - }, - {% endif %} - IsOptional: {{ resource.optional|lower }}, - IsOpen: {{ resource.name|lower|to_go_case(false) }}IsOpen, - } - {% endif %} - {% endfor %} - return v, nil -} -{% endmacro %} \ No newline at end of file diff --git a/flatdata-generator/flatdata/generator/templates/go/base.jinja2 b/flatdata-generator/flatdata/generator/templates/go/base.jinja2 deleted file mode 100644 index 035554b0..00000000 --- a/flatdata-generator/flatdata/generator/templates/go/base.jinja2 +++ /dev/null @@ -1,33 +0,0 @@ -{% macro generate(tree, nodes) %} -///////////////////////////////////////////////////////////////////////// -// ATTENTION! -// This code is automatically generated by flatdata generator. -// Any modifications to this file will be lost upon next regeneration. -///////////////////////////////////////////////////////////////////////// -package {{ tree.root.children[0].name }} - -import ( - "bytes" - "encoding/binary" - "errors" - "fmt" - "log" -{% if tree|contains_archive_resource %} - "path/filepath" -{% endif %} - - "github.com/heremaps/flatdata/flatdata-go/flatdata" -) - -const ( - flatdataOffsetSizeInBytes uint = 8 - flatdataPaddingSizeInBytes uint = 8 -{% for node in nodes %} - {% if node|is_structure %} - {{ node.name|to_go_case(false) }}SizeInBytes = {{ node.size_in_bytes }} - {% elif node|is_constant %} - {{ node.name|to_go_case }} {{ node.type.name|type_mapping(node) }} = {{ node.value }} - {% endif %} -{% endfor %} -) -{% endmacro %} \ No newline at end of file diff --git a/flatdata-generator/flatdata/generator/templates/go/go.jinja2 b/flatdata-generator/flatdata/generator/templates/go/go.jinja2 deleted file mode 100644 index 184fc50f..00000000 --- a/flatdata-generator/flatdata/generator/templates/go/go.jinja2 +++ /dev/null @@ -1,35 +0,0 @@ -{% import "go/archive.jinja2" as go_archive %} -{% import "go/vector.jinja2" as go_vector %} -{% import "go/rawdata.jinja2" as go_rawdata %} -{% import "go/instance.jinja2" as go_instance %} -{% import "go/multivector.jinja2" as go_multivector %} -{% import "go/base.jinja2" as go_base %} -{% import "go/structure.jinja2" as go_struct %} -{{ go_base.generate(tree, nodes) }} - -{% macro structure_definition(tree, struct) %} -{{ go_struct.generate(tree, struct) }} -{% endmacro %} - -{% macro archive_definition(tree, archive) %} -{% for resource in archive.resources if not resource|is_bound_resource %} -{% if resource|is_instance %} -{{ go_instance.generate(tree, archive, resource) }} -{% elif resource|is_vector %} -{{ go_vector.generate(tree, archive, resource) }} -{% elif resource|is_raw_data %} -{{ go_rawdata.generate(tree, archive, resource) }} -{% elif resource|is_multivector %} -{{ go_multivector.generate(tree, archive, resource) }} -{% endif %} -{% endfor %} -{{ go_archive.generate(tree, archive) }} -{% endmacro %} - -{% for node in nodes %} - {%- if node|is_structure %} - {{- structure_definition(tree, node) }} - {%- elif node|is_archive %} - {{- archive_definition(tree, node) }} - {% endif %} -{% endfor %} diff --git a/flatdata-generator/flatdata/generator/templates/go/instance.jinja2 b/flatdata-generator/flatdata/generator/templates/go/instance.jinja2 deleted file mode 100644 index 09c0ffe9..00000000 --- a/flatdata-generator/flatdata/generator/templates/go/instance.jinja2 +++ /dev/null @@ -1,41 +0,0 @@ -{% macro generate(tree, archive, resource) %} -type {{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Instance struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Instance) Get() *{{ resource|to_initializer(tree)|to_go_case }} { - return &{{ resource|to_initializer(tree)|to_go_case }}{ - descriptor: v.descriptor, - position: int(flatdataOffsetSizeInBytes), - } -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Instance) GetSize() int { - return 1 -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Instance) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Instance) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Instance) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Instance", "size": %d, "size_in_bytes": %d, `, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`"element_types": [{ "name": "{{ resource.referenced_structures[0].node.name|to_go_case }}", "attributes": [`) - {% for field in resource.referenced_structures[0].node.fields %} - buffer.WriteString(`{"name": "{{ field.name }}", "offset": {{ field.offset }}, "width": {{ field.type.width }}, "is_signed": {{ field.type.is_signed|lower }}}`) - {% if loop.length != loop.index %} - buffer.WriteString(",") - {% endif %} - {% endfor %} - buffer.WriteString("]}]}") - return buffer.String() -} -{% endmacro %} \ No newline at end of file diff --git a/flatdata-generator/flatdata/generator/templates/go/multivector.jinja2 b/flatdata-generator/flatdata/generator/templates/go/multivector.jinja2 deleted file mode 100644 index 8564cf1a..00000000 --- a/flatdata-generator/flatdata/generator/templates/go/multivector.jinja2 +++ /dev/null @@ -1,93 +0,0 @@ -{% import "go/vector.jinja2" as go_vector %} -{% macro generate(tree, archive, resource) %} -{{ go_vector.generate(tree, archive, resource) }} - -type {{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Multivector struct { - descriptor flatdata.MemoryDescriptor - index *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector - types map[int]interface{} - IsOptional bool - IsOpen bool -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Multivector) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Multivector) GetSize() int { - return v.index.GetSize() -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Multivector) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Multivector) getBucketOffset(i int) int { - if i == v.index.GetSize() { - return v.descriptor.Len() - int(flatdataPaddingSizeInBytes) - } - return int(v.index.Get(i).GetValue()) + int(flatdataOffsetSizeInBytes) -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Multivector) Get(i int) []interface{} { - offset := v.getBucketOffset(i) - nextOffset := v.getBucketOffset(i + 1) - var result []interface{} - - for offset < nextOffset { - elementType := flatdata.Read(v.descriptor, uint(offset*8), 8, false) - offset++ - abstractElement, ok := v.types[elementType] - if !ok { - //TODO: How to process case, then type of element is not found? - log.Println("Can't get type of element") - } - - switch element := abstractElement.(type) { - {% for entry in resource|get_types_for_multivector(tree) %} - {% if loop.index0 >= 1%} - case *{{ entry|to_go_case }}: - element.position = offset - result = append(result, element) - offset += {{ entry|to_go_case(false) }}SizeInBytes - {% endif %} - {% endfor %} - default: - //TODO: How to react in case if it's impossible to cast? - log.Println("Can't cast element. Type is unknown...") - } - } - - return result -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Multivector) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Multivector", "size": %d, "size_in_bytes": %d, "element_types": [`, v.GetSize(), v.GetSizeInBytes())) - {% for struct in resource.referenced_structures %} - {% if loop.index0 >= 1 %} - buffer.WriteString(`{"name": "{{ resource.referenced_structures[loop.index0].node.name|to_go_case }}", "attributes": [`) - {% for field in resource.referenced_structures[loop.index0].node.fields %} - buffer.WriteString(`{"name": "{{ field.name }}", "offset": {{ field.offset }}, "width": {{ field.type.width }}, "is_signed": {{ field.type.is_signed|lower }}}`) - {% if loop.length != loop.index %} - buffer.WriteString(",") - {% endif %} - {% endfor %} - buffer.WriteString("]}") - {% if loop.length != loop.index %} - buffer.WriteString(",") - {% endif %} - {% endif %} - {% endfor %} - buffer.WriteString(`], "index_type": {"name": "{{ resource.referenced_structures[0].node.name|to_go_case }}", "attributes": [`) - {% for field in resource.referenced_structures[0].node.fields %} - buffer.WriteString(`{"name": "{{ field.name }}", "offset": {{ field.offset }}, "width": {{ field.type.width }}, "is_signed": {{ field.type.is_signed|lower }}}`) - {% if loop.length != loop.index %} - buffer.WriteString(",") - {% endif %} - {% endfor %} - buffer.WriteString("]}}") - return buffer.String() -} -{% endmacro %} \ No newline at end of file diff --git a/flatdata-generator/flatdata/generator/templates/go/rawdata.jinja2 b/flatdata-generator/flatdata/generator/templates/go/rawdata.jinja2 deleted file mode 100644 index 2e2f6c56..00000000 --- a/flatdata-generator/flatdata/generator/templates/go/rawdata.jinja2 +++ /dev/null @@ -1,38 +0,0 @@ -{% macro generate(tree, archive, resource) %} -type {{ archive.name|to_go_case }}{{ resource.name|to_go_case }}RawData struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}RawData) GetValue() []byte { - data := make([]byte, v.GetSize()) - _, err := v.descriptor.ReadAt(data, 8) - if err != nil { - return make([]byte, 0) - } - return data -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}RawData) GetSize() int { - size := make([]byte, 8) - _, err := v.descriptor.ReadAt(size, 0) - if err != nil { - return 0 - } - return int(binary.LittleEndian.Uint64(size)) -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}RawData) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}RawData) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}RawData) ToString() string { - return fmt.Sprintf(`{"container_type": "RawData", "size": %d, "size_in_bytes": %d, "element_types": []}`, v.GetSize(), v.GetSizeInBytes()) -} -{% endmacro %} \ No newline at end of file diff --git a/flatdata-generator/flatdata/generator/templates/go/structure.jinja2 b/flatdata-generator/flatdata/generator/templates/go/structure.jinja2 deleted file mode 100644 index fa11b489..00000000 --- a/flatdata-generator/flatdata/generator/templates/go/structure.jinja2 +++ /dev/null @@ -1,39 +0,0 @@ -{% macro generate(tree, struct) %} -{{ struct|to_go_doc}} -type {{ struct.name|to_go_case }} struct { - descriptor flatdata.MemoryDescriptor - position int -} - -{% for field in struct.fields %} -func (v *{{ struct.name|to_go_case }}) Get{{ field.name|to_go_case }}() {{ field.type.name|type_mapping_with_bool }} { - {% if field.doc %} - {{ field|to_go_doc|indent(8) }} - {% endif %} - elementSizeInBits := uint({{ field.type.width }}) - elementOffset := uint({{ field.offset }}) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, {{ field.type.is_signed|lower }}) -{% if field.type.name|is_bool %} - return result == 1 -{% else %} - return {{ field.type.name|type_mapping_with_bool }}(result) -{% endif %} -} - -{% endfor %} - -func (v *{{ struct.name|to_go_case }}) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "{{ struct.name }}", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - {% for field in struct.fields %} - buffer.WriteString(fmt.Sprintf(`"{{ field.name }}": %v`, {% if field.type.name|is_bool %}v.Get{{ field.name|to_go_case }}(){% else %}v.Get{{ field.name|to_go_case }}(){% endif %})) - {% if loop.length != loop.index %} - buffer.WriteString(",") - {% endif %} - {% endfor %} - } - buffer.WriteString("}}") - return buffer.String() -} -{% endmacro %} \ No newline at end of file diff --git a/flatdata-generator/flatdata/generator/templates/go/vector.jinja2 b/flatdata-generator/flatdata/generator/templates/go/vector.jinja2 deleted file mode 100644 index ac6f34fb..00000000 --- a/flatdata-generator/flatdata/generator/templates/go/vector.jinja2 +++ /dev/null @@ -1,61 +0,0 @@ -{% macro generate(tree, archive, resource) %} -{{ resource|to_go_doc }} -type {{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector) Get(i int) *{% if resource|is_multivector %}{{ resource|get_types_for_multivector(tree)|first|to_go_case }}{% else %}{{ resource|to_initializer(tree)|to_go_case }}{% endif %} { - return &{% if resource|is_multivector %}{{ resource|get_types_for_multivector(tree)|first|to_go_case }}{% else %}{{ resource|to_initializer(tree)|to_go_case }}{% endif %}{ - descriptor: v.descriptor, - position: int(uint(i*{% if resource|is_multivector %}{{ resource|get_types_for_multivector(tree)|first|to_go_case(False) }}{% else %}{{ resource|to_initializer(tree)|to_go_case(False) }}{% endif %}SizeInBytes) + flatdataOffsetSizeInBytes), - } -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector) GetSize() int { - size := make([]byte, 8) - _, err := v.descriptor.ReadAt(size, 0) - if err != nil { - return 0 - } - intSize := binary.LittleEndian.Uint64(size) - return int(intSize) / {% if resource|is_multivector %}{{ resource|get_types_for_multivector(tree)|first|to_go_case(false) }}{% else %}{{ resource|to_initializer(tree)|to_go_case(false) }}{% endif %}SizeInBytes -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector) GetSlice(start, end, step int) []*{% if resource|is_multivector %}{{ resource|get_types_for_multivector(tree)|first|to_go_case }}{% else %}{{ resource|to_initializer(tree)|to_go_case }}{% endif %} { - var result []*{% if resource|is_multivector %}{{ resource|get_types_for_multivector(tree)|first|to_go_case }}{% else %}{{ resource|to_initializer(tree)|to_go_case }}{% endif %} - - for start <= end { - result = append(result, &{% if resource|is_multivector %}{{ resource|get_types_for_multivector(tree)|first|to_go_case }}{% else %}{{ resource|to_initializer(tree)|to_go_case }}{% endif %}{ - descriptor: v.descriptor, - position: int(uint(start*{% if resource|is_multivector %}{{ resource|get_types_for_multivector(tree)|first|to_go_case(False) }}{% else %}{{ resource|to_initializer(tree)|to_go_case(False) }}{% endif %}SizeInBytes) + flatdataOffsetSizeInBytes), - }) - start += step - } - return result -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *{{ archive.name|to_go_case }}{{ resource.name|to_go_case }}Vector) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Vector", "size": %d, "size_in_bytes": %d, `, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`"element_types": [{ "name": "{{ resource.referenced_structures[0].node.name|to_go_case }}", "attributes": [`) - {% for field in resource.referenced_structures[0].node.fields %} - buffer.WriteString(`{"name": "{{ field.name }}", "offset": {{ field.offset }}, "width": {{ field.type.width }}, "is_signed": {{ field.type.is_signed|lower }}}`) - {% if loop.length != loop.index %} - buffer.WriteString(",") - {% endif %} - {% endfor %} - buffer.WriteString("]}]}") - return buffer.String() -} -{% endmacro %} \ No newline at end of file diff --git a/flatdata-generator/pyproject.toml b/flatdata-generator/pyproject.toml index 71861794..a3dbe187 100644 --- a/flatdata-generator/pyproject.toml +++ b/flatdata-generator/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "hatchling.build" [project] name = "flatdata-generator" version = "0.4.10" -description = "Generate source code for C++, Rust, Go or Python from a Flatdata schema file" +description = "Generate source code for C++, Rust, or Python from a Flatdata schema file" readme = "README.md" authors = [ { name = "Flatdata Developers" }, diff --git a/flatdata-generator/tests/generators/go_expectations/archives/comments.go b/flatdata-generator/tests/generators/go_expectations/archives/comments.go deleted file mode 100644 index e69de29b..00000000 diff --git a/flatdata-generator/tests/generators/go_expectations/archives/empty.go b/flatdata-generator/tests/generators/go_expectations/archives/empty.go deleted file mode 100644 index 3fe01568..00000000 --- a/flatdata-generator/tests/generators/go_expectations/archives/empty.go +++ /dev/null @@ -1,26 +0,0 @@ -type AArchive struct { - IsOptional bool - IsOpen bool -} - -func (v *AArchive) Close() { -} - -func (v *AArchive) GetSizeInBytes() int { - var size int - return size -} - -func (v *AArchive) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "A", "container_type": "Archive", "size_in_bytes": %d, "resources": [`, v.GetSizeInBytes())) - buffer.WriteString("]}") - return buffer.String() -} - -func OpenAArchive(resource flatdata.ResourceStorage) (*AArchive, error) { - v := &AArchive{} - // Initialize resources - // Add resources to archive - return v, nil -} \ No newline at end of file diff --git a/flatdata-generator/tests/generators/go_expectations/archives/multivector.go b/flatdata-generator/tests/generators/go_expectations/archives/multivector.go deleted file mode 100644 index c476b769..00000000 --- a/flatdata-generator/tests/generators/go_expectations/archives/multivector.go +++ /dev/null @@ -1,769 +0,0 @@ -const ( - flatdataOffsetSizeInBytes uint = 8 - flatdataPaddingSizeInBytes uint = 8 - sSizeInBytes = 8 - tSizeInBytes = 8 - indexType8SizeInBytes = 1 - indexType16SizeInBytes = 2 - indexType64SizeInBytes = 8 -) - -type S struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *S) GetX() uint64 { - elementSizeInBits := uint(64) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - - -func (v *S) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "S", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"x": %v`, v.GetX())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type T struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *T) GetX() uint64 { - elementSizeInBits := uint(64) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - - -func (v *T) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "T", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"x": %v`, v.GetX())) - } - buffer.WriteString("}}") - return buffer.String() -} - -// /** Builtin type to for MultiVector index */ -type IndexType8 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *IndexType8) GetValue() uint64 { - elementSizeInBits := uint(8) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - - -func (v *IndexType8) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "IndexType8", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"value": %v`, v.GetValue())) - } - buffer.WriteString("}}") - return buffer.String() -} - -// /** Builtin type to for MultiVector index */ -type IndexType16 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *IndexType16) GetValue() uint64 { - elementSizeInBits := uint(16) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - - -func (v *IndexType16) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "IndexType16", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"value": %v`, v.GetValue())) - } - buffer.WriteString("}}") - return buffer.String() -} - -// /** Builtin type to for MultiVector index */ -type IndexType64 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *IndexType64) GetValue() uint64 { - elementSizeInBits := uint(64) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - - -func (v *IndexType64) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "IndexType64", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"value": %v`, v.GetValue())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type ADataVector struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *ADataVector) Get(i int) *IndexType8 { - return &IndexType8{ - descriptor: v.descriptor, - position: int(uint(i*indexType8SizeInBytes) + flatdataOffsetSizeInBytes), - } -} - -func (v *ADataVector) GetSize() int { - size := make([]byte, 8) - _, err := v.descriptor.ReadAt(size, 0) - if err != nil { - return 0 - } - intSize := binary.LittleEndian.Uint64(size) - return int(intSize) / indexType8SizeInBytes -} - -func (v *ADataVector) GetSlice(start, end, step int) []*IndexType8 { - var result []*IndexType8 - for start <= end { - result = append(result, &IndexType8{ - descriptor: v.descriptor, - position: int(uint(start*indexType8SizeInBytes) + flatdataOffsetSizeInBytes), - }) - start += step - } - return result -} - -func (v *ADataVector) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *ADataVector) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *ADataVector) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Vector", "size": %d, "size_in_bytes": %d, `, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`"element_types": [{ "name": "IndexType8", "attributes": [`) - buffer.WriteString(`{"name": "value", "offset": 0, "width": 8, "is_signed": false}`) - - buffer.WriteString("]}]}") - return buffer.String() -} - - -type ADataMultivector struct { - descriptor flatdata.MemoryDescriptor - index *ADataVector - types map[int]interface{} - IsOptional bool - IsOpen bool -} - -func (v *ADataMultivector) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *ADataMultivector) GetSize() int { - return v.index.GetSize() -} - -func (v *ADataMultivector) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *ADataMultivector) getBucketOffset(i int) int { - if i == v.index.GetSize() { - return v.descriptor.Len() - int(flatdataPaddingSizeInBytes) - } - return int(v.index.Get(i).GetValue()) + int(flatdataOffsetSizeInBytes) -} - -func (v *ADataMultivector) Get(i int) []interface{} { - offset := v.getBucketOffset(i) - nextOffset := v.getBucketOffset(i + 1) - var result []interface{} - - for offset < nextOffset { - elementType := flatdata.Read(v.descriptor, uint(offset*8), 8, false) - offset++ - abstractElement, ok := v.types[elementType] - if !ok { - //TODO: How to process case, then type of element is not found? - log.Println("Can't get type of element") - } - - switch element := abstractElement.(type) { - case *S: - element.position = offset - result = append(result, element) - offset += sSizeInBytes - case *T: - element.position = offset - result = append(result, element) - offset += tSizeInBytes - default: - //TODO: How to react in case if it's impossible to cast? - log.Println("Can't cast element. Type is unknown...") - } - } - - return result -} - -func (v *ADataMultivector) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Multivector", "size": %d, "size_in_bytes": %d, "element_types": [`, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`{"name": "S", "attributes": [`) - buffer.WriteString(`{"name": "x", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}") - buffer.WriteString(",") - - buffer.WriteString(`{"name": "T", "attributes": [`) - buffer.WriteString(`{"name": "x", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}") - - buffer.WriteString(`], "index_type": {"name": "IndexType8", "attributes": [`) - buffer.WriteString(`{"name": "value", "offset": 0, "width": 8, "is_signed": false}`) - - buffer.WriteString("]}}") - return buffer.String() -} - - -type AOptionalDataVector struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *AOptionalDataVector) Get(i int) *IndexType16 { - return &IndexType16{ - descriptor: v.descriptor, - position: int(uint(i*indexType16SizeInBytes) + flatdataOffsetSizeInBytes), - } -} - -func (v *AOptionalDataVector) GetSize() int { - size := make([]byte, 8) - _, err := v.descriptor.ReadAt(size, 0) - if err != nil { - return 0 - } - intSize := binary.LittleEndian.Uint64(size) - return int(intSize) / indexType16SizeInBytes -} - -func (v *AOptionalDataVector) GetSlice(start, end, step int) []*IndexType16 { - var result []*IndexType16 - for start <= end { - result = append(result, &IndexType16{ - descriptor: v.descriptor, - position: int(uint(start*indexType16SizeInBytes) + flatdataOffsetSizeInBytes), - }) - start += step - } - return result -} - -func (v *AOptionalDataVector) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *AOptionalDataVector) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *AOptionalDataVector) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Vector", "size": %d, "size_in_bytes": %d, `, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`"element_types": [{ "name": "IndexType16", "attributes": [`) - buffer.WriteString(`{"name": "value", "offset": 0, "width": 16, "is_signed": false}`) - - buffer.WriteString("]}]}") - return buffer.String() -} - - -type AOptionalDataMultivector struct { - descriptor flatdata.MemoryDescriptor - index *AOptionalDataVector - types map[int]interface{} - IsOptional bool - IsOpen bool -} - -func (v *AOptionalDataMultivector) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *AOptionalDataMultivector) GetSize() int { - return v.index.GetSize() -} - -func (v *AOptionalDataMultivector) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *AOptionalDataMultivector) getBucketOffset(i int) int { - if i == v.index.GetSize() { - return v.descriptor.Len() - int(flatdataPaddingSizeInBytes) - } - return int(v.index.Get(i).GetValue()) + int(flatdataOffsetSizeInBytes) -} - -func (v *AOptionalDataMultivector) Get(i int) []interface{} { - offset := v.getBucketOffset(i) - nextOffset := v.getBucketOffset(i + 1) - var result []interface{} - - for offset < nextOffset { - elementType := flatdata.Read(v.descriptor, uint(offset*8), 8, false) - offset++ - abstractElement, ok := v.types[elementType] - if !ok { - //TODO: How to process case, then type of element is not found? - log.Println("Can't get type of element") - } - - switch element := abstractElement.(type) { - case *S: - element.position = offset - result = append(result, element) - offset += sSizeInBytes - case *T: - element.position = offset - result = append(result, element) - offset += tSizeInBytes - default: - //TODO: How to react in case if it's impossible to cast? - log.Println("Can't cast element. Type is unknown...") - } - } - - return result -} - -func (v *AOptionalDataMultivector) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Multivector", "size": %d, "size_in_bytes": %d, "element_types": [`, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`{"name": "S", "attributes": [`) - buffer.WriteString(`{"name": "x", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}") - buffer.WriteString(",") - - buffer.WriteString(`{"name": "T", "attributes": [`) - buffer.WriteString(`{"name": "x", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}") - - buffer.WriteString(`], "index_type": {"name": "IndexType16", "attributes": [`) - buffer.WriteString(`{"name": "value", "offset": 0, "width": 16, "is_signed": false}`) - - buffer.WriteString("]}}") - return buffer.String() -} - - -type ADataU64IndexVector struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *ADataU64IndexVector) Get(i int) *IndexType64 { - return &IndexType64{ - descriptor: v.descriptor, - position: int(uint(i*indexType64SizeInBytes) + flatdataOffsetSizeInBytes), - } -} - -func (v *ADataU64IndexVector) GetSize() int { - size := make([]byte, 8) - _, err := v.descriptor.ReadAt(size, 0) - if err != nil { - return 0 - } - intSize := binary.LittleEndian.Uint64(size) - return int(intSize) / indexType64SizeInBytes -} - -func (v *ADataU64IndexVector) GetSlice(start, end, step int) []*IndexType64 { - var result []*IndexType64 - for start <= end { - result = append(result, &IndexType64{ - descriptor: v.descriptor, - position: int(uint(start*indexType64SizeInBytes) + flatdataOffsetSizeInBytes), - }) - start += step - } - return result -} - -func (v *ADataU64IndexVector) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *ADataU64IndexVector) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *ADataU64IndexVector) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Vector", "size": %d, "size_in_bytes": %d, `, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`"element_types": [{ "name": "IndexType64", "attributes": [`) - buffer.WriteString(`{"name": "value", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}]}") - return buffer.String() -} - - -type ADataU64IndexMultivector struct { - descriptor flatdata.MemoryDescriptor - index *ADataU64IndexVector - types map[int]interface{} - IsOptional bool - IsOpen bool -} - -func (v *ADataU64IndexMultivector) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *ADataU64IndexMultivector) GetSize() int { - return v.index.GetSize() -} - -func (v *ADataU64IndexMultivector) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *ADataU64IndexMultivector) getBucketOffset(i int) int { - if i == v.index.GetSize() { - return v.descriptor.Len() - int(flatdataPaddingSizeInBytes) - } - return int(v.index.Get(i).GetValue()) + int(flatdataOffsetSizeInBytes) -} - -func (v *ADataU64IndexMultivector) Get(i int) []interface{} { - offset := v.getBucketOffset(i) - nextOffset := v.getBucketOffset(i + 1) - var result []interface{} - - for offset < nextOffset { - elementType := flatdata.Read(v.descriptor, uint(offset*8), 8, false) - offset++ - abstractElement, ok := v.types[elementType] - if !ok { - //TODO: How to process case, then type of element is not found? - log.Println("Can't get type of element") - } - - switch element := abstractElement.(type) { - case *S: - element.position = offset - result = append(result, element) - offset += sSizeInBytes - case *T: - element.position = offset - result = append(result, element) - offset += tSizeInBytes - default: - //TODO: How to react in case if it's impossible to cast? - log.Println("Can't cast element. Type is unknown...") - } - } - - return result -} - -func (v *ADataU64IndexMultivector) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Multivector", "size": %d, "size_in_bytes": %d, "element_types": [`, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`{"name": "S", "attributes": [`) - buffer.WriteString(`{"name": "x", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}") - buffer.WriteString(",") - - buffer.WriteString(`{"name": "T", "attributes": [`) - buffer.WriteString(`{"name": "x", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}") - - buffer.WriteString(`], "index_type": {"name": "IndexType64", "attributes": [`) - buffer.WriteString(`{"name": "value", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}}") - return buffer.String() -} - -type AArchive struct { - IsOptional bool - IsOpen bool - DataMultivector *ADataMultivector - OptionalDataMultivector *AOptionalDataMultivector - DataU64IndexMultivector *ADataU64IndexMultivector -} - -func (v *AArchive) Close() { - if v.DataMultivector.IsOpen { - v.DataMultivector.Close() - } - if v.OptionalDataMultivector.IsOpen { - v.OptionalDataMultivector.Close() - } - if v.DataU64IndexMultivector.IsOpen { - v.DataU64IndexMultivector.Close() - } -} - -func (v *AArchive) GetSizeInBytes() int { - var size int - if v.DataMultivector.IsOpen { - size += v.DataMultivector.GetSizeInBytes() - } - if v.OptionalDataMultivector.IsOpen { - size += v.OptionalDataMultivector.GetSizeInBytes() - } - if v.DataU64IndexMultivector.IsOpen { - size += v.DataU64IndexMultivector.GetSizeInBytes() - } - return size -} - -func (v *AArchive) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "A", "container_type": "Archive", "size_in_bytes": %d, "resources": [`, v.GetSizeInBytes())) - buffer.WriteString(v.DataMultivector.ToString()) - buffer.WriteString(",") - - buffer.WriteString(v.OptionalDataMultivector.ToString()) - buffer.WriteString(",") - - buffer.WriteString(v.DataU64IndexMultivector.ToString()) - - buffer.WriteString("]}") - return buffer.String() -} - -func OpenAArchive(resource flatdata.ResourceStorage) (*AArchive, error) { - v := &AArchive{} - // Initialize resources - dataIsOpen := true - dataMemoryDescriptor, schema, err := resource.GetMemoryDescriptor("data") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - dataIsOpen = false - } else { - return v, err - } - } - dataIndexMemoryDescriptor, _, err := resource.GetMemoryDescriptor("data_index") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - dataIsOpen = false - } else { - return v, err - } - } - if dataIsOpen { - dataSchema := `namespace n { -struct S -{ - x : u64 : 64; -} -} - -namespace n { -struct T -{ - x : u64 : 64; -} -} - -namespace n { -archive A -{ - data : multivector< 8, .n.S, .n.T >; -} -} - -` - if dataSchema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", dataSchema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - optionalDataIsOpen := true - optionalDataMemoryDescriptor, schema, err := resource.GetMemoryDescriptor("optional_data") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - optionalDataIsOpen = false - } else { - return v, err - } - } - optionalDataIndexMemoryDescriptor, _, err := resource.GetMemoryDescriptor("optional_data_index") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - optionalDataIsOpen = false - } else { - return v, err - } - } - if optionalDataIsOpen { - optionalDataSchema := `namespace n { -struct S -{ - x : u64 : 64; -} -} - -namespace n { -struct T -{ - x : u64 : 64; -} -} - -namespace n { -archive A -{ - @optional - optional_data : multivector< 16, .n.S, .n.T >; -} -} - -` - if optionalDataSchema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", optionalDataSchema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - dataU64IndexIsOpen := true - dataU64IndexMemoryDescriptor, schema, err := resource.GetMemoryDescriptor("data_u64_index") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - dataU64IndexIsOpen = false - } else { - return v, err - } - } - dataU64IndexIndexMemoryDescriptor, _, err := resource.GetMemoryDescriptor("data_u64_index_index") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - dataU64IndexIsOpen = false - } else { - return v, err - } - } - if dataU64IndexIsOpen { - dataU64IndexSchema := `namespace n { -struct S -{ - x : u64 : 64; -} -} - -namespace n { -struct T -{ - x : u64 : 64; -} -} - -namespace n { -archive A -{ - data_u64_index : multivector< 64, .n.S, .n.T >; -} -} - -` - if dataU64IndexSchema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", dataU64IndexSchema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - // Add resources to archive - v.DataMultivector = &ADataMultivector{ - descriptor: dataMemoryDescriptor, - index: &ADataVector{descriptor: dataIndexMemoryDescriptor}, - types: map[int]interface{}{ - 0: &S{descriptor: dataMemoryDescriptor}, - 1: &T{descriptor: dataMemoryDescriptor}, - }, - IsOptional: false, - IsOpen: dataIsOpen, - } - v.OptionalDataMultivector = &AOptionalDataMultivector{ - descriptor: optionalDataMemoryDescriptor, - index: &AOptionalDataVector{descriptor: optionalDataIndexMemoryDescriptor}, - types: map[int]interface{}{ - 0: &S{descriptor: optionalDataMemoryDescriptor}, - 1: &T{descriptor: optionalDataMemoryDescriptor}, - }, - IsOptional: true, - IsOpen: optionalDataIsOpen, - } - v.DataU64IndexMultivector = &ADataU64IndexMultivector{ - descriptor: dataU64IndexMemoryDescriptor, - index: &ADataU64IndexVector{descriptor: dataU64IndexIndexMemoryDescriptor}, - types: map[int]interface{}{ - 0: &S{descriptor: dataU64IndexMemoryDescriptor}, - 1: &T{descriptor: dataU64IndexMemoryDescriptor}, - }, - IsOptional: false, - IsOpen: dataU64IndexIsOpen, - } - return v, nil -} - - diff --git a/flatdata-generator/tests/generators/go_expectations/archives/raw_data.go b/flatdata-generator/tests/generators/go_expectations/archives/raw_data.go deleted file mode 100644 index 538d517d..00000000 --- a/flatdata-generator/tests/generators/go_expectations/archives/raw_data.go +++ /dev/null @@ -1,180 +0,0 @@ -type ADataRawData struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *ADataRawData) GetValue() []byte { - data := make([]byte, v.GetSize()) - _, err := v.descriptor.ReadAt(data, 8) - if err != nil { - return make([]byte, 0) - } - return data -} - -func (v *ADataRawData) GetSize() int { - size := make([]byte, 8) - _, err := v.descriptor.ReadAt(size, 0) - if err != nil { - return 0 - } - return int(binary.LittleEndian.Uint64(size)) -} - -func (v *ADataRawData) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *ADataRawData) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *ADataRawData) ToString() string { - return fmt.Sprintf(`{"container_type": "RawData", "size": %d, "size_in_bytes": %d, "element_types": []}`, v.GetSize(), v.GetSizeInBytes()) -} - -type AOptionalDataRawData struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *AOptionalDataRawData) GetValue() []byte { - data := make([]byte, v.GetSize()) - _, err := v.descriptor.ReadAt(data, 8) - if err != nil { - return make([]byte, 0) - } - return data -} - -func (v *AOptionalDataRawData) GetSize() int { - size := make([]byte, 8) - _, err := v.descriptor.ReadAt(size, 0) - if err != nil { - return 0 - } - return int(binary.LittleEndian.Uint64(size)) -} - -func (v *AOptionalDataRawData) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *AOptionalDataRawData) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *AOptionalDataRawData) ToString() string { - return fmt.Sprintf(`{"container_type": "RawData", "size": %d, "size_in_bytes": %d, "element_types": []}`, v.GetSize(), v.GetSizeInBytes()) -} - -type AArchive struct { - IsOptional bool - IsOpen bool - DataRawData *ADataRawData - OptionalDataRawData *AOptionalDataRawData -} - -func (v *AArchive) Close() { - if v.DataRawData.IsOpen { - v.DataRawData.Close() - } - if v.OptionalDataRawData.IsOpen { - v.OptionalDataRawData.Close() - } -} - -func (v *AArchive) GetSizeInBytes() int { - var size int - if v.DataRawData.IsOpen { - size += v.DataRawData.GetSizeInBytes() - } - if v.OptionalDataRawData.IsOpen { - size += v.OptionalDataRawData.GetSizeInBytes() - } - return size -} - -func (v *AArchive) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "A", "container_type": "Archive", "size_in_bytes": %d, "resources": [`, v.GetSizeInBytes())) - buffer.WriteString(v.DataRawData.ToString()) - buffer.WriteString(",") - - buffer.WriteString(v.OptionalDataRawData.ToString()) - - buffer.WriteString("]}") - return buffer.String() -} - -func OpenAArchive(resource flatdata.ResourceStorage) (*AArchive, error) { - v := &AArchive{} - // Initialize resources - dataIsOpen := true - dataMemoryDescriptor, schema, err := resource.GetMemoryDescriptor("data") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - dataIsOpen = false - } else { - return v, err - } - } - if dataIsOpen { - dataSchema := `namespace n { -archive A -{ - data : raw_data; -} -} - -` - if dataSchema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", dataSchema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - optionalDataIsOpen := true - optionalDataMemoryDescriptor, schema, err := resource.GetMemoryDescriptor("optional_data") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - optionalDataIsOpen = false - } else { - return v, err - } - } - if optionalDataIsOpen { - optionalDataSchema := `namespace n { -archive A -{ - @optional - optional_data : raw_data; -} -} - -` - if optionalDataSchema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", optionalDataSchema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - // Add resources to archive - v.DataRawData = &ADataRawData{ - descriptor: dataMemoryDescriptor, - IsOptional: false, - IsOpen: dataIsOpen, - } - v.OptionalDataRawData = &AOptionalDataRawData{ - descriptor: optionalDataMemoryDescriptor, - IsOptional: true, - IsOpen: optionalDataIsOpen, - } - return v, nil -} - - diff --git a/flatdata-generator/tests/generators/go_expectations/archives/references.go b/flatdata-generator/tests/generators/go_expectations/archives/references.go deleted file mode 100644 index e69de29b..00000000 diff --git a/flatdata-generator/tests/generators/go_expectations/archives/struct.go b/flatdata-generator/tests/generators/go_expectations/archives/struct.go deleted file mode 100644 index afb4f0e0..00000000 --- a/flatdata-generator/tests/generators/go_expectations/archives/struct.go +++ /dev/null @@ -1,221 +0,0 @@ -const ( - flatdataOffsetSizeInBytes uint = 8 - flatdataPaddingSizeInBytes uint = 8 - sSizeInBytes = 8 -) - -type S struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *S) GetX() uint64 { - elementSizeInBits := uint(64) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - - -func (v *S) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "S", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"x": %v`, v.GetX())) - } - buffer.WriteString("}}") - return buffer.String() -} - -type ADataInstance struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *ADataInstance) Get() *S { - return &S{ - descriptor: v.descriptor, - position: int(flatdataOffsetSizeInBytes), - } -} - -func (v *ADataInstance) GetSize() int { - return 1 -} - -func (v *ADataInstance) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *ADataInstance) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *ADataInstance) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Instance", "size": %d, "size_in_bytes": %d, `, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`"element_types": [{ "name": "S", "attributes": [`) - buffer.WriteString(`{"name": "x", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}]}") - return buffer.String() -} - -type AOptionalDataInstance struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *AOptionalDataInstance) Get() *S { - return &S{ - descriptor: v.descriptor, - position: int(flatdataOffsetSizeInBytes), - } -} - -func (v *AOptionalDataInstance) GetSize() int { - return 1 -} - -func (v *AOptionalDataInstance) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *AOptionalDataInstance) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *AOptionalDataInstance) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Instance", "size": %d, "size_in_bytes": %d, `, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`"element_types": [{ "name": "S", "attributes": [`) - buffer.WriteString(`{"name": "x", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}]}") - return buffer.String() -} - -type AArchive struct { - IsOptional bool - IsOpen bool - DataInstance *ADataInstance - OptionalDataInstance *AOptionalDataInstance -} - -func (v *AArchive) Close() { - if v.DataInstance.IsOpen { - v.DataInstance.Close() - } - if v.OptionalDataInstance.IsOpen { - v.OptionalDataInstance.Close() - } -} - -func (v *AArchive) GetSizeInBytes() int { - var size int - if v.DataInstance.IsOpen { - size += v.DataInstance.GetSizeInBytes() - } - if v.OptionalDataInstance.IsOpen { - size += v.OptionalDataInstance.GetSizeInBytes() - } - return size -} - -func (v *AArchive) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "A", "container_type": "Archive", "size_in_bytes": %d, "resources": [`, v.GetSizeInBytes())) - buffer.WriteString(v.DataInstance.ToString()) - buffer.WriteString(",") - - buffer.WriteString(v.OptionalDataInstance.ToString()) - - buffer.WriteString("]}") - return buffer.String() -} - -func OpenAArchive(resource flatdata.ResourceStorage) (*AArchive, error) { - v := &AArchive{} - // Initialize resources - dataIsOpen := true - dataMemoryDescriptor, schema, err := resource.GetMemoryDescriptor("data") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - dataIsOpen = false - } else { - return v, err - } - } - if dataIsOpen { - dataSchema := `namespace n { -struct S -{ - x : u64 : 64; -} -} - -namespace n { -archive A -{ - data : .n.S; -} -} - -` - if dataSchema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", dataSchema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - optionalDataIsOpen := true - optionalDataMemoryDescriptor, schema, err := resource.GetMemoryDescriptor("optional_data") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - optionalDataIsOpen = false - } else { - return v, err - } - } - if optionalDataIsOpen { - optionalDataSchema := `namespace n { -struct S -{ - x : u64 : 64; -} -} - -namespace n { -archive A -{ - @optional - optional_data : .n.S; -} -} - -` - if optionalDataSchema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", optionalDataSchema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - // Add resources to archive - v.DataInstance = &ADataInstance { - descriptor: dataMemoryDescriptor, - IsOptional: false, - IsOpen: dataIsOpen, - } - v.OptionalDataInstance = &AOptionalDataInstance { - descriptor: optionalDataMemoryDescriptor, - IsOptional: true, - IsOpen: optionalDataIsOpen, - } - return v, nil -} - - diff --git a/flatdata-generator/tests/generators/go_expectations/archives/subarchive.go b/flatdata-generator/tests/generators/go_expectations/archives/subarchive.go deleted file mode 100644 index 4c4a4345..00000000 --- a/flatdata-generator/tests/generators/go_expectations/archives/subarchive.go +++ /dev/null @@ -1,171 +0,0 @@ -type XPayloadRawData struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *XPayloadRawData) GetValue() []byte { - data := make([]byte, v.GetSize()) - _, err := v.descriptor.ReadAt(data, 8) - if err != nil { - return make([]byte, 0) - } - return data -} - -func (v *XPayloadRawData) GetSize() int { - size := make([]byte, 8) - _, err := v.descriptor.ReadAt(size, 0) - if err != nil { - return 0 - } - return int(binary.LittleEndian.Uint64(size)) -} - -func (v *XPayloadRawData) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *XPayloadRawData) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *XPayloadRawData) ToString() string { - return fmt.Sprintf(`{"container_type": "RawData", "size": %d, "size_in_bytes": %d, "element_types": []}`, v.GetSize(), v.GetSizeInBytes()) -} - -type XArchive struct { - IsOptional bool - IsOpen bool - PayloadRawData *XPayloadRawData -} - -func (v *XArchive) Close() { - if v.PayloadRawData.IsOpen { - v.PayloadRawData.Close() - } -} - -func (v *XArchive) GetSizeInBytes() int { - var size int - if v.PayloadRawData.IsOpen { - size += v.PayloadRawData.GetSizeInBytes() - } - return size -} - -func (v *XArchive) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "X", "container_type": "Archive", "size_in_bytes": %d, "resources": [`, v.GetSizeInBytes())) - buffer.WriteString(v.PayloadRawData.ToString()) - buffer.WriteString("]}") - return buffer.String() -} - -func OpenXArchive(resource flatdata.ResourceStorage) (*XArchive, error) { - v := &XArchive{} - // Initialize resources - payloadIsOpen := true - payloadMemoryDescriptor, schema, err := resource.GetMemoryDescriptor("payload") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - payloadIsOpen = false - } else { - return v, err - } - } - if payloadIsOpen { - payloadSchema := `namespace n { -archive X -{ - payload : raw_data; -} -} - -` - if payloadSchema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", payloadSchema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - // Add resources to archive - v.PayloadRawData = &XPayloadRawData{ - descriptor: payloadMemoryDescriptor, - IsOptional: false, - IsOpen: payloadIsOpen, - } - return v, nil -} - - -type AArchive struct { - IsOptional bool - IsOpen bool - DataArchive *DataArchive - OptionalDataArchive *OptionalDataArchive -} - -func (v *AArchive) Close() { - if v.DataArchive.IsOpen { - v.DataArchive.Close() - } - if v.OptionalDataArchive.IsOpen { - v.OptionalDataArchive.Close() - } -} - -func (v *AArchive) GetSizeInBytes() int { - var size int - if v.DataArchive.IsOpen { - size += v.DataArchive.GetSizeInBytes() - } - if v.OptionalDataArchive.IsOpen { - size += v.OptionalDataArchive.GetSizeInBytes() - } - return size -} - -func (v *AArchive) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "A", "container_type": "Archive", "size_in_bytes": %d, "resources": [`, v.GetSizeInBytes())) - buffer.WriteString(v.DataArchive.ToString()) - buffer.WriteString(",") - buffer.WriteString(v.OptionalDataArchive.ToString()) - buffer.WriteString("]}") - return buffer.String() -} - -func OpenAArchive(resource flatdata.ResourceStorage) (*AArchive, error) { - v := &AArchive{} - // Initialize resources - dataArchive, err := OpenDataArchive(flatdata.NewFileResourceStorage(filepath.Join(resource.GetBasePath(), "data/X.archive"))) - dataArchive.IsOptional = false - dataArchive.IsOpen = true - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - dataArchive.IsOpen = false - } else { - return v, err - } - } - optionalDataArchive, err := OpenOptionalDataArchive(flatdata.NewFileResourceStorage(filepath.Join(resource.GetBasePath(), "optional_data/X.archive"))) - optionalDataArchive.IsOptional = true - optionalDataArchive.IsOpen = true - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - optionalDataArchive.IsOpen = false - } else { - return v, err - } - } - // Add resources to archive - v.DataArchive = dataArchive - v.OptionalDataArchive = optionalDataArchive - return v, nil -} - - diff --git a/flatdata-generator/tests/generators/go_expectations/archives/vector.go b/flatdata-generator/tests/generators/go_expectations/archives/vector.go deleted file mode 100644 index 104e1631..00000000 --- a/flatdata-generator/tests/generators/go_expectations/archives/vector.go +++ /dev/null @@ -1,253 +0,0 @@ -type S struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *S) GetX() uint64 { - elementSizeInBits := uint(64) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - - -func (v *S) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "S", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"x": %v`, v.GetX())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type ADataVector struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *ADataVector) Get(i int) *S { - return &S{ - descriptor: v.descriptor, - position: int(uint(i*sSizeInBytes) + flatdataOffsetSizeInBytes), - } -} - -func (v *ADataVector) GetSize() int { - size := make([]byte, 8) - _, err := v.descriptor.ReadAt(size, 0) - if err != nil { - return 0 - } - intSize := binary.LittleEndian.Uint64(size) - return int(intSize) / sSizeInBytes -} - -func (v *ADataVector) GetSlice(start, end, step int) []*S { - var result []*S - for start <= end { - result = append(result, &S{ - descriptor: v.descriptor, - position: int(uint(start*sSizeInBytes) + flatdataOffsetSizeInBytes), - }) - start += step - } - return result -} - -func (v *ADataVector) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *ADataVector) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *ADataVector) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Vector", "size": %d, "size_in_bytes": %d, `, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`"element_types": [{ "name": "S", "attributes": [`) - buffer.WriteString(`{"name": "x", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}]}") - return buffer.String() -} - - -type AOptionalDataVector struct { - descriptor flatdata.MemoryDescriptor - IsOptional bool - IsOpen bool -} - -func (v *AOptionalDataVector) Get(i int) *S { - return &S{ - descriptor: v.descriptor, - position: int(uint(i*sSizeInBytes) + flatdataOffsetSizeInBytes), - } -} - -func (v *AOptionalDataVector) GetSize() int { - size := make([]byte, 8) - _, err := v.descriptor.ReadAt(size, 0) - if err != nil { - return 0 - } - intSize := binary.LittleEndian.Uint64(size) - return int(intSize) / sSizeInBytes -} - -func (v *AOptionalDataVector) GetSlice(start, end, step int) []*S { - var result []*S - for start <= end { - result = append(result, &S{ - descriptor: v.descriptor, - position: int(uint(start*sSizeInBytes) + flatdataOffsetSizeInBytes), - }) - start += step - } - return result -} - -func (v *AOptionalDataVector) Close() { - v.descriptor.Close() - v.IsOpen = false -} - -func (v *AOptionalDataVector) GetSizeInBytes() int { - return v.descriptor.Len() -} - -func (v *AOptionalDataVector) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"container_type": "Vector", "size": %d, "size_in_bytes": %d, `, v.GetSize(), v.GetSizeInBytes())) - buffer.WriteString(`"element_types": [{ "name": "S", "attributes": [`) - buffer.WriteString(`{"name": "x", "offset": 0, "width": 64, "is_signed": false}`) - - buffer.WriteString("]}]}") - return buffer.String() -} - -type AArchive struct { - IsOptional bool - IsOpen bool - DataVector *ADataVector - OptionalDataVector *AOptionalDataVector -} - -func (v *AArchive) Close() { - if v.DataVector.IsOpen { - v.DataVector.Close() - } - if v.OptionalDataVector.IsOpen { - v.OptionalDataVector.Close() - } -} - -func (v *AArchive) GetSizeInBytes() int { - var size int - if v.DataVector.IsOpen { - size += v.DataVector.GetSizeInBytes() - } - if v.OptionalDataVector.IsOpen { - size += v.OptionalDataVector.GetSizeInBytes() - } - return size -} - -func (v *AArchive) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "A", "container_type": "Archive", "size_in_bytes": %d, "resources": [`, v.GetSizeInBytes())) - buffer.WriteString(v.DataVector.ToString()) - buffer.WriteString(",") - - buffer.WriteString(v.OptionalDataVector.ToString()) - - buffer.WriteString("]}") - return buffer.String() -} - -func OpenAArchive(resource flatdata.ResourceStorage) (*AArchive, error) { - v := &AArchive{} - // Initialize resources - dataIsOpen := true - dataMemoryDescriptor, schema, err := resource.GetMemoryDescriptor("data") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - dataIsOpen = false - } else { - return v, err - } - } - if dataIsOpen { - dataSchema := `namespace n { -struct S -{ - x : u64 : 64; -} -} - -namespace n { -archive A -{ - data : vector< .n.S >; -} -} - -` - if dataSchema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", dataSchema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - optionalDataIsOpen := true - optionalDataMemoryDescriptor, schema, err := resource.GetMemoryDescriptor("optional_data") - if err != nil { - log.Println(err) - if err.Error() == flatdata.ErrorCantAccessResource { - optionalDataIsOpen = false - } else { - return v, err - } - } - if optionalDataIsOpen { - optionalDataSchema := `namespace n { -struct S -{ - x : u64 : 64; -} -} - -namespace n { -archive A -{ - @optional - optional_data : vector< .n.S >; -} -} - -` - if optionalDataSchema != schema { - log.Println(fmt.Sprintf("Schemas didn't match, expected: \n%s\n, actual: \n%s\n", optionalDataSchema, schema)) - return v, errors.New(flatdata.ErrorSchemaDidntMatch) - } - } - // Add resources to archive - v.DataVector = &ADataVector{ - descriptor: dataMemoryDescriptor, - IsOptional: false, - IsOpen: dataIsOpen, - } - v.OptionalDataVector = &AOptionalDataVector{ - descriptor: optionalDataMemoryDescriptor, - IsOptional: true, - IsOpen: optionalDataIsOpen, - } - return v, nil -} - - diff --git a/flatdata-generator/tests/generators/go_expectations/constants/comments.go b/flatdata-generator/tests/generators/go_expectations/constants/comments.go deleted file mode 100644 index e69de29b..00000000 diff --git a/flatdata-generator/tests/generators/go_expectations/constants/values.go b/flatdata-generator/tests/generators/go_expectations/constants/values.go deleted file mode 100644 index 7e5bd93d..00000000 --- a/flatdata-generator/tests/generators/go_expectations/constants/values.go +++ /dev/null @@ -1,56 +0,0 @@ -package n - -import ( - "bytes" - "encoding/binary" - "errors" - "fmt" - "log" - - "github.com/heremaps/flatdata/flatdata-go/flatdata" -) - -const ( - flatdataOffsetSizeInBytes uint = 8 - flatdataPaddingSizeInBytes uint = 8 - FooI8Neg int8 = -128 - FooI8Pos int8 = 127 - FooI8Zero int8 = 0 - FooI8NegHex int8 = -128 - FooI8PosHex int8 = 127 - FooI8ZeroHex int8 = 0 - FooU8Pos uint8 = 255 - FooU8Zero uint8 = 0 - FooU8PosHex uint8 = 255 - FooU8ZeroHex uint8 = 0 - FooI16Neg int16 = -32768 - FooI16Pos int16 = 32767 - FooI16Zero int16 = 0 - FooI16NegHex int16 = -32768 - FooI16PosHex int16 = 32767 - FooI16ZeroHex int16 = 0 - FooU16Pos uint16 = 65535 - FooU16Zero uint16 = 0 - FooU16PosHex uint16 = 65535 - FooU16ZeroHex uint16 = 0 - FooI32Neg int32 = -2147483648 - FooI32Pos int32 = 2147483647 - FooI32Zero int32 = 0 - FooI32NegHex int32 = -2147483648 - FooI32PosHex int32 = 2147483647 - FooI32ZeroHex int32 = 0 - FooU32Pos uint32 = 4294967295 - FooU32Zero uint32 = 0 - FooU32PosHex uint32 = 4294967295 - FooU32ZeroHex uint32 = 0 - FooI64Neg int64 = -9223372036854775808 - FooI64Pos int64 = 9223372036854775807 - FooI64Zero int64 = 0 - FooI64NegHex int64 = -9223372036854775808 - FooI64PosHex int64 = 9223372036854775807 - FooI64ZeroHex int64 = 0 - FooU64Pos uint64 = 18446744073709551615 - FooU64Zero uint64 = 0 - FooU64PosHex uint64 = 18446744073709551615 - FooU64ZeroHex uint64 = 0 -) diff --git a/flatdata-generator/tests/generators/go_expectations/structs/comments.go.1 b/flatdata-generator/tests/generators/go_expectations/structs/comments.go.1 deleted file mode 100644 index 956a593a..00000000 --- a/flatdata-generator/tests/generators/go_expectations/structs/comments.go.1 +++ /dev/null @@ -1,5 +0,0 @@ -// // This is a comment about Foo -type Foo struct { - descriptor flatdata.MemoryDescriptor - position int -} \ No newline at end of file diff --git a/flatdata-generator/tests/generators/go_expectations/structs/comments.go.2 b/flatdata-generator/tests/generators/go_expectations/structs/comments.go.2 deleted file mode 100644 index 98f96b4f..00000000 --- a/flatdata-generator/tests/generators/go_expectations/structs/comments.go.2 +++ /dev/null @@ -1,7 +0,0 @@ -// /* -// * This is a comment about Bar -// */ -type Bar struct { - descriptor flatdata.MemoryDescriptor - position int -} \ No newline at end of file diff --git a/flatdata-generator/tests/generators/go_expectations/structs/default_width.go b/flatdata-generator/tests/generators/go_expectations/structs/default_width.go deleted file mode 100644 index 1580151d..00000000 --- a/flatdata-generator/tests/generators/go_expectations/structs/default_width.go +++ /dev/null @@ -1,12 +0,0 @@ -const ( - flatdataOffsetSizeInBytes uint = 8 - flatdataPaddingSizeInBytes uint = 8 - u8SizeInBytes = 1 - i8SizeInBytes = 1 - u16SizeInBytes = 2 - i16SizeInBytes = 2 - u32SizeInBytes = 4 - i32SizeInBytes = 4 - u64SizeInBytes = 8 - i64SizeInBytes = 8 -) \ No newline at end of file diff --git a/flatdata-generator/tests/generators/go_expectations/structs/integers.go b/flatdata-generator/tests/generators/go_expectations/structs/integers.go deleted file mode 100644 index 89e9ce7c..00000000 --- a/flatdata-generator/tests/generators/go_expectations/structs/integers.go +++ /dev/null @@ -1,216 +0,0 @@ -package n - -import ( - "bytes" - "encoding/binary" - "errors" - "fmt" - "log" - - "github.com/heremaps/flatdata/flatdata-go/flatdata" -) - -const ( - flatdataOffsetSizeInBytes uint = 8 - flatdataPaddingSizeInBytes uint = 8 - u8SizeInBytes = 1 - i8SizeInBytes = 1 - u16SizeInBytes = 2 - i16SizeInBytes = 2 - u32SizeInBytes = 4 - i32SizeInBytes = 4 - u64SizeInBytes = 8 - i64SizeInBytes = 8 -) - -type U8 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *U8) GetF() uint8 { - elementSizeInBits := uint(8) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint8(result) -} - - -func (v *U8) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "U8", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type I8 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *I8) GetF() int8 { - elementSizeInBits := uint(8) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, true) - return int8(result) -} - - -func (v *I8) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "I8", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type U16 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *U16) GetF() uint16 { - elementSizeInBits := uint(16) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint16(result) -} - - -func (v *U16) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "U16", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type I16 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *I16) GetF() int16 { - elementSizeInBits := uint(16) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, true) - return int16(result) -} - - -func (v *I16) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "I16", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type U32 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *U32) GetF() uint32 { - elementSizeInBits := uint(32) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint32(result) -} - - -func (v *U32) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "U32", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type I32 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *I32) GetF() int32 { - elementSizeInBits := uint(32) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, true) - return int32(result) -} - - -func (v *I32) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "I32", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type U64 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *U64) GetF() uint64 { - elementSizeInBits := uint(64) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - - -func (v *U64) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "U64", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type I64 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *I64) GetF() int64 { - elementSizeInBits := uint(64) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, true) - return int64(result) -} - - -func (v *I64) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "I64", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - diff --git a/flatdata-generator/tests/generators/go_expectations/structs/unaligned.go b/flatdata-generator/tests/generators/go_expectations/structs/unaligned.go deleted file mode 100644 index 22d85462..00000000 --- a/flatdata-generator/tests/generators/go_expectations/structs/unaligned.go +++ /dev/null @@ -1,276 +0,0 @@ -const ( - flatdataOffsetSizeInBytes uint = 8 - flatdataPaddingSizeInBytes uint = 8 - u8SizeInBytes = 1 - i8SizeInBytes = 1 - u16SizeInBytes = 2 - i16SizeInBytes = 2 - u32SizeInBytes = 4 - i32SizeInBytes = 4 - u64SizeInBytes = 8 - i64SizeInBytes = 8 -) - -type U8 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *U8) GetPadding() uint64 { - elementSizeInBits := uint(3) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - -func (v *U8) GetF() uint8 { - elementSizeInBits := uint(5) - elementOffset := uint(3) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint8(result) -} - - -func (v *U8) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "U8", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"padding": %v`, v.GetPadding())) - buffer.WriteString(",") - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type I8 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *I8) GetPadding() uint64 { - elementSizeInBits := uint(3) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - -func (v *I8) GetF() int8 { - elementSizeInBits := uint(5) - elementOffset := uint(3) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, true) - return int8(result) -} - - -func (v *I8) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "I8", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"padding": %v`, v.GetPadding())) - buffer.WriteString(",") - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type U16 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *U16) GetPadding() uint64 { - elementSizeInBits := uint(3) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - -func (v *U16) GetF() uint16 { - elementSizeInBits := uint(13) - elementOffset := uint(3) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint16(result) -} - - -func (v *U16) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "U16", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"padding": %v`, v.GetPadding())) - buffer.WriteString(",") - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type I16 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *I16) GetPadding() uint64 { - elementSizeInBits := uint(3) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - -func (v *I16) GetF() int16 { - elementSizeInBits := uint(13) - elementOffset := uint(3) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, true) - return int16(result) -} - - -func (v *I16) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "I16", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"padding": %v`, v.GetPadding())) - buffer.WriteString(",") - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type U32 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *U32) GetPadding() uint64 { - elementSizeInBits := uint(3) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - -func (v *U32) GetF() uint32 { - elementSizeInBits := uint(29) - elementOffset := uint(3) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint32(result) -} - - -func (v *U32) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "U32", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"padding": %v`, v.GetPadding())) - buffer.WriteString(",") - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type I32 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *I32) GetPadding() uint64 { - elementSizeInBits := uint(3) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - -func (v *I32) GetF() int32 { - elementSizeInBits := uint(29) - elementOffset := uint(3) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, true) - return int32(result) -} - - -func (v *I32) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "I32", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"padding": %v`, v.GetPadding())) - buffer.WriteString(",") - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type U64 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *U64) GetPadding() uint64 { - elementSizeInBits := uint(3) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - -func (v *U64) GetF() uint64 { - elementSizeInBits := uint(61) - elementOffset := uint(3) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - - -func (v *U64) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "U64", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"padding": %v`, v.GetPadding())) - buffer.WriteString(",") - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - - -type I64 struct { - descriptor flatdata.MemoryDescriptor - position int -} - -func (v *I64) GetPadding() uint64 { - elementSizeInBits := uint(3) - elementOffset := uint(0) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, false) - return uint64(result) -} - -func (v *I64) GetF() int64 { - elementSizeInBits := uint(61) - elementOffset := uint(3) - result := flatdata.Read(v.descriptor, (uint(v.position)*8)+elementOffset, elementSizeInBits, true) - return int64(result) -} - - -func (v *I64) ToString() string { - buffer := bytes.Buffer{} - buffer.WriteString(fmt.Sprintf(`{"name": "I64", "position": %d, "attributes": {`, v.position)) - if v.descriptor != nil { - buffer.WriteString(fmt.Sprintf(`"padding": %v`, v.GetPadding())) - buffer.WriteString(",") - buffer.WriteString(fmt.Sprintf(`"f": %v`, v.GetF())) - } - buffer.WriteString("}}") - return buffer.String() -} - diff --git a/flatdata-generator/tests/generators/schemas.py b/flatdata-generator/tests/generators/schemas.py index 405dee6d..a7498f89 100644 --- a/flatdata-generator/tests/generators/schemas.py +++ b/flatdata-generator/tests/generators/schemas.py @@ -5,7 +5,7 @@ def schemas_and_expectations(generator, extension): """ Retrieves list of test cases filenames and generates corresponding expectation filenames - generator: one of the supported generator: `rust`, `cpp`, `flatdata`, `dot`, `rust`, `go + generator: one of the supported generator: `rust`, `cpp`, `flatdata`, `dot`, `py` extension: extension of the expectation files for this generator, e.g. `.h` for `cpp` """ result = list() diff --git a/flatdata-generator/tests/generators/test_go_generator.py b/flatdata-generator/tests/generators/test_go_generator.py deleted file mode 100644 index 23c71d4b..00000000 --- a/flatdata-generator/tests/generators/test_go_generator.py +++ /dev/null @@ -1,40 +0,0 @@ -''' - Copyright (c) 2025 HERE Europe B.V. - See the LICENSE file in the root of this project for license details. -''' -import glob -import pytest - -from flatdata.generator.generators.go import GoGenerator -from .assertions import generate_and_assert_in -from .schemas import schemas_and_expectations - - -def generate_and_compare(test_case): - with open(test_case[0], 'r') as test_file: - test = test_file.read() - - expectations = list() - for file in glob.glob(test_case[1] + '*'): - with open(file, 'r') as expectation_file: - expectations.append(expectation_file.read()) - - generate_and_assert_in(test, GoGenerator, *expectations) - - -def skip(test_case): - raise pytest.skip("Test %s is skipped" % test_case[0]) - -def get_test_cases(): - test_cases = [] - for x in schemas_and_expectations(generator='go', extension='go'): - test_cases.append(x) - return test_cases - -@pytest.mark.parametrize("test_case", get_test_cases()) -def test_against_expectations(test_case): - # Go does not yet support namespaces, enums, ranges, or constants, skip those tests - if "enums" not in test_case[0] and "constants" not in test_case[0] and "namespaces" not in test_case[0] and "ranges" not in test_case[0]: - generate_and_compare(test_case) - else: - skip(test_case) diff --git a/flatdata-go/backward-compatibility-tests/Gopkg.lock b/flatdata-go/backward-compatibility-tests/Gopkg.lock deleted file mode 100644 index 066fc20d..00000000 --- a/flatdata-go/backward-compatibility-tests/Gopkg.lock +++ /dev/null @@ -1,27 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - name = "github.com/davecgh/go-spew" - packages = ["spew"] - revision = "346938d642f2ec3594ed81d874461961cd0faa76" - version = "v1.1.0" - -[[projects]] - name = "github.com/pmezard/go-difflib" - packages = ["difflib"] - revision = "792786c7400a136282c1664665ae0a8db921c6c2" - version = "v1.0.0" - -[[projects]] - name = "github.com/stretchr/testify" - packages = ["assert"] - revision = "b91bfb9ebec76498946beb6af7c0230c7cc7ba6c" - version = "v1.2.0" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "0a81cdd8b28938307cd5d3941bfdb99c2b2a04aac9c0cb95558335aaab9ea4bd" - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/flatdata-go/backward-compatibility-tests/Gopkg.toml b/flatdata-go/backward-compatibility-tests/Gopkg.toml deleted file mode 100644 index 444d724c..00000000 --- a/flatdata-go/backward-compatibility-tests/Gopkg.toml +++ /dev/null @@ -1,32 +0,0 @@ - -# Gopkg.toml example -# -# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" - -ignored = ["github.com/heremaps/flatdata/flatdata-go/flatdata"] - -[[constraint]] - name = "github.com/stretchr/testify" - version = "1.2.0" - -[prune] - go-tests = true - non-go = true - unused-packages = true \ No newline at end of file diff --git a/flatdata-go/backward-compatibility-tests/LICENSE b/flatdata-go/backward-compatibility-tests/LICENSE deleted file mode 120000 index 30cff740..00000000 --- a/flatdata-go/backward-compatibility-tests/LICENSE +++ /dev/null @@ -1 +0,0 @@ -../../LICENSE \ No newline at end of file diff --git a/flatdata-go/backward-compatibility-tests/Makefile b/flatdata-go/backward-compatibility-tests/Makefile deleted file mode 100644 index 669fb803..00000000 --- a/flatdata-go/backward-compatibility-tests/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -.PHONY: all run-ci clean lint test deps generate - -all: clean generate lint test - -run-ci: deps lint test - -deps: - @echo "Install dependencies..." - dep ensure - -clean: - @echo "Cleanup..." - find . -maxdepth 1 -type f -name "*_generated.go" -delete - -lint: - @echo "Run linters..." - go fmt $$(go list ./... | grep -v /vendor/) - go vet $$(go list ./... | grep -v /vendor/) - golint $$(go list ./... | grep -v /vendor/) | grep -v _generated.go; test $$? -eq 1 - -generate: - $$GOPATH/src/github.com/heremaps/flatdata/generator -v -g go \ - -s test_backward_compatibility.schema \ - -O test_backward_compatibility_generated.go - -test: - @echo "Run tests..." - go test -v $$(go list ./... | grep -v /vendor/) diff --git a/flatdata-go/backward-compatibility-tests/backward_compatibility_test.go b/flatdata-go/backward-compatibility-tests/backward_compatibility_test.go deleted file mode 100644 index 43b63adc..00000000 --- a/flatdata-go/backward-compatibility-tests/backward_compatibility_test.go +++ /dev/null @@ -1,116 +0,0 @@ -/* -Copyright (c) 2017 HERE Europe B.V. -See the LICENSE file in the root of this project for license details. -*/ - -package backwardcompatibility - -import ( - "bytes" - "encoding/json" - "log" - "testing" - - "github.com/stretchr/testify/assert" -) - -func init() { - log.SetFlags(log.LstdFlags | log.Lshortfile) -} - -func TestBackwardCompatibilityVector(t *testing.T) { - arc, err := OpenBackwardCompatibilityTestArchive(createInMemoryResourceStorage()) - if assert.NoError(t, err) { - defer arc.Close() - assert.Equal(t, 36, arc.ResourceBVector.GetSizeInBytes()) - assert.Equal(t, 2, arc.ResourceBVector.GetSize()) - assertSigned(t, arc.ResourceBVector.Get(0)) - assertSigned(t, arc.ResourceBVector.Get(1)) - slice := arc.ResourceBVector.GetSlice(0, 1, 1) - assertSigned(t, slice[0]) - assertSigned(t, slice[1]) - assert.True(t, validJSON(arc.ResourceBVector.ToString())) - } -} - -func TestBackwardCompatibilityMultivector(t *testing.T) { - arc, err := OpenBackwardCompatibilityTestArchive(createInMemoryResourceStorage()) - if assert.NoError(t, err) { - defer arc.Close() - assert.Equal(t, 65, arc.ResourceCMultivector.GetSizeInBytes()) - assert.Equal(t, 4, arc.ResourceCMultivector.GetSize()) - assert.True(t, validJSON(arc.ResourceCMultivector.ToString())) - - assert.Equal(t, 2, len(arc.ResourceCMultivector.Get(0))) - v1, ok := arc.ResourceCMultivector.Get(0)[0].(*SignedStruct) - if assert.True(t, ok) { - assertSigned(t, v1) - } - v2, ok := arc.ResourceCMultivector.Get(0)[1].(*SimpleStruct) - if assert.True(t, ok) { - assertSimple(t, v2) - } - - assert.Equal(t, 0, len(arc.ResourceCMultivector.Get(1))) - - assert.Equal(t, 2, len(arc.ResourceCMultivector.Get(2))) - v3, ok := arc.ResourceCMultivector.Get(2)[0].(*SimpleStruct) - if assert.True(t, ok) { - assertSimple(t, v3) - } - v4, ok := arc.ResourceCMultivector.Get(2)[1].(*SignedStruct) - if assert.True(t, ok) { - assertSigned(t, v4) - } - - assert.Equal(t, 1, len(arc.ResourceCMultivector.Get(3))) - v5, ok := arc.ResourceCMultivector.Get(3)[0].(*SimpleStruct) - if assert.True(t, ok) { - assertSimple(t, v5) - } - } -} - -func TestBackwardCompatibilityRawData(t *testing.T) { - arc, err := OpenBackwardCompatibilityTestArchive(createInMemoryResourceStorage()) - if assert.NoError(t, err) { - defer arc.Close() - assert.Equal(t, 21, arc.ResourceDRawData.GetSizeInBytes()) - assert.Equal(t, 5, arc.ResourceDRawData.GetSize()) - assert.Equal(t, []byte("\xff\xef\xbe\xad\xde"), arc.ResourceDRawData.GetValue()) - assert.True(t, validJSON(arc.ResourceDRawData.ToString())) - } -} - -func TestBackwardCompatibilityInstance(t *testing.T) { - arc, err := OpenBackwardCompatibilityTestArchive(createInMemoryResourceStorage()) - if assert.NoError(t, err) { - defer arc.Close() - assert.Equal(t, 26, arc.ResourceAInstance.GetSizeInBytes()) - assert.Equal(t, 1, arc.ResourceAInstance.GetSize()) - assertSigned(t, arc.ResourceAInstance.Get()) - assert.True(t, validJSON(arc.ResourceAInstance.ToString())) - } -} - -func assertSigned(t *testing.T, str *SignedStruct) { - assert.Equal(t, int16(-0x1), str.GetA()) - assert.Equal(t, uint32(0x01234567), str.GetB()) - assert.Equal(t, int32(-0x28), str.GetC()) - assert.Equal(t, uint32(0), str.GetD()) -} - -func assertSimple(t *testing.T, str *SimpleStruct) { - assert.Equal(t, uint32(0xFFFFFFFF), str.GetA()) - assert.Equal(t, uint32(0xDEADBEEF), str.GetB()) -} - -func validJSON(s string) bool { - out := bytes.Buffer{} - err := json.Indent(&out, []byte(s), "", "\t") - if err != nil { - log.Println(err) - return false - } - return true -} diff --git a/flatdata-go/backward-compatibility-tests/test_backward_compatibility.schema b/flatdata-go/backward-compatibility-tests/test_backward_compatibility.schema deleted file mode 100644 index ec589587..00000000 --- a/flatdata-go/backward-compatibility-tests/test_backward_compatibility.schema +++ /dev/null @@ -1,18 +0,0 @@ -namespace backwardcompatibility { - struct SimpleStruct { - a : u32 : 32; - b : u32 : 32; - } - struct SignedStruct { - a : i16 : 5; - b : u32 : 32; - c : i32 : 7; - d : u32 : 32; - } - archive BackwardCompatibilityTest { - resource_a: SignedStruct; - resource_b: vector< SignedStruct >; - resource_c: multivector< 33, SimpleStruct, SignedStruct >; - resource_d: raw_data; - } -} \ No newline at end of file diff --git a/flatdata-go/backward-compatibility-tests/test_data.go b/flatdata-go/backward-compatibility-tests/test_data.go deleted file mode 100644 index 640239f6..00000000 --- a/flatdata-go/backward-compatibility-tests/test_data.go +++ /dev/null @@ -1,163 +0,0 @@ -/* -Copyright (c) 2017 HERE Europe B.V. -See the LICENSE file in the root of this project for license details. -*/ - -package backwardcompatibility - -import ( - "bytes" - - "github.com/heremaps/flatdata/flatdata-go/flatdata" -) - -func createInMemoryResourceStorage() flatdata.ResourceStorage { - return &flatdata.InMemoryResourceStorage{ - Descriptors: map[string]flatdata.MemoryDescriptor{ - "resource_b": &flatdata.TestMemoryDescriptor{Array: getVectorPayload()}, - "resource_c": &flatdata.TestMemoryDescriptor{Array: getMultivectorResourcePayload()}, - "resource_c_index": &flatdata.TestMemoryDescriptor{Array: getMultivectorIndexPayload()}, - "resource_d": &flatdata.TestMemoryDescriptor{Array: getRawDataPayload()}, - "resource_a": &flatdata.TestMemoryDescriptor{Array: getInstanceDataPayload()}, - }, - Schemas: map[string]string{ - "resource_b": getVectorSchema(), - "resource_c": getMultivectorSchema(), - "resource_c_index": getMultivectorSchema(), - "resource_d": getRawDataSchema(), - "resource_a": getInstanceSchema(), - }, - } -} - -func getVectorPayload() []byte { - var bb bytes.Buffer - bb.WriteString("\x14\x00\x00\x00\x00\x00\x00\x00") // Payload size in bytes - bb.WriteString("\xff\xac\x68\x24\x00\x0b\x00\x00") // Payload - bb.WriteString("\x00\x00\xff\xac\x68\x24\x00\x0b") // Payload - bb.WriteString("\x00\x00\x00\x00") // Payload - bb.WriteString("\x00\x00\x00\x00\x00\x00\x00\x00") // Padding - return []byte(bb.String()) -} - -func getVectorSchema() string { - return `namespace backwardcompatibility { -struct SignedStruct -{ - a : i16 : 5; - b : u32 : 32; - c : i32 : 7; - d : u32 : 32; -} -} - -namespace backwardcompatibility { -archive BackwardCompatibilityTest -{ - resource_b : vector< .backwardcompatibility.SignedStruct >; -} -} - -` -} - -func getMultivectorResourcePayload() []byte { - var bb bytes.Buffer - bb.WriteString("\x31\x00\x00\x00\x00\x00\x00\x00") // Payload size in bytes - bb.WriteString("\x01\xff\xac\x68\x24\x00\x0b\x00\x00\x00\x00") // Payload - bb.WriteString("\x00\xff\xff\xff\xff\xef\xbe\xad\xde") // Payload - bb.WriteString("\x00\xff\xff\xff\xff\xef\xbe\xad\xde") // Payload - bb.WriteString("\x01\xff\xac\x68\x24\x00\x0b\x00\x00\x00\x00") // Payload - bb.WriteString("\x00\xff\xff\xff\xff\xef\xbe\xad\xde") // Payload - bb.WriteString("\x00\x00\x00\x00\x00\x00\x00\x00") // Padding - return []byte(bb.String()) -} - -func getMultivectorIndexPayload() []byte { - var bb bytes.Buffer - bb.WriteString("\x14\x00\x00\x00\x00\x00\x00\x00") // Payload size in bytes - bb.WriteString("\x00\x00\x00\x00\x00") // Payload - bb.WriteString("\x14\x00\x00\x00\x00") // Payload - bb.WriteString("\x14\x00\x00\x00\x00") // Payload - bb.WriteString("\x28\x00\x00\x00\x00") // Payload - bb.WriteString("\x00\x00\x00\x00\x00\x00\x00\x00") // Padding - return []byte(bb.String()) -} - -func getMultivectorSchema() string { - return `namespace backwardcompatibility { -struct SimpleStruct -{ - a : u32 : 32; - b : u32 : 32; -} -} - -namespace backwardcompatibility { -struct SignedStruct -{ - a : i16 : 5; - b : u32 : 32; - c : i32 : 7; - d : u32 : 32; -} -} - -namespace backwardcompatibility { -archive BackwardCompatibilityTest -{ - resource_c : multivector< 33, .backwardcompatibility.SimpleStruct, .backwardcompatibility.SignedStruct >; -} -} - -` -} - -func getRawDataPayload() []byte { - var bb bytes.Buffer - bb.WriteString("\x05\x00\x00\x00\x00\x00\x00\x00") // Payload size in bytes - bb.WriteString("\xff\xef\xbe\xad\xde") // Payload - bb.WriteString("\x00\x00\x00\x00\x00\x00\x00\x00") // Padding - return []byte(bb.String()) -} - -func getRawDataSchema() string { - return `namespace backwardcompatibility { -archive BackwardCompatibilityTest -{ - resource_d : raw_data; -} -} - -` -} - -func getInstanceDataPayload() []byte { - var bb bytes.Buffer - bb.WriteString("\x0a\x00\x00\x00\x00\x00\x00\x00") // Size of payload in bytes - bb.WriteString("\xff\xac\x68\x24\x00\x0b\x00\x00") // Payload - bb.WriteString("\x00\x00") // Payload - bb.WriteString("\x00\x00\x00\x00\x00\x00\x00\x00") // Padding - return []byte(bb.String()) -} - -func getInstanceSchema() string { - return `namespace backwardcompatibility { -struct SignedStruct -{ - a : i16 : 5; - b : u32 : 32; - c : i32 : 7; - d : u32 : 32; -} -} - -namespace backwardcompatibility { -archive BackwardCompatibilityTest -{ - resource_a : .backwardcompatibility.SignedStruct; -} -} - -` -} diff --git a/flatdata-go/flatdata/Gopkg.lock b/flatdata-go/flatdata/Gopkg.lock deleted file mode 100644 index f27487d6..00000000 --- a/flatdata-go/flatdata/Gopkg.lock +++ /dev/null @@ -1,33 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - name = "github.com/davecgh/go-spew" - packages = ["spew"] - revision = "346938d642f2ec3594ed81d874461961cd0faa76" - version = "v1.1.0" - -[[projects]] - name = "github.com/pmezard/go-difflib" - packages = ["difflib"] - revision = "792786c7400a136282c1664665ae0a8db921c6c2" - version = "v1.0.0" - -[[projects]] - name = "github.com/stretchr/testify" - packages = ["assert"] - revision = "69483b4bd14f5845b5a1e55bca19e954e827f1d0" - version = "v1.1.4" - -[[projects]] - branch = "master" - name = "golang.org/x/exp" - packages = ["mmap"] - revision = "a05f2c1e93dc0743a12c519ef35f386b8c095d91" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "a5ddb58f3872e6eea2c321f0b14d3501778db7da54ce27f2ef3265978b3c645e" - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/flatdata-go/flatdata/Gopkg.toml b/flatdata-go/flatdata/Gopkg.toml deleted file mode 100644 index fd156a1b..00000000 --- a/flatdata-go/flatdata/Gopkg.toml +++ /dev/null @@ -1,35 +0,0 @@ - -# Gopkg.toml example -# -# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" - - -[[constraint]] - name = "github.com/stretchr/testify" - version = "1.1.4" - -[[constraint]] - branch = "master" - name = "golang.org/x/exp" - -[prune] - go-tests = true - non-go = true - unused-packages = true diff --git a/flatdata-go/flatdata/LICENSE b/flatdata-go/flatdata/LICENSE deleted file mode 120000 index 30cff740..00000000 --- a/flatdata-go/flatdata/LICENSE +++ /dev/null @@ -1 +0,0 @@ -../../LICENSE \ No newline at end of file diff --git a/flatdata-go/flatdata/Makefile b/flatdata-go/flatdata/Makefile deleted file mode 100644 index e244c323..00000000 --- a/flatdata-go/flatdata/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -.PHONY: all run-ci lint test bench deps - -all: lint test bench - -run-ci: deps all - -deps: - @echo "Install dependencies..." - dep ensure - -lint: - @echo "Run linters..." - go fmt $$(go list ./... | grep -v /vendor/) - go vet $$(go list ./... | grep -v /vendor/) - golint -set_exit_status $$(go list ./... | grep -v /vendor/) - -test: - @echo "Run tests..." - go test -v $$(go list ./... | grep -v /vendor/) - -bench: - @echo "Run benchmarks..." - go test -bench=. diff --git a/flatdata-go/flatdata/README.md b/flatdata-go/flatdata/README.md deleted file mode 100644 index 95a4bb65..00000000 --- a/flatdata-go/flatdata/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# flatdata-go -Common library for flatdata Go implementation - -### Requirements -Library requires Go 1.9 and higher. - -### Dependencies -Use [**dep**](https://github.com/golang/dep) to properly add `flatdata-go` to your project. -Otherwise, you can always install dependencies manually: -``` -go get -u golang.org/x/exp/mmap -go get -u github.com/stretchr/testify -``` - -### Tests and coverage -Run tests and show coverage info -``` -go test -v -race ./... -coverprofile=coverage.out -``` - -Open coverage in browser -``` -go tool cover -html=coverage.out -``` - -### Benchmarks -``` -go test -bench=. -``` diff --git a/flatdata-go/flatdata/TODO.md b/flatdata-go/flatdata/TODO.md deleted file mode 100644 index 5afc5f92..00000000 --- a/flatdata-go/flatdata/TODO.md +++ /dev/null @@ -1,8 +0,0 @@ -Some todos for the golang implementation: - -- [x] Working multivector implementation. -- [ ] Reader example: C++ is writing, golang is reading. All resource types + optional. -- [x] Schema validation on archive opening. -- [x] Port backward compatibility tests. -- [x] Tests in CI. -- [ ] Writer. diff --git a/flatdata-go/flatdata/benchmarks_test.go b/flatdata-go/flatdata/benchmarks_test.go deleted file mode 100644 index 75ebcf1d..00000000 --- a/flatdata-go/flatdata/benchmarks_test.go +++ /dev/null @@ -1,40 +0,0 @@ -/* -Copyright (c) 2017 HERE Europe B.V. -See the LICENSE file in the root of this project for license details. -*/ - -package flatdata - -import ( - "testing" - - "math/rand" -) - -const arraySize = 8192 - -func BenchmarkFileResourceReadUnsigned(b *testing.B) { - runBenchmarkOnFileResource(false, b) -} - -func BenchmarkFileResourceReadSigned(b *testing.B) { - runBenchmarkOnFileResource(true, b) -} - -func runBenchmarkOnFileResource(signed bool, b *testing.B) { - b.StopTimer() - - handle := &TestMemoryDescriptor{Array: generateRandomByteArray()} - - b.StartTimer() - - for n := 0; n < b.N; n++ { - Read(handle, 4092, 64, signed) - } -} - -func generateRandomByteArray() []byte { - bytes := make([]byte, arraySize) - rand.Read(bytes) - return bytes -} diff --git a/flatdata-go/flatdata/doc.go b/flatdata-go/flatdata/doc.go deleted file mode 100644 index 1a0e6e0e..00000000 --- a/flatdata-go/flatdata/doc.go +++ /dev/null @@ -1,7 +0,0 @@ -/* -Copyright (c) 2017 HERE Europe B.V. -See the LICENSE file in the root of this project for license details. -*/ - -// Package flatdata represents Go implementation for Flatdata -package flatdata diff --git a/flatdata-go/flatdata/memory_descriptor.go b/flatdata-go/flatdata/memory_descriptor.go deleted file mode 100644 index b9f23513..00000000 --- a/flatdata-go/flatdata/memory_descriptor.go +++ /dev/null @@ -1,16 +0,0 @@ -/* -Copyright (c) 2017 HERE Europe B.V. -See the LICENSE file in the root of this project for license details. -*/ - -package flatdata - -import "io" - -// MemoryDescriptor represents internal low level data access -type MemoryDescriptor interface { - io.ReaderAt - Close() error - Len() int - At(i int) byte -} diff --git a/flatdata-go/flatdata/reader.go b/flatdata-go/flatdata/reader.go deleted file mode 100644 index a48d20e6..00000000 --- a/flatdata-go/flatdata/reader.go +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright (c) 2017 HERE Europe B.V. -See the LICENSE file in the root of this project for license details. -*/ - -package flatdata - -import "math" - -var signBits []uint - -func init() { - signBits = make([]uint, 64) - for i := 0; i < 64; i++ { - signBits[i] = uint(math.Exp2(float64(i))) - } -} - -// Read allows to read data from flatdata memory layout -func Read(descriptor MemoryDescriptor, offset, size uint, signed bool) int { - currentIndex := offset / 8 - currentByte := uint(descriptor.At(int(currentIndex))) - bitsLeft := size - localOffset := offset % 8 - var result uint - - if localOffset != 0 { - result = currentByte >> localOffset - if bitsLeft <= (8 - localOffset) { - result &= (1 << bitsLeft) - 1 - return int(result) - } - bitsLeft -= 8 - localOffset - currentIndex++ - currentByte = uint(descriptor.At(int(currentIndex))) - } - - for bitsLeft >= 8 { - temp := currentByte - temp <<= size - bitsLeft - result |= temp - - bitsLeft -= 8 - currentIndex++ - currentByte = uint(descriptor.At(int(currentIndex))) - } - - if bitsLeft != 0 { - temp := currentByte & ((1 << bitsLeft) - 1) - temp <<= size - bitsLeft - result |= temp - } - - if signed { - return int((result & (signBits[size-1] - 1)) - (result & signBits[size-1])) - } - - return int(result) -} diff --git a/flatdata-go/flatdata/reader_test.go b/flatdata-go/flatdata/reader_test.go deleted file mode 100644 index f9f322a9..00000000 --- a/flatdata-go/flatdata/reader_test.go +++ /dev/null @@ -1,1148 +0,0 @@ -/* -Copyright (c) 2017 HERE Europe B.V. -See the LICENSE file in the root of this project for license details. -*/ - -package flatdata - -import ( - "encoding/hex" - "fmt" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestReaderShouldReadValidDataWithoutError(t *testing.T) { - cases := []struct { - input string - offset, size uint - signed bool - expected int - }{ - {input: "00010000000000000000", offset: 8, size: 8, expected: 1}, - {input: "00010000000000000000", offset: 8, size: 7, expected: 1}, - {input: "00010000000000000000", offset: 8, size: 6, expected: 1}, - {input: "00010000000000000000", offset: 8, size: 5, expected: 1}, - {input: "00010000000000000000", offset: 8, size: 4, expected: 1}, - {input: "00010000000000000000", offset: 8, size: 3, expected: 1}, - {input: "00010000000000000000", offset: 8, size: 2, expected: 1}, - {input: "00010000000000000000", offset: 8, size: 1, expected: 1}, - {input: "80000000000000000000", offset: 7, size: 8, expected: 1}, - {input: "80000000000000000000", offset: 7, size: 7, expected: 1}, - {input: "80000000000000000000", offset: 7, size: 6, expected: 1}, - {input: "80000000000000000000", offset: 7, size: 5, expected: 1}, - {input: "80000000000000000000", offset: 7, size: 4, expected: 1}, - {input: "80000000000000000000", offset: 7, size: 3, expected: 1}, - {input: "80000000000000000000", offset: 7, size: 2, expected: 1}, - {input: "80000000000000000000", offset: 7, size: 1, expected: 1}, - {input: "40000000000000000000", offset: 6, size: 8, expected: 1}, - {input: "40000000000000000000", offset: 6, size: 7, expected: 1}, - {input: "40000000000000000000", offset: 6, size: 6, expected: 1}, - {input: "40000000000000000000", offset: 6, size: 5, expected: 1}, - {input: "40000000000000000000", offset: 6, size: 4, expected: 1}, - {input: "40000000000000000000", offset: 6, size: 3, expected: 1}, - {input: "40000000000000000000", offset: 6, size: 2, expected: 1}, - {input: "40000000000000000000", offset: 6, size: 1, expected: 1}, - {input: "20000000000000000000", offset: 5, size: 8, expected: 1}, - {input: "20000000000000000000", offset: 5, size: 7, expected: 1}, - {input: "20000000000000000000", offset: 5, size: 6, expected: 1}, - {input: "20000000000000000000", offset: 5, size: 5, expected: 1}, - {input: "20000000000000000000", offset: 5, size: 4, expected: 1}, - {input: "20000000000000000000", offset: 5, size: 3, expected: 1}, - {input: "20000000000000000000", offset: 5, size: 2, expected: 1}, - {input: "20000000000000000000", offset: 5, size: 1, expected: 1}, - {input: "10000000000000000000", offset: 4, size: 8, expected: 1}, - {input: "10000000000000000000", offset: 4, size: 7, expected: 1}, - {input: "10000000000000000000", offset: 4, size: 6, expected: 1}, - {input: "10000000000000000000", offset: 4, size: 5, expected: 1}, - {input: "10000000000000000000", offset: 4, size: 4, expected: 1}, - {input: "10000000000000000000", offset: 4, size: 3, expected: 1}, - {input: "10000000000000000000", offset: 4, size: 2, expected: 1}, - {input: "10000000000000000000", offset: 4, size: 1, expected: 1}, - {input: "08000000000000000000", offset: 3, size: 8, expected: 1}, - {input: "08000000000000000000", offset: 3, size: 7, expected: 1}, - {input: "08000000000000000000", offset: 3, size: 6, expected: 1}, - {input: "08000000000000000000", offset: 3, size: 5, expected: 1}, - {input: "08000000000000000000", offset: 3, size: 4, expected: 1}, - {input: "08000000000000000000", offset: 3, size: 3, expected: 1}, - {input: "08000000000000000000", offset: 3, size: 2, expected: 1}, - {input: "08000000000000000000", offset: 3, size: 1, expected: 1}, - {input: "04000000000000000000", offset: 2, size: 8, expected: 1}, - {input: "04000000000000000000", offset: 2, size: 7, expected: 1}, - {input: "04000000000000000000", offset: 2, size: 6, expected: 1}, - {input: "04000000000000000000", offset: 2, size: 5, expected: 1}, - {input: "04000000000000000000", offset: 2, size: 4, expected: 1}, - {input: "04000000000000000000", offset: 2, size: 3, expected: 1}, - {input: "04000000000000000000", offset: 2, size: 2, expected: 1}, - {input: "04000000000000000000", offset: 2, size: 1, expected: 1}, - {input: "02000000000000000000", offset: 1, size: 8, expected: 1}, - {input: "02000000000000000000", offset: 1, size: 7, expected: 1}, - {input: "02000000000000000000", offset: 1, size: 6, expected: 1}, - {input: "02000000000000000000", offset: 1, size: 5, expected: 1}, - {input: "02000000000000000000", offset: 1, size: 4, expected: 1}, - {input: "02000000000000000000", offset: 1, size: 3, expected: 1}, - {input: "02000000000000000000", offset: 1, size: 2, expected: 1}, - {input: "02000000000000000000", offset: 1, size: 1, expected: 1}, - {input: "010000000000000000", offset: 0, size: 8, expected: 1}, - {input: "010000000000000000", offset: 0, size: 7, expected: 1}, - {input: "010000000000000000", offset: 0, size: 6, expected: 1}, - {input: "010000000000000000", offset: 0, size: 5, expected: 1}, - {input: "010000000000000000", offset: 0, size: 4, expected: 1}, - {input: "010000000000000000", offset: 0, size: 3, expected: 1}, - {input: "010000000000000000", offset: 0, size: 2, expected: 1}, - {input: "010000000000000000", offset: 0, size: 1, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 16, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 15, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 14, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 13, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 12, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 11, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 10, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 9, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 8, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 7, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 6, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 5, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 4, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 3, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 2, expected: 1}, - {input: "0001000000000000000000", offset: 8, size: 1, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 16, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 15, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 14, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 13, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 12, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 11, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 10, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 9, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 8, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 7, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 6, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 5, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 4, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 3, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 2, expected: 1}, - {input: "8000000000000000000000", offset: 7, size: 1, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 16, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 15, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 14, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 13, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 12, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 11, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 10, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 9, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 8, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 7, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 6, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 5, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 4, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 3, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 2, expected: 1}, - {input: "4000000000000000000000", offset: 6, size: 1, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 16, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 15, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 14, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 13, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 12, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 11, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 10, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 9, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 8, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 7, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 6, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 5, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 4, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 3, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 2, expected: 1}, - {input: "2000000000000000000000", offset: 5, size: 1, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 16, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 15, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 14, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 13, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 12, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 11, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 10, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 9, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 8, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 7, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 6, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 5, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 4, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 3, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 2, expected: 1}, - {input: "1000000000000000000000", offset: 4, size: 1, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 16, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 15, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 14, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 13, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 12, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 11, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 10, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 9, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 8, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 7, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 6, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 5, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 4, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 3, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 2, expected: 1}, - {input: "0800000000000000000000", offset: 3, size: 1, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 16, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 15, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 14, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 13, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 12, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 11, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 10, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 9, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 8, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 7, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 6, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 5, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 4, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 3, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 2, expected: 1}, - {input: "0400000000000000000000", offset: 2, size: 1, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 16, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 15, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 14, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 13, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 12, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 11, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 10, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 9, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 8, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 7, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 6, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 5, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 4, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 3, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 2, expected: 1}, - {input: "0200000000000000000000", offset: 1, size: 1, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 16, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 15, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 14, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 13, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 12, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 11, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 10, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 9, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 8, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 7, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 6, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 5, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 4, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 3, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 2, expected: 1}, - {input: "01000000000000000000", offset: 0, size: 1, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 32, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 31, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 30, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 29, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 28, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 27, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 26, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 25, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 24, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 23, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 22, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 21, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 20, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 19, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 18, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 17, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 16, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 15, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 14, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 13, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 12, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 11, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 10, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 9, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 8, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 7, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 6, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 5, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 4, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 3, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 2, expected: 1}, - {input: "00010000000000000000000000", offset: 8, size: 1, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 32, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 31, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 30, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 29, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 28, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 27, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 26, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 25, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 24, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 23, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 22, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 21, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 20, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 19, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 18, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 17, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 16, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 15, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 14, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 13, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 12, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 11, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 10, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 9, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 8, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 7, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 6, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 5, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 4, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 3, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 2, expected: 1}, - {input: "80000000000000000000000000", offset: 7, size: 1, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 32, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 31, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 30, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 29, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 28, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 27, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 26, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 25, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 24, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 23, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 22, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 21, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 20, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 19, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 18, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 17, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 16, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 15, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 14, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 13, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 12, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 11, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 10, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 9, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 8, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 7, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 6, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 5, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 4, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 3, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 2, expected: 1}, - {input: "40000000000000000000000000", offset: 6, size: 1, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 32, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 31, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 30, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 29, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 28, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 27, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 26, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 25, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 24, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 23, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 22, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 21, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 20, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 19, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 18, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 17, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 16, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 15, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 14, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 13, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 12, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 11, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 10, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 9, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 8, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 7, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 6, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 5, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 4, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 3, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 2, expected: 1}, - {input: "20000000000000000000000000", offset: 5, size: 1, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 32, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 31, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 30, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 29, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 28, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 27, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 26, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 25, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 24, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 23, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 22, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 21, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 20, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 19, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 18, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 17, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 16, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 15, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 14, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 13, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 12, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 11, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 10, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 9, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 8, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 7, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 6, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 5, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 4, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 3, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 2, expected: 1}, - {input: "10000000000000000000000000", offset: 4, size: 1, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 32, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 31, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 30, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 29, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 28, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 27, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 26, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 25, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 24, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 23, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 22, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 21, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 20, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 19, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 18, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 17, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 16, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 15, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 14, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 13, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 12, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 11, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 10, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 9, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 8, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 7, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 6, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 5, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 4, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 3, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 2, expected: 1}, - {input: "08000000000000000000000000", offset: 3, size: 1, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 32, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 31, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 30, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 29, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 28, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 27, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 26, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 25, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 24, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 23, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 22, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 21, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 20, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 19, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 18, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 17, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 16, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 15, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 14, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 13, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 12, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 11, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 10, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 9, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 8, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 7, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 6, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 5, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 4, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 3, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 2, expected: 1}, - {input: "04000000000000000000000000", offset: 2, size: 1, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 32, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 31, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 30, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 29, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 28, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 27, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 26, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 25, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 24, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 23, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 22, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 21, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 20, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 19, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 18, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 17, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 16, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 15, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 14, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 13, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 12, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 11, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 10, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 9, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 8, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 7, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 6, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 5, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 4, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 3, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 2, expected: 1}, - {input: "02000000000000000000000000", offset: 1, size: 1, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 32, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 31, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 30, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 29, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 28, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 27, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 26, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 25, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 24, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 23, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 22, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 21, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 20, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 19, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 18, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 17, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 16, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 15, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 14, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 13, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 12, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 11, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 10, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 9, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 8, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 7, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 6, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 5, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 4, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 3, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 2, expected: 1}, - {input: "010000000000000000000000", offset: 0, size: 1, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 64, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 63, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 62, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 61, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 60, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 59, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 58, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 57, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 56, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 55, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 54, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 53, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 52, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 51, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 50, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 49, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 48, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 47, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 46, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 45, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 44, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 43, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 42, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 41, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 40, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 39, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 38, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 37, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 36, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 35, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 34, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 33, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 32, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 31, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 30, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 29, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 28, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 27, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 26, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 25, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 24, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 23, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 22, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 21, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 20, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 19, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 18, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 17, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 16, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 15, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 14, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 13, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 12, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 11, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 10, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 9, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 8, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 7, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 6, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 5, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 4, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 3, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 2, expected: 1}, - {input: "0001000000000000000000000000000000", offset: 8, size: 1, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 64, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 63, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 62, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 61, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 60, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 59, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 58, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 57, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 56, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 55, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 54, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 53, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 52, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 51, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 50, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 49, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 48, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 47, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 46, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 45, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 44, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 43, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 42, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 41, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 40, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 39, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 38, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 37, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 36, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 35, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 34, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 33, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 32, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 31, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 30, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 29, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 28, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 27, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 26, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 25, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 24, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 23, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 22, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 21, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 20, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 19, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 18, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 17, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 16, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 15, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 14, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 13, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 12, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 11, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 10, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 9, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 8, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 7, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 6, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 5, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 4, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 3, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 2, expected: 1}, - {input: "8000000000000000000000000000000000", offset: 7, size: 1, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 64, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 63, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 62, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 61, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 60, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 59, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 58, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 57, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 56, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 55, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 54, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 53, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 52, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 51, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 50, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 49, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 48, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 47, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 46, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 45, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 44, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 43, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 42, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 41, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 40, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 39, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 38, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 37, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 36, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 35, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 34, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 33, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 32, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 31, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 30, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 29, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 28, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 27, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 26, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 25, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 24, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 23, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 22, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 21, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 20, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 19, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 18, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 17, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 16, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 15, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 14, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 13, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 12, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 11, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 10, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 9, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 8, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 7, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 6, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 5, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 4, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 3, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 2, expected: 1}, - {input: "4000000000000000000000000000000000", offset: 6, size: 1, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 64, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 63, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 62, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 61, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 60, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 59, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 58, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 57, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 56, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 55, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 54, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 53, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 52, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 51, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 50, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 49, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 48, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 47, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 46, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 45, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 44, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 43, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 42, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 41, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 40, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 39, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 38, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 37, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 36, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 35, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 34, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 33, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 32, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 31, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 30, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 29, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 28, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 27, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 26, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 25, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 24, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 23, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 22, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 21, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 20, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 19, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 18, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 17, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 16, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 15, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 14, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 13, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 12, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 11, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 10, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 9, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 8, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 7, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 6, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 5, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 4, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 3, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 2, expected: 1}, - {input: "2000000000000000000000000000000000", offset: 5, size: 1, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 64, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 63, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 62, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 61, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 60, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 59, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 58, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 57, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 56, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 55, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 54, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 53, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 52, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 51, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 50, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 49, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 48, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 47, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 46, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 45, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 44, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 43, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 42, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 41, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 40, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 39, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 38, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 37, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 36, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 35, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 34, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 33, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 32, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 31, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 30, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 29, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 28, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 27, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 26, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 25, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 24, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 23, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 22, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 21, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 20, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 19, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 18, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 17, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 16, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 15, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 14, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 13, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 12, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 11, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 10, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 9, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 8, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 7, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 6, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 5, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 4, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 3, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 2, expected: 1}, - {input: "1000000000000000000000000000000000", offset: 4, size: 1, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 64, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 63, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 62, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 61, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 60, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 59, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 58, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 57, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 56, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 55, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 54, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 53, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 52, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 51, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 50, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 49, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 48, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 47, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 46, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 45, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 44, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 43, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 42, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 41, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 40, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 39, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 38, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 37, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 36, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 35, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 34, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 33, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 32, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 31, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 30, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 29, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 28, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 27, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 26, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 25, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 24, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 23, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 22, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 21, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 20, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 19, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 18, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 17, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 16, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 15, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 14, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 13, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 12, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 11, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 10, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 9, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 8, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 7, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 6, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 5, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 4, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 3, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 2, expected: 1}, - {input: "0800000000000000000000000000000000", offset: 3, size: 1, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 64, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 63, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 62, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 61, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 60, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 59, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 58, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 57, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 56, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 55, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 54, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 53, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 52, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 51, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 50, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 49, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 48, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 47, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 46, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 45, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 44, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 43, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 42, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 41, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 40, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 39, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 38, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 37, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 36, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 35, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 34, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 33, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 32, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 31, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 30, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 29, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 28, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 27, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 26, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 25, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 24, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 23, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 22, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 21, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 20, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 19, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 18, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 17, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 16, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 15, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 14, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 13, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 12, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 11, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 10, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 9, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 8, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 7, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 6, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 5, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 4, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 3, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 2, expected: 1}, - {input: "0400000000000000000000000000000000", offset: 2, size: 1, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 64, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 63, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 62, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 61, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 60, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 59, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 58, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 57, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 56, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 55, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 54, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 53, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 52, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 51, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 50, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 49, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 48, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 47, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 46, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 45, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 44, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 43, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 42, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 41, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 40, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 39, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 38, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 37, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 36, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 35, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 34, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 33, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 32, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 31, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 30, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 29, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 28, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 27, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 26, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 25, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 24, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 23, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 22, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 21, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 20, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 19, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 18, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 17, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 16, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 15, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 14, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 13, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 12, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 11, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 10, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 9, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 8, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 7, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 6, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 5, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 4, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 3, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 2, expected: 1}, - {input: "0200000000000000000000000000000000", offset: 1, size: 1, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 64, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 63, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 62, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 61, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 60, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 59, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 58, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 57, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 56, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 55, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 54, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 53, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 52, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 51, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 50, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 49, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 48, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 47, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 46, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 45, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 44, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 43, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 42, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 41, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 40, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 39, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 38, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 37, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 36, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 35, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 34, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 33, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 32, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 31, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 30, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 29, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 28, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 27, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 26, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 25, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 24, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 23, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 22, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 21, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 20, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 19, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 18, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 17, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 16, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 15, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 14, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 13, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 12, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 11, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 10, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 9, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 8, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 7, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 6, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 5, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 4, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 3, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 2, expected: 1}, - {input: "01000000000000000000000000000000", offset: 0, size: 1, expected: 1}, - {input: "f8ff0700000000000000000000", offset: 3, size: 16, signed: true, expected: -1}, - {input: "f0ff0700000000000000000000", offset: 3, size: 16, signed: true, expected: -2}, - {input: "e0ff0700000000000000000000", offset: 3, size: 16, signed: true, expected: -4}, - {input: "c0ff0700000000000000000000", offset: 3, size: 16, signed: true, expected: -8}, - {input: "80ff0700000000000000000000", offset: 3, size: 16, signed: true, expected: -16}, - {input: "00ff0700000000000000000000", offset: 3, size: 16, signed: true, expected: -32}, - {input: "00fe0700000000000000000000", offset: 3, size: 16, signed: true, expected: -64}, - {input: "00fc0700000000000000000000", offset: 3, size: 16, signed: true, expected: -128}, - {input: "00f80700000000000000000000", offset: 3, size: 16, signed: true, expected: -256}, - {input: "00f00700000000000000000000", offset: 3, size: 16, signed: true, expected: -512}, - {input: "00e00700000000000000000000", offset: 3, size: 16, signed: true, expected: -1024}, - {input: "00c00700000000000000000000", offset: 3, size: 16, signed: true, expected: -2048}, - {input: "00800700000000000000000000", offset: 3, size: 16, signed: true, expected: -4096}, - {input: "00000700000000000000000000", offset: 3, size: 16, signed: true, expected: -8192}, - {input: "00000600000000000000000000", offset: 3, size: 16, signed: true, expected: -16384}, - {input: "08000000000000000000000000", offset: 3, size: 16, signed: true, expected: 1}, - {input: "10000000000000000000000000", offset: 3, size: 16, signed: true, expected: 2}, - {input: "20000000000000000000000000", offset: 3, size: 16, signed: true, expected: 4}, - {input: "40000000000000000000000000", offset: 3, size: 16, signed: true, expected: 8}, - {input: "80000000000000000000000000", offset: 3, size: 16, signed: true, expected: 16}, - {input: "00010000000000000000000000", offset: 3, size: 16, signed: true, expected: 32}, - {input: "00020000000000000000000000", offset: 3, size: 16, signed: true, expected: 64}, - {input: "00040000000000000000000000", offset: 3, size: 16, signed: true, expected: 128}, - {input: "00080000000000000000000000", offset: 3, size: 16, signed: true, expected: 256}, - {input: "00100000000000000000000000", offset: 3, size: 16, signed: true, expected: 512}, - {input: "00200000000000000000000000", offset: 3, size: 16, signed: true, expected: 1024}, - {input: "00400000000000000000000000", offset: 3, size: 16, signed: true, expected: 2048}, - {input: "00800000000000000000000000", offset: 3, size: 16, signed: true, expected: 4096}, - {input: "00000100000000000000000000", offset: 3, size: 16, signed: true, expected: 8192}, - {input: "00000200000000000000000000", offset: 3, size: 16, signed: true, expected: 16384}, - {input: "00000000000000000000000000", offset: 3, size: 2, signed: true, expected: 0}, - } - - for _, v := range cases { - t.Run(fmt.Sprintf("Case: %v", v), func(t *testing.T) { - bytes, err := hex.DecodeString(v.input) - if !assert.NoError(t, err) { - assert.FailNow(t, err.Error(), "Shouldn't return error on decoding hex to bytes") - } - descriptor := &TestMemoryDescriptor{Array: bytes} - result := Read(descriptor, v.offset, v.size, v.signed) - assert.Equal(t, v.expected, result, - "Result expected: %v, actual: %v, for test data: %v", v.expected, result, v) - }) - } -} diff --git a/flatdata-go/flatdata/resource.go b/flatdata-go/flatdata/resource.go deleted file mode 100644 index 350e7584..00000000 --- a/flatdata-go/flatdata/resource.go +++ /dev/null @@ -1,106 +0,0 @@ -/* -Copyright (c) 2017 HERE Europe B.V. -See the LICENSE file in the root of this project for license details. -*/ - -package flatdata - -import ( - "errors" - "io/ioutil" - "path/filepath" - - "golang.org/x/exp/mmap" -) - -const ( - flatdataResourcePaddingBytes = 8 - flatdataSizeOffsetBytes = 8 - // ErrorInvalidResource returns in case of size of resource is smaller than minimal - ErrorInvalidResource = "invalid flatdata resource" - // ErrorCantAccessResource returns if resource wasn't been memory-mapped - ErrorCantAccessResource = "can't open flatdata resource" - // ErrorCantOpenSchemaForResource returns if schema for resource wasn't open - ErrorCantOpenSchemaForResource = "can't open schema for resource" - // ErrorSchemaEmpty returns in case when schema is empty - ErrorSchemaEmpty = "schema for resource is empty" - // ErrorSchemaDidntMatch returns if provided schema is not equal to schema in generated sources - ErrorSchemaDidntMatch = "schemas didn't match" -) - -// ResourceStorage represents abstraction for getting resource handle -type ResourceStorage interface { - GetMemoryDescriptor(name string) (MemoryDescriptor, string, error) - GetBasePath() string -} - -// NewFileResourceStorage - constructor for FileResourceStorage -func NewFileResourceStorage(path string) *FileResourceStorage { - dir := filepath.Dir(path) - return &FileResourceStorage{basePath: dir} -} - -// FileResourceStorage implements ResourceStorage interface for memory-mapped file -type FileResourceStorage struct { - basePath string -} - -// GetMemoryDescriptor returns memory descriptor for specified resource -func (r *FileResourceStorage) GetMemoryDescriptor(name string) (MemoryDescriptor, string, error) { - path := filepath.Join(r.basePath, name) - - descriptor, err := mmap.Open(path) - if err != nil { - return nil, "", errors.New(ErrorCantAccessResource) - } - if descriptor.Len() < (flatdataResourcePaddingBytes + flatdataSizeOffsetBytes) { - return nil, "", errors.New(ErrorInvalidResource) - } - - bytes, err := ioutil.ReadFile(path + ".schema") - if err != nil { - return nil, "", errors.New(ErrorCantOpenSchemaForResource) - } - if len(bytes) == 0 { - return nil, "", errors.New(ErrorSchemaEmpty) - } - - return descriptor, string(bytes), nil -} - -// GetBasePath returns base path to opened archive -func (r *FileResourceStorage) GetBasePath() string { - return r.basePath -} - -// InMemoryResourceStorage implements ResourceStorage interface for working with in-memory data -type InMemoryResourceStorage struct { - Descriptors map[string]MemoryDescriptor - Schemas map[string]string -} - -// GetMemoryDescriptor returns memory descriptor for specified resource -func (r *InMemoryResourceStorage) GetMemoryDescriptor(name string) (MemoryDescriptor, string, error) { - descriptor, ok := r.Descriptors[name] - if !ok { - return nil, "", errors.New(ErrorCantAccessResource) - } - if descriptor.Len() < (flatdataResourcePaddingBytes + flatdataSizeOffsetBytes) { - return nil, "", errors.New(ErrorInvalidResource) - } - - schema, ok := r.Schemas[name] - if !ok { - return nil, "", errors.New(ErrorCantOpenSchemaForResource) - } - if len(schema) == 0 { - return nil, "", errors.New(ErrorSchemaEmpty) - } - - return descriptor, schema, nil -} - -// GetBasePath returns empty string in case of InMemoryResourceStorage -func (r *InMemoryResourceStorage) GetBasePath() string { - return "" -} diff --git a/flatdata-go/flatdata/resource_test.go b/flatdata-go/flatdata/resource_test.go deleted file mode 100644 index f4cea356..00000000 --- a/flatdata-go/flatdata/resource_test.go +++ /dev/null @@ -1,18 +0,0 @@ -/* -Copyright (c) 2017 HERE Europe B.V. -See the LICENSE file in the root of this project for license details. -*/ - -package flatdata - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestOpenNonExistingFileResourceShouldReturnError(t *testing.T) { - r := NewFileResourceStorage("non_existing_archive") - _, _, err := r.GetMemoryDescriptor("non_existing_resource") - assert.EqualError(t, err, ErrorCantAccessResource, "Should return error for an non-existing resource") -} diff --git a/flatdata-go/flatdata/test_memory_descriptor.go b/flatdata-go/flatdata/test_memory_descriptor.go deleted file mode 100644 index cc289e25..00000000 --- a/flatdata-go/flatdata/test_memory_descriptor.go +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright (c) 2017 HERE Europe B.V. -See the LICENSE file in the root of this project for license details. -*/ - -package flatdata - -import ( - "fmt" - "io" -) - -// TestMemoryDescriptor implements MemoryDescriptor interface with reading date from []byte for internal usage -type TestMemoryDescriptor struct { - Array []byte -} - -// ReadAt number of bytes equal to p starting from offset off -func (b *TestMemoryDescriptor) ReadAt(p []byte, off int64) (n int, err error) { - if off < 0 || int64(len(b.Array)) < off { - return 0, fmt.Errorf("invalid offset %d", off) - } - n = copy(p, b.Array[off:]) - if n < len(p) { - return n, io.EOF - } - return n, nil -} - -// Close should close memory descriptor -func (b *TestMemoryDescriptor) Close() error { - return nil -} - -// Len returns length of internal byte array -func (b *TestMemoryDescriptor) Len() int { - return len(b.Array) -} - -// At return byte on position i -func (b *TestMemoryDescriptor) At(i int) byte { - return b.Array[i] -}