# Substituting libraries

Now suppose we have two Logisim circuits that are supposed to do the same thing. As an instructor, you might have had students complete an assignment: You have one file containing your solution, but you have several student files containing their work. Maybe the assignment was to build a two-bit adder.

I'll imagine that we have two files, named `adder-master.circ` and `adder-query.circ`. Each file contains a circuit named 2-bit adder (it's important that the circuit to test be named exactly the same), whose appearance is the following.

> `adder-master.circ` | `adder-query.circ`

As you can see, the master circuit uses Logisim's built-in adder, while the query circuit uses two subcircuits representing a half adder and a full adder (which themselves are built up of simple gates). For the purpose of our example, the query circuit has a stupid error: The carry from the half adder is not connected into the full adder.

We build our testing circuit into a different file. There, we load `adder-master.circ` as a Logisim Library (Project > Load Library > Logisim Library…), and we insert its 2-bit adder as a subcircuit. We could execute this circuit directly to get the desired output for a perfect solution.

> `java -jar logisim-filename.jar adder-test.circ -tty table`

But we want to execute the circuit using `adder-query.circ` rather than `adder-master.circ` as the loaded library. The naive approach would be to open Logisim and load that library instead; or you might simply remove the `adder-master.circ` file and rename `adder-query.circ` to be named `adder-master.circ` instead. But Logisim includes a handy `-sub` option that temporarily replace one file by another during that session — without making any changes on disk.

> `java -jar logisim-filename.jar adder-test.circ -tty table -sub adder-master.circ adder-query.circ`

The output you would see from this is shown below; it is of course different from what we saw in the previous section since now it is executing using the erroneous `adder-query.circ`.

>     00      00      0E0
>     01      00      0E1
>     10      00      EE0
>     11      00      EE1
>     00      01      0E1
>     01      01      0E0
>     10      01      EE1
>     11      01      EE0
>     00      10      EE0
>     01      10      EE1
>     10      10      1E0
>     11      10      1E1
>     00      11      EE1
>     01      11      EE0
>     10      11      1E1
>     11      11      1E0

Next: Other verification options.