Caroline Ziemkiewicz

31 papers A* 1B 2Journal 16Unranked 9
YearRankTypeTitle / Venue / Authors
2020 ch.
Foundations of Data Visualization
Caroline Ziemkiewicz, Min Chen, David H. Laidlaw, Bernhard Preim, Daniel Weiskopf
2016 J jnl
IEEE Trans. Vis. Comput. Graph.
Hua Guo, Steven R. Gomez, Caroline Ziemkiewicz, David H. Laidlaw
2016 J jnl
IEEE Trans. Vis. Comput. Graph.
Alvitta Ottley, Evan M. Peck, Lane T. Harrison, Daniel Afergan, Caroline Ziemkiewicz, Holly A. Taylor, Paul K. J. Han, Remco Chang
2016 J jnl
New Media Soc.
Ginette Wessel, Caroline Ziemkiewicz, Eric Sauda
2015 J jnl
Inf. Vis.
Alvitta Ottley, R. Jordan Crouser, Caroline Ziemkiewicz, Remco Chang
2014 conf
IEEE VAST
Steven R. Gomez, Hua Guo, Caroline Ziemkiewicz, David H. Laidlaw
2014 conf
IEEE VAST
Caroline Ziemkiewicz, Adam Fouse, Gabriel Ganberg, Ryan Mullins, Stacy Lovell Pfautz
2013 ch.
Handbook of Human Computation
Remco Chang, Caroline Ziemkiewicz
2013 J jnl
IEEE Trans. Vis. Comput. Graph.
Caroline Ziemkiewicz, Alvitta Ottley, R. Jordan Crouser, Ashley Rye Yauilla, Sara L. Su, William Ribarsky, Remco Chang
2012 A* conf
CHI
Caroline Ziemkiewicz, Steven R. Gomez, David H. Laidlaw
2012 J jnl
IEEE Trans. Vis. Comput. Graph.
Steven R. Gomez, Radu Jianu, Caroline Ziemkiewicz, Hua Guo, David H. Laidlaw
2012 conf
IEEE VAST
Alvitta Ottley, R. Jordan Crouser, Caroline Ziemkiewicz, Remco Chang
2012 J jnl
Inf. Vis.
Wenwen Dou, Caroline Ziemkiewicz, Lane Harrison, Dong Hyun Jeong, William Ribarsky, Xiaoyu Wang, Remco Chang
2012 J jnl
IEEE Computer Graphics and Applications
Caroline Ziemkiewicz, Alvitta Ottley, R. Jordan Crouser, Krysta Chauncey, Sara L. Su, Remco Chang
2011 conf
IEEE VAST
Caroline Ziemkiewicz, R. Jordan Crouser, Ashley Rye Yauilla, Sara L. Su, William Ribarsky, Remco Chang
2010 J jnl
IEEE Computer Graphics and Applications
Caroline Ziemkiewicz, Robert Kosara
2010 conf
IEEE VAST
Wenwen Dou, Caroline Ziemkiewicz, Lane Harrison, Dong Hyun Jeong, Roxanne Ryan, William Ribarsky, Xiaoyu Wang, Remco Chang
2010 conf
BELIV
Robert Kosara, Caroline Ziemkiewicz
2010 B conf
AVI
Ginette Wessel, Caroline Ziemkiewicz, Remco Chang, Eric Sauda
2010 B conf
AVI
Caroline Ziemkiewicz, Robert Kosara
2010 J jnl
IEEE Trans. Vis. Comput. Graph.
Caroline Ziemkiewicz, Robert Kosara
2010 conf
BELIV
Remco Chang, Caroline Ziemkiewicz, Roman Pyzh, Joseph Kielman, William Ribarsky
2009 J jnl
IEEE Computer Graphics and Applications
Remco Chang, Caroline Ziemkiewicz, Tera Marie Green, William Ribarsky
2009 ch.
Advances in Information and Intelligent Systems
Caroline Ziemkiewicz, Robert Kosara
2009 J jnl
Comput. Graph. Forum
Caroline Ziemkiewicz, Robert Kosara
2009 J jnl
Comput. Graph. Forum
Dong Hyun Jeong, Caroline Ziemkiewicz, Brian D. Fisher, William Ribarsky, Remco Chang
2008 J jnl
IEEE Computer Graphics and Applications
Remco Chang, Thomas Butkiewicz, Caroline Ziemkiewicz, Zachary Wartell, Nancy S. Pollard, William Ribarsky
2008 J jnl
Inf. Vis.
Remco Chang, Alvin Lee, Mohammad Ghoniem, Robert Kosara, William Ribarsky, Jing Yang, Evan A. Suma, Caroline Ziemkiewicz, Daniel A. Kern, Agus Sudjianto
2008 J jnl
IEEE Trans. Vis. Comput. Graph.
Caroline Ziemkiewicz, Robert Kosara
2007 conf
IEEE VAST
Remco Chang, Mohammad Ghoniem, Robert Kosara, William Ribarsky, Jing Yang, Evan A. Suma, Caroline Ziemkiewicz, Daniel A. Kern, Agus Sudjianto
2006 conf
SIGGRAPH Sketches
Remco Chang, Thomas Butkiewicz, Caroline Ziemkiewicz, Zachary Wartell, Nancy S. Pollard, William Ribarsky
tests/unit/test_decompile_utils.py
← Index tests/unit/test_decompile_utils.py python
"""Unit tests for decompiler utility modules:
- bninja/utils/hashes.py
- bninja/utils/json_encoder.py
- bninja/analysis/low_level_normalization.py
"""
import hashlib
import json
import pytest


