| # RUN: env PYTHONPATH=%ir2vec_python_dir %python %s %S/../Inputs/input.ll %ir2vec_test_vocab_dir/dummy_3D_nonzero_opc_vocab.json | FileCheck %s |
| |
| import sys |
| import ir2vec |
| import tempfile |
| import os |
| |
| ll_file = sys.argv[1] |
| vocab_path = sys.argv[2] |
| |
| # ============================================================ |
| # loadVocab tests |
| # ============================================================ |
| |
| # Success: Load a valid vocabulary |
| vocab = ir2vec.loadVocab(vocab_path) |
| print(f"VOCAB: {type(vocab).__name__}") |
| # CHECK: VOCAB: Vocab |
| |
| # Error: Empty vocab path |
| try: |
| ir2vec.loadVocab("") |
| except ValueError: |
| print("ERROR: Empty vocab path") |
| # CHECK: ERROR: Empty vocab path |
| |
| # Error: Non-existent vocab file |
| try: |
| ir2vec.loadVocab("/nonexistent/path/bad.json") |
| except ValueError: |
| print("ERROR: Invalid vocab path") |
| # CHECK: ERROR: Invalid vocab path |
| |
| # Error: Malformed JSON vocab file |
| with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as f: |
| f.write("{ this is not valid json }") |
| bad_vocab = f.name |
| try: |
| ir2vec.loadVocab(bad_vocab) |
| except ValueError: |
| print("ERROR: Malformed vocab file") |
| finally: |
| os.unlink(bad_vocab) |
| # CHECK: ERROR: Malformed vocab file |
| |
| # Error: Wrong type for vocab path (not a string) |
| try: |
| ir2vec.loadVocab(42) |
| except TypeError: |
| print("ERROR: Invalid vocab path type") |
| # CHECK: ERROR: Invalid vocab path type |
| |
| # ============================================================ |
| # initEmbedding tests |
| # ============================================================ |
| |
| # Success: Create embedding tool with valid inputs |
| tool = ir2vec.initEmbedding( |
| filename=ll_file, mode=ir2vec.IR2VecKind.Symbolic, vocab=vocab |
| ) |
| print(f"SUCCESS: {type(tool).__name__}") |
| # CHECK: SUCCESS: IR2VecTool |
| |
| # Error: Invalid mode (string instead of IR2VecKind enum) |
| try: |
| ir2vec.initEmbedding(filename=ll_file, mode="invalid", vocab=vocab) |
| except TypeError: |
| print("ERROR: Invalid mode type") |
| # CHECK: ERROR: Invalid mode type |
| |
| # Error: Invalid mode (integer instead of IR2VecKind enum) |
| try: |
| ir2vec.initEmbedding(filename=ll_file, mode=99, vocab=vocab) |
| except TypeError: |
| print("ERROR: Invalid mode int") |
| # CHECK: ERROR: Invalid mode int |
| |
| # Error: Non-existent IR file |
| try: |
| ir2vec.initEmbedding( |
| filename="/nonexistent/bad.ll", |
| mode=ir2vec.IR2VecKind.Symbolic, |
| vocab=vocab, |
| ) |
| except ValueError: |
| print("ERROR: Invalid file") |
| # CHECK: ERROR: Invalid file |
| |
| # Error: Empty filename |
| try: |
| ir2vec.initEmbedding(filename="", mode=ir2vec.IR2VecKind.Symbolic, vocab=vocab) |
| except ValueError: |
| print("ERROR: Empty filename") |
| # CHECK: ERROR: Empty filename |
| |
| # Error: Wrong type for vocab (string instead of Vocab object) |
| try: |
| ir2vec.initEmbedding( |
| filename=ll_file, mode=ir2vec.IR2VecKind.Symbolic, vocab="vocab.json" |
| ) |
| except TypeError: |
| print("ERROR: Vocab is string") |
| # CHECK: ERROR: Vocab is string |
| |
| # Error: Wrong type for vocab (None) |
| try: |
| ir2vec.initEmbedding(filename=ll_file, mode=ir2vec.IR2VecKind.Symbolic, vocab=None) |
| except TypeError: |
| print("ERROR: Vocab is None") |
| # CHECK: ERROR: Vocab is None |
| |
| # Error: Wrong type for vocab (integer) |
| try: |
| ir2vec.initEmbedding(filename=ll_file, mode=ir2vec.IR2VecKind.Symbolic, vocab=123) |
| except TypeError: |
| print("ERROR: Vocab is int") |
| # CHECK: ERROR: Vocab is int |
| |
| # Error: Missing vocab argument entirely |
| try: |
| ir2vec.initEmbedding(filename=ll_file, mode=ir2vec.IR2VecKind.Symbolic) |
| except TypeError: |
| print("ERROR: Vocab missing") |
| # CHECK: ERROR: Vocab missing |
| |
| # Error: Wrong type for filename (not a string) |
| try: |
| ir2vec.initEmbedding(filename=42, mode=ir2vec.IR2VecKind.Symbolic, vocab=vocab) |
| except TypeError: |
| print("ERROR: Filename is int") |
| # CHECK: ERROR: Filename is int |