extends SnapshotSerializerTest

func get_suite_name() -> String:
	return "RedundantSnapshotSerializer"

func suite() -> void:
	test("should deserialize to same", func():
		var schema := _NetworkSchema.new()
		var serializer := _RedundantSnapshotSerializer.new(schema)

		var subject := Node3D.new()
		Vest.get_tree().root.add_child.call_deferred(subject)
		await subject.ready
		NetworkIdentityServer.register_node(subject)

		var snapshots := [
			_Snapshot.of(0, [
				[subject, "position", Vector3(0., 0., 0.)],
				[subject, "quaternion", Quaternion.from_euler(Vector3.ONE)],
				[subject, "scale", Vector3(1., 1., 1.)]
			], [subject]),
			_Snapshot.of(1, [
				[subject, "position", Vector3(1., 0., 0.)],
				[subject, "quaternion", Quaternion.from_euler(Vector3.ZERO)],
				[subject, "scale", Vector3(1., .5, 1.)]
			], [subject])
		] as Array[_Snapshot]

		var props := _PropertyPool.of([
			[subject, "position"],
			[subject, "quaternion"],
			[subject, "scale"]
		])

		var serialized := serializer.write_for(1, snapshots, props)
		var deserialized := serializer.read_from(1, props, to_buffer(serialized))

		expect_equal(deserialized.size(), snapshots.size(), "Not all snapshots were deserialized!")
		for i in snapshots.size():
			expect_equal(deserialized[i], snapshots[i])

		Vest.message("Serialized %d snapshots to %d bytes" % [snapshots.size(), serialized.size()])
	)