# ============================================================================
# 1a. hashes.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.hashes import (
    calculate_md5,
    calculate_sha256,
    calculate_tlsh,
)


class TestCalculateMD5:
    def test_calculate_md5_known_value(self):
        expected = hashlib.md5(b"test").hexdigest()
        assert calculate_md5("test") == expected

    def test_calculate_md5_empty(self):
        expected = hashlib.md5(b"").hexdigest()
        assert calculate_md5("") == expected


class TestCalculateSHA256:
    def test_calculate_sha256_known_value(self):
        expected = hashlib.sha256(b"hello world").hexdigest()
        assert calculate_sha256("hello world") == expected

    def test_calculate_sha256_empty_string(self):
        result = calculate_sha256("")
        assert len(result) == 64
        assert all(c in "0123456789abcdef" for c in result)


class TestCalculateTLSH:
    def test_calculate_tlsh_long_data(self):
        # TLSH requires >= 50 bytes
        data = "A" * 100
        result = calculate_tlsh(data)
        assert result is not None
        assert isinstance(result, str)

    def test_calculate_tlsh_short_data(self):
        data = "A" * 10
        result = calculate_tlsh(data)
        assert result is None

    def test_calculate_tlsh_deterministic(self):
        data = "x" * 200
        assert calculate_tlsh(data) == calculate_tlsh(data)



# ============================================================================
# 1b. json_encoder.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.json_encoder import BinaryNinjaEncoder


class TestBinaryNinjaEncoder:
    def test_encode_value_confidence_object(self):
        obj = type("VC", (), {"value": 42, "confidence": 255})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == 42

    def test_encode_str_fallback(self):
        obj = type("Obj", (), {"__str__": lambda self: "custom_repr"})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == "custom_repr"

    def test_encode_normal_types(self):
        data = {"a": 1, "b": [2, 3], "c": "hello"}
        result = json.dumps(data, cls=BinaryNinjaEncoder)
        assert json.loads(result) == data

    def test_encode_set_via_str(self):
        # Python sets have __str__, so BinaryNinjaEncoder converts them
        # to their string repr instead of raising TypeError.
        result = json.dumps(set([1, 2, 3]), cls=BinaryNinjaEncoder)
        parsed = json.loads(result)
        assert isinstance(parsed, str)
        assert "1" in parsed


# ============================================================================
# 1c. low_level_normalization.py
# ============================================================================

from redb.extractors.decompiler.bninja.analysis.low_level_normalization import (
    LowLevelNormalization,
)


class MockIL:
    """Mock IL node for normalization tests."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class TestLowLevelNormalization:
    def setup_method(self):
        self.normalizer = LowLevelNormalization()

    def test_normalize_single_instruction(self):
        node = MockIL(operation=5)
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [5]

    def test_normalize_nested_operands(self):
        child1 = MockIL(operation=10)
        child2 = MockIL(operation=20)
        root = MockIL(operation=1, operands=[child1, child2])
        result = self.normalizer.normalize_instruction_all_levels(root)
        assert result == [1, 10, 20]

    def test_normalize_empty_operands(self):
        node = MockIL(operation=42, operands=[])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [42]

    def test_normalize_list_operands(self):
        # Simulates phi-node style list operands
        inner = MockIL(operation=99)
        node = MockIL(operation=7, operands=[[inner]])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [7, 99]

    def test_normalize_none_input(self):
        result = self.normalizer.normalize_instruction_all_levels(None)
        assert result == []