Add test coverage for handling of numeric values by Plan.UnmarshalJSON (#111)
diff --git a/plan_test.go b/plan_test.go
index 2f9b37c..1f59fc1 100644
--- a/plan_test.go
+++ b/plan_test.go
@@ -120,3 +120,59 @@
 		t.Fatalf("unexpected previous address %s, expected is random_id.test", plan.ResourceChanges[0].PreviousAddress)
 	}
 }
+
+func TestPlan_UnmarshalJSON(t *testing.T) {
+	t.Parallel()
+
+	b, err := os.ReadFile("testdata/numerics/plan.json")
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	testCases := map[string]struct {
+		useJSONNumber bool
+		expected      any
+	}{
+		"float64": {
+			expected: 1.23,
+		},
+		"json-number": {
+			useJSONNumber: true,
+			expected:      json.Number("1.23"),
+		},
+	}
+
+	for name, testCase := range testCases {
+		name, testCase := name, testCase
+
+		t.Run(name, func(t *testing.T) {
+			t.Parallel()
+
+			plan := &Plan{}
+
+			plan.UseJSONNumber(testCase.useJSONNumber)
+
+			err = plan.UnmarshalJSON(b)
+
+			if err != nil {
+				t.Fatal(err)
+			}
+
+			after, ok := plan.ResourceChanges[0].Change.After.(map[string]any)
+
+			if !ok {
+				t.Fatal("plan.ResourceChanges[0].Change.After cannot be asserted as map[string]any")
+			}
+
+			attr, ok := after["configurable_attribute"]
+
+			if !ok {
+				t.Fatal("configurable attribute not found")
+			}
+
+			if diff := cmp.Diff(attr, testCase.expected); diff != "" {
+				t.Errorf("unexpected difference: %s", diff)
+			}
+		})
+	}
+}
diff --git a/testdata/numerics/plan.json b/testdata/numerics/plan.json
new file mode 100644
index 0000000..41562eb
--- /dev/null
+++ b/testdata/numerics/plan.json
@@ -0,0 +1,75 @@
+{
+  "format_version": "1.2",
+  "terraform_version": "1.6.5",
+  "planned_values": {
+    "root_module": {
+      "resources": [
+        {
+          "address": "example_resource.test",
+          "mode": "managed",
+          "type": "example_resource",
+          "name": "test",
+          "provider_name": "registry.terraform.io/hashicorp/example",
+          "schema_version": 0,
+          "values": {
+            "configurable_attribute": 1.23,
+            "id": "one"
+          },
+          "sensitive_values": {}
+        }
+      ]
+    }
+  },
+  "resource_changes": [
+    {
+      "address": "example_resource.test",
+      "mode": "managed",
+      "type": "example_resource",
+      "name": "test",
+      "provider_name": "registry.terraform.io/hashicorp/example",
+      "change": {
+        "actions": [
+          "create"
+        ],
+        "before": null,
+        "after": {
+          "configurable_attribute": 1.23,
+          "id": "one"
+        },
+        "after_unknown": {},
+        "before_sensitive": false,
+        "after_sensitive": {}
+      }
+    }
+  ],
+  "configuration": {
+    "provider_config": {
+      "example": {
+        "name": "example",
+        "full_name": "registry.terraform.io/hashicorp/example"
+      }
+    },
+    "root_module": {
+      "resources": [
+        {
+          "address": "example_resource.test",
+          "mode": "managed",
+          "type": "example_resource",
+          "name": "test",
+          "provider_config_key": "example",
+          "expressions": {
+            "configurable_attribute": {
+              "constant_value": 1.23
+            },
+            "id": {
+              "constant_value": "one"
+            }
+          },
+          "schema_version": 0
+        }
+      ]
+    }
+  },
+  "timestamp": "2023-12-07T13:55:56Z",
+  "errored": false
+}
\ No newline at end of file