Squashed 'third_party/flatbuffers/' changes from bc44fad35..8aa8b9139

8aa8b9139 Fix handling of +/-inf defaults in TS/rust/go/dart codegen (#7588)
001adf782 Add support for parsing proto map fields (#7613)
dbc58ab77 Fix help output for --gen-includes (#7611)
2facfeec7 Fix missing spaces in flatc help text (#7612)
4de2814c7 Fix: arduino platform build (#7625)
37b1acdaf Fix current official name of macOS (#7627)
a22434e2a Add missing #include <algorithm> for std::min/std::max uses, and #include <limits> for std::numeric_limits<> (#7624)
214cc9468 Bump Rust version to 22.10.26 before publication (#7622)
a4ff275d9 Added option to not requires an EoF token when parsing JSON (#7620)
15f32c690 python: object generation prefix and suffix (#7565)
051afd882 Add CreateSharedString to python builder (#7608)
728c033ad Add check for presence of realpath to CMakeLists.txt to support more platforms (#7603)
4c514483d Update DartTest.sh golden files (#7606)
c2d9c2080 [TS] Add support for fixed length arrays on Typescript (#5864) (#7021) (#7581)
e34ae4c6b `build.yml`: Fix missing 'v' in version
e54536127 `build.yml` Update to Kotlin Wrapper 1.0.5
49d9f941c `release.yml` Use env var for passphrase
cefc21c1f `release.yml` Add GPG key for Maven
3e64fa724 `release.yml`: Add Maven Steps
b15f3c57e `release_yml` Use new dotnet version
ff802c680 `release.yml` Use NuGet Key directly
b401957d5 `release.yml` Changed Push to follow examples
8c8151f8f `release.yml` Fix nuget push command
ebb7c203d `release.yml` Add Nuget support
203241ed3 FlatBuffers Version 22.10.26 (#7607)
ac485609c `setup.py`: Define version directly
de5b85aa6 `release.yml`: Switch to `python` directory
de3df2d88 `release.yml`: Add publishing to PyPi
043a24f2e [Python] Fixed the issue with nested unions relying on InitFromBuf. (#7576)
5a48b0d7d release.yml: Typo
ce307556f release.yml: Remove `npm ci`
cb616e27c Create release.yml (#7605)
a54ca1e75 FlatBuffers Version 22.10.25 (#7604)
5b3fadcc1 [vector] Allow to iterate with mutables (#7586)
872a49746 [Nim] Bfbs Nim Generator (#7534)
e30170296 Make type conversions explicit. (#7595)
f7b734438 Fix LongEnum definitions (#7596)
5792623df Rust fix compilation for no_std targets #2 (#7553)
0edb27528 Update Rust version (#7574)
acc6a20d3 tests/test.cpp contains a couple of tests that are only executed (#7571)
04cd037ba Fix #7580 by documenting union schema evolution rules (#7585)
e1c5db988 Turn on clippy for Rust and fix lints for non-generated code (#7575)
b80142b90 Update documentation to mention enum value attributes (#7570)
54418f371 Add support for metadata attributes for enum values (#7567) (#7568)
c92e78a9f FlatBuffers Version 22.9.29 (#7557)
d243b904c [TS] Make strict compliant and improve typings (#7549)
374f8fb5f Rust soundness fixes (#7518)
dadbff571 Moves swift package to root of repository so it can be used directly … (#7548)
76ddae006 FlatBuffers Version 22.9.24 (#7547)
cfe157ec5 Emit internal enums when swift_implementation_only (#7545)
413115858 [Python] Python fixed size array (#7529)
88046190e Upgrade grpc to 1.49.0 and make sure it builds (#7538)
72aa85a75 [C++] Rare bad buffer content alignment if sizeof(T) != alignof(T) (#7520)
bfceebb7f Fix conform (#7532)

git-subtree-dir: third_party/flatbuffers
git-subtree-split: 8aa8b9139eb330f27816a5b8b5bbef402fbe3632
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
Change-Id: I943faba499baf58e9f561b1e4734922188ba8626
diff --git a/tests/nim/testnim.py b/tests/nim/testnim.py
new file mode 100644
index 0000000..2a54cf3
--- /dev/null
+++ b/tests/nim/testnim.py
@@ -0,0 +1,22 @@
+import glob
+import os
+import shutil
+import subprocess
+from pathlib import Path
+
+test_nim_dir = Path(__file__).absolute().parent
+test_dir = test_nim_dir.parent
+
+
+def main():
+    try:
+        subprocess.check_call("testament --megatest:off all".split())
+    finally:
+        shutil.rmtree(test_nim_dir / "nimcache")
+        shutil.rmtree(test_nim_dir / "testresults")
+        for f in glob.glob(str(test_nim_dir / "tests" / "*" / "test")):
+            os.remove(f)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/tests/nim/tests/moredefaults/test.nim b/tests/nim/tests/moredefaults/test.nim
new file mode 100644
index 0000000..b49dc16
--- /dev/null
+++ b/tests/nim/tests/moredefaults/test.nim
@@ -0,0 +1,27 @@
+discard """
+  action:   "run"
+  exitcode: 0
+  timeout:  60.0
+"""
+import std/unittest
+import flatbuffers
+import ../../../MoreDefaults
+
+suite "TestMoreDefaults":
+
+  test "testFlatbuffersObject":
+    var fbb = newBuilder(0)
+    fbb.MoreDefaultsStart()
+    let root = fbb.MoreDefaultsEnd()
+    fbb.Finish(root)
+
+    var defaults: MoreDefaults
+    defaults.GetRootAs(fbb.FinishedBytes(), 0)
+    check(defaults.emptyString == "")
+    check(defaults.ints == [])
+    check(defaults.floats == [])
+    check(defaults.bools == [])
+    check(defaults.intsLength == 0)
+    check(defaults.floatsLength == 0)
+    check(defaults.abcsLength == 0)
+    check(defaults.boolsLength == 0)
diff --git a/tests/nim/tests/mutatingbool/test.nim b/tests/nim/tests/mutatingbool/test.nim
new file mode 100644
index 0000000..b079cbf
--- /dev/null
+++ b/tests/nim/tests/mutatingbool/test.nim
@@ -0,0 +1,39 @@
+discard """
+  action:   "run"
+  exitcode: 0
+  timeout:  60.0
+"""
+import std/unittest
+import std/options
+import flatbuffers
+import ../../../TestMutatingBool
+import ../../../Property
+
+suite "TestMutatingBool":
+
+  test "MutatingBool":
+    var builder = newBuilder(1024)
+    builder.TestMutatingBoolStart()
+    builder.TestMutatingBoolAddB(builder.PropertyCreate(false))
+    let root = builder.TestMutatingBoolEnd()
+    builder.Finish(root)
+
+    var test_mutating_bool: TestMutatingBool
+    GetRootAs(test_mutating_bool, builder.FinishedBytes(), 0)
+    check(test_mutating_bool.b.isSome)
+    var prop2 = test_mutating_bool.b.get()
+    check(prop2.property == false)
+    discard (prop2.property = false)
+    check(prop2.property == false)
+    discard (prop2.property = true)
+    check(prop2.property == true)
+
+  test "EmptyBool":
+    var builder = newBuilder(1024)
+    builder.TestMutatingBoolStart()
+    let root = builder.TestMutatingBoolEnd()
+    builder.Finish(root)
+
+    var test_mutating_bool: TestMutatingBool
+    GetRootAs(test_mutating_bool, builder.FinishedBytes(), 0)
+    check(test_mutating_bool.b.isNone)
diff --git a/tests/nim/tests/mygame/test.nim b/tests/nim/tests/mygame/test.nim
new file mode 100644
index 0000000..c971d60
--- /dev/null
+++ b/tests/nim/tests/mygame/test.nim
@@ -0,0 +1,207 @@
+discard """
+  action:   "run"
+  exitcode: 0
+  timeout:  60.0
+"""
+import std/unittest
+import std/options
+import flatbuffers
+import ../../../MyGame/Example/Test
+import ../../../MyGame/Example/Monster
+import ../../../MyGame/Example/Vec3
+import ../../../MyGame/Example/Color as ColorMod
+import ../../../MyGame/Example/Any as AnyMod
+
+proc verifyMonster(monster: var Monster) =
+  check(monster.hp == 80)
+  check(monster.mana == 150)
+  check(monster.name == "MyMonster")
+  check(monster.pos.isSome)
+  let pos = monster.pos.get()
+  check(pos.x == 1)
+  check(pos.y == 2)
+  check(pos.z == 3)
+  check(pos.test1 == 3)
+  check(pos.test2 == Color.Green)
+  check(pos.test3.a == 5)
+  check(pos.test3.b == 6)
+  check(monster.testType == Any.Monster)
+  check(monster.test.isSome)
+  let monster2 = Monster(tab: monster.test.get())
+  check(monster2.name == "Fred")
+  check((monster.mana = 10) == false)
+  check(monster.mana == 150)
+  check(monster.inventoryLength == 5)
+  var sum: uint8 = 0
+  for item in monster.inventory:
+    sum += item
+  check(sum == 10)
+  check(monster.test4Length == 2)
+
+  let test0 = monster.test4(0)
+  let test1 = monster.test4(1)
+  var sum0 = test0.a + test0.b
+  var sum1 = test1.a + test1.b
+  check(sum0 + sum1 == 100)
+
+  check(monster.testarrayofstringLength == 2)
+  check(monster.testarrayofstring(0) == "test1")
+  check(monster.testarrayofstring(1) == "test2")
+  check(monster.testbool == true)
+
+
+suite "TestMyGame":
+
+  test "testData":
+    let data: seq[byte] = @[byte(48), 0, 0, 0, 77, 79, 78, 83, 0, 0, 0, 0, 36,
+        0, 72, 0, 40, 0, 0, 0, 38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0,
+        16, 0, 12, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 164, 0, 0, 0,
+        0, 0, 0, 1, 60, 0, 0, 0, 68, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0,
+        0, 120, 0, 0, 0, 0, 0, 80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 2, 0, 0, 0,
+        64, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 30, 0, 40, 0, 10, 0, 20, 0, 152,
+        255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0, 70, 114, 101, 100, 0, 0, 0, 0, 5,
+        0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 50, 0,
+        0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 49, 0, 0, 0, 9, 0, 0, 0, 77, 121,
+        77, 111, 110, 115, 116, 101, 114, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 36,
+        0, 0, 0, 4, 0, 0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255,
+        255, 36, 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28,
+        0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97,
+        114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 111, 0, 0, 0]
+    var monster: Monster
+    GetRootAs(monster, data, 0)
+    verifyMonster(monster)
+
+  test "testCreateString":
+    var fbb = newBuilder(0)
+    let name = fbb.Create("Frodo")
+    fbb.Finish(name)
+    check(fbb.FinishedBytes() == @[byte(4), 0, 0, 0, 5, 0, 0, 0, 70, 114, 111,
+        100, 111, 0, 0, 0])
+
+  test "testCreateVector":
+    var fbb = newBuilder(0)
+    let vec = fbb.Create(@[byte(0), 1, 2, 3, 4])
+    fbb.Finish(vec)
+    check(fbb.FinishedBytes() == @[byte(4), 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4,
+        0, 0, 0])
+
+  test "createSimpleMonster":
+    var fbb = newBuilder(0)
+    let names = [
+      fbb.Create("Frodo"),
+      fbb.Create("Barney"),
+      fbb.Create("Wilma"),
+    ]
+    fbb.MonsterStart()
+    fbb.MonsterAddName(names[0])
+    let monster = fbb.MonsterEnd()
+    fbb.Finish(monster)
+    check(fbb.FinishedBytes() == @[byte(16), 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0,
+        0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97,
+        0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70,
+        114, 111, 100, 111, 0, 0, 0])
+
+  test "testCreateTestVector":
+    var fbb = newBuilder(0)
+    fbb.MonsterStartTest4Vector(2)
+    discard fbb.TestCreate(a = 30, b = 40)
+    discard fbb.TestCreate(a = 10, b = 20)
+    let test4 = fbb.EndVector()
+    fbb.Finish(test4)
+    check(fbb.FinishedBytes() == @[byte(4), 0, 0, 0, 2, 0, 0, 0, 10, 0, 20, 0,
+        30, 0, 40, 0])
+
+  test "testTableWithStruct":
+    var fbb = newBuilder(0)
+    fbb.MonsterStart()
+    fbb.MonsterAddPos(fbb.Vec3Create(x = 1,
+        y = 2,
+        z = 3,
+        test1 = 3,
+        test2 = Color.Green,
+        test3_a = 5, test3_b = 6))
+
+    let monster_end = fbb.MonsterEnd()
+    fbb.Finish(monster_end)
+    check(fbb.FinishedBytes() == @[byte(12), 0, 0, 0, 0, 0, 6, 0, 36, 0, 4, 0,
+        6, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0])
+
+  test "testCreateMonster":
+    var fbb = newBuilder(0)
+    let names = [
+      fbb.Create("Frodo"),
+      fbb.Create("Barney"),
+      fbb.Create("Wilma"),
+    ]
+
+    var offsets: seq[uoffset] = @[]
+    fbb.MonsterStart()
+    fbb.MonsterAddName(names[0])
+    offsets.add(fbb.MonsterEnd())
+    fbb.MonsterStart()
+    fbb.MonsterAddName(names[1])
+    offsets.add(fbb.MonsterEnd())
+    fbb.MonsterStart()
+    fbb.MonsterAddName(names[2])
+    offsets.add(fbb.MonsterEnd())
+
+    let str = fbb.Create("MyMonster")
+    let test1 = fbb.Create("test1")
+    let test2 = fbb.Create("test2")
+    let inv = fbb.Create(@[byte(0), 1, 2, 3, 4])
+    let fred = fbb.Create("Fred")
+    fbb.MonsterStart()
+    fbb.MonsterAddName(fred)
+    let mon2 = fbb.MonsterEnd()
+
+    fbb.MonsterStartTest4Vector(2)
+    discard fbb.TestCreate(a = 30, b = 40)
+    discard fbb.TestCreate(a = 10, b = 20)
+    let test4 = fbb.EndVector()
+
+    fbb.MonsterStartTestarrayofstringVector(2)
+    fbb.PrependOffsetRelative(test1)
+    fbb.PrependOffsetRelative(test2)
+    let stringTestVector = fbb.EndVector()
+
+    fbb.MonsterStartTestarrayoftablesVector(3)
+    fbb.PrependOffsetRelative(offsets[0])
+    fbb.PrependOffsetRelative(offsets[1])
+    fbb.PrependOffsetRelative(offsets[2])
+    let tableTestVector = fbb.EndVector()
+
+    fbb.MonsterStart()
+    fbb.MonsterAddPos(fbb.Vec3Create(x = 1,
+        y = 2,
+        z = 3,
+        test1 = 3,
+        test2 = Color.Green,
+        test3_a = 5, test3_b = 6))
+    fbb.MonsterAddHp(80)
+    fbb.MonsterAddName(str)
+    fbb.MonsterAddInventory(inv)
+    fbb.MonsterAddTestType(Any.Monster.uint8)
+    fbb.MonsterAddTest(mon2)
+    fbb.MonsterAddTest4(test4)
+    fbb.MonsterAddTestarrayofstring(stringTestVector)
+    fbb.MonsterAddTestbool(true)
+    fbb.MonsterAddTestarrayoftables(tableTestVector)
+    let monster_end = fbb.MonsterEnd()
+    fbb.Finish(monster_end)
+    check(fbb.FinishedBytes() == @[byte(40), 0, 0, 0, 36, 0, 72, 0, 40, 0, 0, 0,
+        38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0, 16, 0, 12, 0, 4, 0, 0, 0,
+        0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 1, 76, 0, 0, 0,
+        84, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 1, 104, 0, 0, 0, 136, 0, 0, 0, 0, 0,
+        80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 3, 0, 0, 0, 108, 0, 0, 0, 112, 0,
+        0, 0, 128, 0, 0, 0, 2, 0, 0, 0, 52, 0, 0, 0, 60, 0, 0, 0, 2, 0, 0, 0,
+        10, 0, 20, 0, 30, 0, 40, 0, 168, 255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0,
+        70, 114, 101, 100, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 5, 0,
+        0, 0, 116, 101, 115, 116, 50, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116,
+        49, 0, 0, 0, 9, 0, 0, 0, 77, 121, 77, 111, 110, 115, 116, 101, 114, 0,
+        0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255, 255, 36, 0, 0, 0,
+        12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0,
+        0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101,
+        121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 111, 0, 0, 0])
diff --git a/tests/nim/tests/optional_scalars/test.nim b/tests/nim/tests/optional_scalars/test.nim
new file mode 100644
index 0000000..1e02c59
--- /dev/null
+++ b/tests/nim/tests/optional_scalars/test.nim
@@ -0,0 +1,29 @@
+discard """
+  action:   "run"
+  exitcode: 0
+  timeout:  60.0
+"""
+import std/unittest
+import std/options
+import flatbuffers
+import ../../../optional_scalars/ScalarStuff
+
+
+suite "TestOptionalScalars":
+
+  test "OptionalScalars":
+    var builder = newBuilder(1024)
+    builder.ScalarStuffStart()
+    let root = builder.ScalarStuffEnd()
+    builder.Finish(root)
+
+    var optionals: ScalarStuff
+    optionals.GetRootAs(builder.FinishedBytes(), 0)
+
+    # Creates a flatbuffer with optional values.
+    check(optionals.justI8 == 0)
+    check(optionals.maybeF32.isNone)
+    check(optionals.defaultBool == true)
+    check(optionals.justU16 == 0)
+    check(optionals.maybeEnum.isNone)
+    check(optionals.defaultU64 == 42)