code: def test_join_items():
      left = {"a": 1, "b": 2}
      right = {"a": 3, "c": 4}
  
      assert list(join_items(left, right)) == [
          ("a", 1, 3),
          ("b", 2, None),
          ("c", None, 4),
      ]
  
      assert list(join_items(left, right, "inner")) == [
          ("a", 1, 3),
      ]
  
      assert list(join_items(left, right, "left")) == [
          ("a", 1, 3),
          ("b", 2, None),
      ]
  
      assert list(join_items(left, right, "right")) == [
          ("a", 1, 3),
          ("c", None, 4),
      ]
  
      with pytest.raises(Exception):
          oin_items(left, right, "strict")
  
imports: import itertools
  import pickle
  import tempfile
  from dataclasses import dataclass
  from pathlib import Path
  from typing import Iterable, List, Tuple
  import numpy
  from numpy.testing import assert_equal
  from toolz import take
  import pytest
  from gluonts.dataset.artificial import constant_dataset
  from gluonts.itertools import batcher, Cached, Chain, PickleCached, Cyclic, IterableSlice, SizedIterableSlice, PseudoShuffled, rows_to_columns, columns_to_rows, select, pluck_attr, power_set, Map, StarMap, Filter, join_items, RandomYield
label_desc: Use image node_id 15 for calling a global function with example usage: test_join_items() without return types