File size: 4,005 Bytes
b31f748
 
 
 
 
fda8a7a
b31f748
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fda8a7a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
from iscc_sct.demo import (
    compute_iscc_code,
    compare_codes,
    hamming_to_cosine,
    generate_similarity_bar,
    recalculate_iscc,
)


def test_compute_iscc_code():
    text1 = "Hello, world!"
    text2 = "Hallo, Welt!"
    bit_length = 64

    result = compute_iscc_code(text1, text2, bit_length)
    assert len(result) == 3
    assert all(isinstance(code, str) for code in result[:2])
    assert isinstance(result[2], str)


def test_compare_codes():
    code_a = "ISCC:EAAQCVG2TABD6"
    code_b = "ISCC:EAAQCVG2TABD6"
    bits = 64

    result = compare_codes(code_a, code_b, bits)
    assert isinstance(result, str)
    assert "100.00%" in result

    result = compare_codes(None, code_b, bits)
    assert result is None


def test_hamming_to_cosine():
    assert hamming_to_cosine(0, 64) == 1.0
    assert hamming_to_cosine(32, 64) == 0.0
    assert hamming_to_cosine(64, 64) == -1.0


def test_generate_similarity_bar():
    result = generate_similarity_bar(1.0)
    assert "100.00%" in result
    assert "green" in result

    result = generate_similarity_bar(-0.5)
    assert "-50.00%" in result
    assert "red" in result


from unittest.mock import patch, MagicMock
import gradio as gr
from iscc_sct.demo import process_text


@patch("iscc_sct.demo.sct.gen_text_code_semantic")
def test_process_text(mock_gen_text_code):
    mock_gen_text_code.return_value = {"iscc": "ISCC:EAAQCVG2TABD6"}

    # Test with valid input
    result = process_text("Hello, world!", 64, "a")
    assert isinstance(result, dict)
    assert len(result) == 1
    key, value = next(iter(result.items()))
    assert isinstance(key, gr.components.Textbox)
    assert isinstance(value, gr.components.Textbox)
    assert value.value == "ISCC:EAAQCVG2TABD6"

    # Test with empty input
    result = process_text("", 64, "b")
    assert result is None

    # Test with different bit length
    process_text("Test", 128, "a")
    mock_gen_text_code.assert_called_with("Test", bits=128)

    # Test with different suffix
    result = process_text("Test", 64, "b")
    assert len(result) == 1
    key, value = next(iter(result.items()))
    assert isinstance(key, gr.components.Textbox)
    assert isinstance(value, gr.components.Textbox)


@patch("iscc_sct.demo.sct.gen_text_code_semantic")
@patch("iscc_sct.demo.compare_codes")
def test_recalculate_iscc(mock_compare_codes, mock_gen_text_code):
    mock_gen_text_code.side_effect = lambda text, bits: {"iscc": f"ISCC:{text[:4].upper()}{bits}"}
    mock_compare_codes.return_value = "<similarity_html>"

    # Test with both texts non-empty
    result = recalculate_iscc("Hello", "World", 64)
    assert len(result) == 3
    assert isinstance(result[0], gr.components.Textbox)
    assert result[0].value == "ISCC:HELL64"
    assert isinstance(result[1], gr.components.Textbox)
    assert result[1].value == "ISCC:WORL64"
    assert result[2] == "<similarity_html>"

    # Test with first text empty
    result = recalculate_iscc("", "World", 128)
    assert len(result) == 3
    assert isinstance(result[0], gr.components.Textbox)
    assert result[0].value is None
    assert isinstance(result[1], gr.components.Textbox)
    assert result[1].value == "ISCC:WORL128"
    assert result[2] is None

    # Test with second text empty
    result = recalculate_iscc("Hello", "", 256)
    assert len(result) == 3
    assert isinstance(result[0], gr.components.Textbox)
    assert result[0].value == "ISCC:HELL256"
    assert isinstance(result[1], gr.components.Textbox)
    assert result[1].value is None
    assert result[2] is None

    # Test with both texts empty
    result = recalculate_iscc("", "", 64)
    assert len(result) == 3
    assert isinstance(result[0], gr.components.Textbox)
    assert result[0].value is None
    assert isinstance(result[1], gr.components.Textbox)
    assert result[1].value is None
    assert result[2] is None

    # Verify function calls
    assert mock_gen_text_code.call_count == 4
    assert mock_compare_codes.call_count == 1